From 4b5f50e03f277aee7718c1d35e683f319d0bb5c0 Mon Sep 17 00:00:00 2001 From: nareix Date: Wed, 13 Jul 2016 13:13:32 +0800 Subject: [PATCH] flv/rtmp: packet read logic bugfix --- format/flv/flv.go | 12 +++++++++--- format/flv/flvio/flvio.go | 8 +------- format/rtmp/rtmp.go | 2 -- 3 files changed, 10 insertions(+), 12 deletions(-) diff --git a/format/flv/flv.go b/format/flv/flv.go index 51b80fa..e6d85dc 100644 --- a/format/flv/flv.go +++ b/format/flv/flv.go @@ -312,9 +312,9 @@ func (self *Muxer) WriteHeader(streams []av.CodecData) (err error) { func (self *Muxer) WritePacket(pkt av.Packet) (err error) { stream := self.streams[pkt.Idx] - tag, ts := PacketToTag(pkt, stream) + tag, timestamp := PacketToTag(pkt, stream) - if err = flvio.WriteTag(self.pw, tag, ts); err != nil { + if err = flvio.WriteTag(self.pw, tag, timestamp); err != nil { return } @@ -361,7 +361,7 @@ func (self *Demuxer) prepare() (err error) { for !self.prober.Probed() { var tag flvio.Tag var timestamp int32 - if tag, _, err = flvio.ReadTag(self.pr); err != nil { + if tag, timestamp, err = flvio.ReadTag(self.pr); err != nil { return } if err = self.prober.PushTag(tag, timestamp); err != nil { @@ -374,6 +374,12 @@ func (self *Demuxer) prepare() (err error) { return } +func dumptag(_tag flvio.Tag, timestamp int32) { + if tag, ok := _tag.(*flvio.Videodata); ok { + fmt.Printf("video ts=%d cts=%d FrameType=%d AVCPacketType=%d\n", timestamp, tag.CompositionTime, tag.FrameType, tag.AVCPacketType) + } +} + func (self *Demuxer) Streams() (streams []av.CodecData, err error) { if err = self.prepare(); err != nil { return diff --git a/format/flv/flvio/flvio.go b/format/flv/flvio/flvio.go index b53362f..3cebcd9 100644 --- a/format/flv/flvio/flvio.go +++ b/format/flv/flvio/flvio.go @@ -247,7 +247,6 @@ type Videodata struct { AVCPacketType uint8 Data []byte - Datav [][]byte CompositionTime int32 } @@ -256,7 +255,7 @@ func (self Videodata) Type() uint8 { } func (self Videodata) Len() int { - return 5 + len(self.Data) + pio.VecLen(self.Datav) + return 5 + len(self.Data) } func (self *Videodata) Unmarshal(r *pio.Reader) (err error) { @@ -297,11 +296,6 @@ func (self Videodata) Marshal(w *pio.Writer) (err error) { if _, err = w.Write(self.Data); err != nil { return } - for _, data := range self.Datav { - if _, err = w.Write(data); err != nil { - return - } - } } return } diff --git a/format/rtmp/rtmp.go b/format/rtmp/rtmp.go index 7754d63..05b5b8e 100644 --- a/format/rtmp/rtmp.go +++ b/format/rtmp/rtmp.go @@ -715,12 +715,10 @@ func (self *Conn) ReadPacket() (pkt av.Packet, err error) { return } - /* if !self.prober.Empty() { pkt = self.prober.PopPacket() return } - */ for { var tag flvio.Tag