test transcode slow
This commit is contained in:
		| @@ -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 | ||||
|   | ||||
| @@ -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 | ||||
| 		} | ||||
|   | ||||
| @@ -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 | ||||
|   | ||||
		Reference in New Issue
	
	Block a user
	 deepch
					deepch