ReadHeader() -> Streams()

This commit is contained in:
nareix 2016-06-30 22:55:11 +08:00
parent e85b96ed10
commit 61326c9bfd

View File

@ -20,12 +20,12 @@ type Demuxer struct {
pat PAT pat PAT
pmt *PMT pmt *PMT
streams []*Stream streams []*Stream
streamsintf []av.CodecData
probed bool
} }
func (self *Demuxer) Streams() (streams []av.CodecData, err error) { func (self *Demuxer) Streams() (streams []av.CodecData, err error) {
if len(self.streams) == 0 { if err = self.probe(); err != nil {
err = fmt.Errorf("ts: no streams")
return return
} }
for _, stream := range self.streams { for _, stream := range self.streams {
@ -34,7 +34,10 @@ func (self *Demuxer) Streams() (streams []av.CodecData, err error) {
return return
} }
func (self *Demuxer) ReadHeader() (err error) { func (self *Demuxer) probe() (err error) {
if self.probed {
return
}
for { for {
if self.pmt != nil { if self.pmt != nil {
n := 0 n := 0
@ -51,10 +54,14 @@ func (self *Demuxer) ReadHeader() (err error) {
return return
} }
} }
self.probed = true
return return
} }
func (self *Demuxer) ReadPacket() (pkt av.Packet, err error) { func (self *Demuxer) ReadPacket() (pkt av.Packet, err error) {
if err = self.probe(); err != nil {
return
}
if err = self.poll(); err != nil { if err = self.poll(); err != nil {
return return
} }
@ -111,11 +118,6 @@ func (self *Demuxer) readTSPacket() (err error) {
} }
} }
self.streamsintf = make([]av.CodecData, len(self.streams))
for i, stream := range self.streams {
self.streamsintf[i] = stream
}
} else { } else {
for _, stream := range self.streams { for _, stream := range self.streams {
if header.PID == stream.pid { if header.PID == stream.pid {