demuxer add pkts buf
This commit is contained in:
parent
93f7f62fad
commit
72fd658033
45
demuxer.go
45
demuxer.go
@ -14,8 +14,8 @@ import (
|
|||||||
type Demuxer struct {
|
type Demuxer struct {
|
||||||
R io.Reader
|
R io.Reader
|
||||||
|
|
||||||
gotpkt bool
|
pktidx int
|
||||||
pkt av.Packet
|
pkts []av.Packet
|
||||||
|
|
||||||
pat PAT
|
pat PAT
|
||||||
pmt *PMT
|
pmt *PMT
|
||||||
@ -62,20 +62,31 @@ func (self *Demuxer) ReadPacket() (pkt av.Packet, err error) {
|
|||||||
if err = self.probe(); err != nil {
|
if err = self.probe(); err != nil {
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
|
|
||||||
|
for self.pktidx == len(self.pkts) {
|
||||||
if err = self.poll(); err != nil {
|
if err = self.poll(); err != nil {
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
pkt = self.pkt
|
}
|
||||||
|
if self.pktidx < len(self.pkts) {
|
||||||
|
pkt = self.pkts[self.pktidx]
|
||||||
|
self.pktidx++
|
||||||
|
}
|
||||||
|
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
|
|
||||||
func (self *Demuxer) poll() (err error) {
|
func (self *Demuxer) poll() (err error) {
|
||||||
for !self.gotpkt {
|
self.pktidx = 0
|
||||||
|
self.pkts = self.pkts[0:0]
|
||||||
|
for {
|
||||||
if err = self.readTSPacket(); err != nil {
|
if err = self.readTSPacket(); err != nil {
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
|
if len(self.pkts) > 0 {
|
||||||
|
break
|
||||||
|
}
|
||||||
}
|
}
|
||||||
self.gotpkt = false
|
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -143,18 +154,6 @@ func (self *Stream) payloadEnd() (err error) {
|
|||||||
dts = pts
|
dts = pts
|
||||||
}
|
}
|
||||||
|
|
||||||
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 {
|
|
||||||
pkt.CompositionTime = time.Duration(pts-dts)*time.Second / time.Duration(PTS_HZ)
|
|
||||||
}
|
|
||||||
self.demuxer.gotpkt = true
|
|
||||||
|
|
||||||
if self.CodecData == nil {
|
if self.CodecData == nil {
|
||||||
switch self.streamType {
|
switch self.streamType {
|
||||||
case ElementaryStreamTypeAdtsAAC:
|
case ElementaryStreamTypeAdtsAAC:
|
||||||
@ -196,6 +195,18 @@ func (self *Stream) payloadEnd() (err error) {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
demuxer := self.demuxer
|
||||||
|
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 {
|
||||||
|
pkt.CompositionTime = time.Duration(pts-dts)*time.Second / time.Duration(PTS_HZ)
|
||||||
|
}
|
||||||
|
demuxer.pkts = append(demuxer.pkts, *pkt)
|
||||||
|
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
|
|
||||||
|
Loading…
x
Reference in New Issue
Block a user