fix demuxer bug
This commit is contained in:
parent
9ffa28a3fd
commit
93f7f62fad
14
demuxer.go
14
demuxer.go
@ -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))
|
||||||
}
|
}
|
||||||
|
Loading…
x
Reference in New Issue
Block a user