From 93f7f62fad45d0663ad0a5c59c842c28352fbd57 Mon Sep 17 00:00:00 2001 From: nareix Date: Thu, 30 Jun 2016 23:21:27 +0800 Subject: [PATCH] fix demuxer bug --- demuxer.go | 14 +++++++++----- stream.go | 1 - 2 files changed, 9 insertions(+), 6 deletions(-) diff --git a/demuxer.go b/demuxer.go index c5dce08..f34b203 100644 --- a/demuxer.go +++ b/demuxer.go @@ -70,7 +70,7 @@ func (self *Demuxer) ReadPacket() (pkt av.Packet, err error) { } func (self *Demuxer) poll() (err error) { - for self.gotpkt { + for !self.gotpkt { if err = self.readTSPacket(); err != nil { return } @@ -108,6 +108,7 @@ func (self *Demuxer) readTSPacket() (err error) { stream.idx = i stream.demuxer = self stream.pid = info.ElementaryPID + stream.streamType = info.StreamType switch info.StreamType { case ElementaryStreamTypeH264: self.streams = append(self.streams, stream) @@ -142,19 +143,21 @@ func (self *Stream) payloadEnd() (err error) { dts = pts } - self.pkt = av.Packet{ + pkt := &self.demuxer.pkt + *pkt = av.Packet{ Idx: int8(self.idx), IsKeyFrame: self.tshdr.RandomAccessIndicator, Time: time.Duration(dts)*time.Second / time.Duration(PTS_HZ), Data: payload, } 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 if self.CodecData == nil { - if self.streamType == ElementaryStreamTypeAdtsAAC { + switch self.streamType { + case ElementaryStreamTypeAdtsAAC: var config aacparser.MPEG4AudioConfig if config, _, _, _, err = aacparser.ReadADTSFrame(payload); err != nil { 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 { return } - } else if self.streamType == ElementaryStreamTypeH264 { + + case ElementaryStreamTypeH264: if false { fmt.Println(hex.Dump(payload)) } diff --git a/stream.go b/stream.go index 2c665fb..3bd2a2a 100644 --- a/stream.go +++ b/stream.go @@ -25,7 +25,6 @@ type Stream struct { cacheSize int idx int - pkt av.Packet } func timeToPesTs(tm time.Duration) uint64 {