From d193138644c9609505ddf6b1fe1ec8ced96eafe2 Mon Sep 17 00:00:00 2001 From: nareix Date: Mon, 4 Jul 2016 09:06:15 +0800 Subject: [PATCH] rtsp: add DebugRtp default options; fix findRTSP block locate bug --- format/rtsp/client.go | 29 ++++++++++++++++++++++++----- 1 file changed, 24 insertions(+), 5 deletions(-) diff --git a/format/rtsp/client.go b/format/rtsp/client.go index db58d49..e174080 100644 --- a/format/rtsp/client.go +++ b/format/rtsp/client.go @@ -26,6 +26,10 @@ import ( var ErrCodecDataChange = fmt.Errorf("rtsp: codec data change, please call HandleCodecDataChange()") +var DebugRtp = false +var DebugRtsp = false +var SkipErrRtpBlock = false + const ( stageDescribeDone = iota+1 stageSetupDone @@ -105,6 +109,9 @@ func DialTimeout(uri string, timeout time.Duration) (self *Client, err error) { brconn: bufio.NewReaderSize(connt, 256), url: URL, requestUri: u2.String(), + DebugRtp: DebugRtp, + DebugRtsp: DebugRtsp, + SkipErrRtpBlock: SkipErrRtpBlock, } return } @@ -374,7 +381,7 @@ func (self *Client) findRTSP() (block []byte, data []byte, err error) { peek := _peek[0:0] stat := 0 - for { + for i := 0;; i++ { var b byte if b, err = self.brconn.ReadByte(); err != nil { return @@ -397,8 +404,10 @@ func (self *Client) findRTSP() (block []byte, data []byte, err error) { stat = Header } case '$': - stat = Dollar - peek = _peek[0:0] + if stat != Dollar { + stat = Dollar + peek = _peek[0:0] + } default: if stat != Dollar { stat = 0 @@ -406,6 +415,10 @@ func (self *Client) findRTSP() (block []byte, data []byte, err error) { } } + if self.DebugRtp { + fmt.Println("rtsp: findRTSP", i, b) + } + if stat != 0 { peek = append(peek, b) } @@ -415,6 +428,9 @@ func (self *Client) findRTSP() (block []byte, data []byte, err error) { } if stat == Dollar && len(peek) >= 12 { + if self.DebugRtp { + fmt.Println("rtsp: dollar at", i, len(peek)) + } if blocklen, _, ok := self.parseBlockHeader(peek); ok { left := blocklen+4-len(peek) block = append(peek, make([]byte, left)...) @@ -828,7 +844,7 @@ func (self *Stream) handleH264Payload(timestamp uint32, packet []byte) (err erro return } - case naluType == 6: // SEI ignored + //case naluType == 6: // SEI ignored case naluType == 7: // sps if self.client != nil && self.client.DebugRtp { @@ -974,7 +990,7 @@ func (self *Stream) handleRtpPacket(packet []byte) (err error) { } if self.client != nil && self.client.DebugRtp { - fmt.Println("rtp: packet len", len(packet)) + fmt.Println("rtp: packet", self.CodecData.Type(), "len", len(packet)) dumpsize := len(packet) if dumpsize > 32 { dumpsize = 32 @@ -1114,6 +1130,9 @@ func (self *Client) Close() (err error) { func (self *Client) handleBlock(block []byte) (pkt av.Packet, ok bool, err error) { _, blockno, _ := self.parseBlockHeader(block) if blockno%2 != 0 { + if self.DebugRtp { + fmt.Println("rtsp: rtcp block len", len(block)-4) + } return }