test transcode slow

This commit is contained in:
deepch
2023-03-22 21:59:06 +03:00
parent c923e0010b
commit 175afae1c1
4 changed files with 115 additions and 8 deletions

View File

@@ -376,7 +376,7 @@ func (self *ElemStreamDesc) parseDescHdr(b []byte, offset int) (n int, tag uint8
return
}
func ReadFileAtoms(r io.ReadSeeker) (atoms []Atom, err error) {
func ReadFileAtoms(r io.ReadSeeker, name string) (atoms []Atom, err error) {
for {
offset, _ := r.Seek(0, 1)
taghdr := make([]byte, 8)
@@ -387,6 +387,12 @@ func ReadFileAtoms(r io.ReadSeeker) (atoms []Atom, err error) {
return
}
size := pio.U32BE(taghdr[0:])
if size == 0 {
err = fmt.Errorf("bad hdr size")
return
}
tag := Tag(pio.U32BE(taghdr[4:]))
var atom Atom

View File

@@ -2,6 +2,7 @@ package ts
import (
"fmt"
"github.com/deepch/vdk/codec/h265parser"
"io"
"time"
@@ -11,7 +12,7 @@ import (
"github.com/deepch/vdk/format/ts/tsio"
)
var CodecTypes = []av.CodecType{av.H264, av.AAC}
var CodecTypes = []av.CodecType{av.H264, av.H265, av.AAC}
type Muxer struct {
w io.Writer
@@ -123,6 +124,11 @@ func (self *Muxer) WritePATPMT() (err error) {
StreamType: tsio.ElementaryStreamTypeH264,
ElementaryPID: stream.pid,
})
case av.H265:
elemStreams = append(elemStreams, tsio.ElementaryStreamInfo{
StreamType: tsio.ElementaryStreamTypeH265,
ElementaryPID: stream.pid,
})
}
}
@@ -210,6 +216,36 @@ func (self *Muxer) WritePacket(pkt av.Packet) (err error) {
n := tsio.FillPESHeader(self.peshdr, tsio.StreamIdH264, -1, pkt.Time+pkt.CompositionTime, pkt.Time)
datav[0] = self.peshdr[:n]
if err = stream.tsw.WritePackets(self.w, datav, pkt.Time, pkt.IsKeyFrame, false); err != nil {
return
}
case av.H265:
codec := stream.CodecData.(h265parser.CodecData)
nalus := self.nalus[:0]
if pkt.IsKeyFrame {
nalus = append(nalus, codec.SPS())
nalus = append(nalus, codec.PPS())
nalus = append(nalus, codec.VPS())
}
pktnalus, _ := h265parser.SplitNALUs(pkt.Data)
for _, nalu := range pktnalus {
nalus = append(nalus, nalu)
}
datav := self.datav[:1]
for i, nalu := range nalus {
if i == 0 {
datav = append(datav, h265parser.AUDBytes)
} else {
datav = append(datav, h265parser.StartCodeBytes)
}
datav = append(datav, nalu)
}
n := tsio.FillPESHeader(self.peshdr, tsio.StreamIdH264, -1, pkt.Time+pkt.CompositionTime, pkt.Time)
datav[0] = self.peshdr[:n]
if err = stream.tsw.WritePackets(self.w, datav, pkt.Time, pkt.IsKeyFrame, false); err != nil {
return
}

View File

@@ -36,6 +36,7 @@ const (
ElementaryStreamTypeH264 = 0x1B
ElementaryStreamTypeAdtsAAC = 0x0F
ElementaryStreamTypeAlignmentDescriptor = 0x06
ElementaryStreamTypeH265 = 0x24
)
type PATEntry struct {
@@ -516,7 +517,7 @@ func NewTSWriter(pid uint16) *TSWriter {
return w
}
//TSHeader func
// TSHeader func
type TSHeader struct {
PID uint
PCR uint64
@@ -528,7 +529,7 @@ type TSHeader struct {
HeaderLength uint
}
//WriteTSHeader func
// WriteTSHeader func
func WriteTSHeader(w io.Writer, element TSHeader, dataLength int) (written int, err error) {
var flags, extFlags uint
@@ -688,13 +689,13 @@ func makeRepeatValBytes(val byte, n int) []byte {
return b
}
//WriteRepeatVal func
// WriteRepeatVal func
func WriteRepeatVal(w io.Writer, val byte, n int) (err error) {
_, err = w.Write(makeRepeatValBytes(val, n))
return
}
//WriteUInt64 func
// WriteUInt64 func
func WriteUInt64(w io.Writer, val uint64, n int) (err error) {
var b [8]byte
for i := n - 1; i >= 0; i-- {
@@ -707,12 +708,12 @@ func WriteUInt64(w io.Writer, val uint64, n int) (err error) {
return
}
//WriteUInt func
// WriteUInt func
func WriteUInt(w io.Writer, val uint, n int) (err error) {
return WriteUInt64(w, uint64(val), n)
}
//PCRToUInt func
// PCRToUInt func
func PCRToUInt(pcr uint64) uint64 {
base := pcr / 300
ext := pcr % 300