fix demuxer bug

This commit is contained in:
nareix 2016-06-30 23:21:27 +08:00
parent 9ffa28a3fd
commit 93f7f62fad
2 changed files with 9 additions and 6 deletions

View File

@ -70,7 +70,7 @@ func (self *Demuxer) ReadPacket() (pkt av.Packet, err error) {
} }
func (self *Demuxer) poll() (err error) { func (self *Demuxer) poll() (err error) {
for self.gotpkt { for !self.gotpkt {
if err = self.readTSPacket(); err != nil { if err = self.readTSPacket(); err != nil {
return return
} }
@ -108,6 +108,7 @@ func (self *Demuxer) readTSPacket() (err error) {
stream.idx = i stream.idx = i
stream.demuxer = self stream.demuxer = self
stream.pid = info.ElementaryPID stream.pid = info.ElementaryPID
stream.streamType = info.StreamType
switch info.StreamType { switch info.StreamType {
case ElementaryStreamTypeH264: case ElementaryStreamTypeH264:
self.streams = append(self.streams, stream) self.streams = append(self.streams, stream)
@ -142,19 +143,21 @@ func (self *Stream) payloadEnd() (err error) {
dts = pts dts = pts
} }
self.pkt = av.Packet{ pkt := &self.demuxer.pkt
*pkt = av.Packet{
Idx: int8(self.idx), Idx: int8(self.idx),
IsKeyFrame: self.tshdr.RandomAccessIndicator, IsKeyFrame: self.tshdr.RandomAccessIndicator,
Time: time.Duration(dts)*time.Second / time.Duration(PTS_HZ), Time: time.Duration(dts)*time.Second / time.Duration(PTS_HZ),
Data: payload, Data: payload,
} }
if pts != dts { if pts != dts {
self.pkt.CompositionTime = time.Duration(pts-dts)*time.Second / time.Duration(PTS_HZ) pkt.CompositionTime = time.Duration(pts-dts)*time.Second / time.Duration(PTS_HZ)
} }
self.demuxer.gotpkt = true self.demuxer.gotpkt = true
if self.CodecData == nil { if self.CodecData == nil {
if self.streamType == ElementaryStreamTypeAdtsAAC { switch self.streamType {
case ElementaryStreamTypeAdtsAAC:
var config aacparser.MPEG4AudioConfig var config aacparser.MPEG4AudioConfig
if config, _, _, _, err = aacparser.ReadADTSFrame(payload); err != nil { if config, _, _, _, err = aacparser.ReadADTSFrame(payload); err != nil {
err = fmt.Errorf("ReadADTSFrame failed: %s", err) err = fmt.Errorf("ReadADTSFrame failed: %s", err)
@ -168,7 +171,8 @@ func (self *Stream) payloadEnd() (err error) {
if self.CodecData, err = aacparser.NewCodecDataFromMPEG4AudioConfigBytes(bw.Bytes()); err != nil { if self.CodecData, err = aacparser.NewCodecDataFromMPEG4AudioConfigBytes(bw.Bytes()); err != nil {
return return
} }
} else if self.streamType == ElementaryStreamTypeH264 {
case ElementaryStreamTypeH264:
if false { if false {
fmt.Println(hex.Dump(payload)) fmt.Println(hex.Dump(payload))
} }

View File

@ -25,7 +25,6 @@ type Stream struct {
cacheSize int cacheSize int
idx int idx int
pkt av.Packet
} }
func timeToPesTs(tm time.Duration) uint64 { func timeToPesTs(tm time.Duration) uint64 {