摄像头RTSP播放流程报文分析



在这里并不讲解rtp/rtcp、rtsp、264等协议,只是分析记录一下rtsp流程报文,也不对报文进行过多的解析,因为已经被Wireshark分析的很彻底了。

本文更多的是做一个备忘录使用,图片堆叠而成。

1.基本描述

一个摄像头IPCip 192.168.1.88

PCip 192.168.1.2

PCVLC软件,在网络串流输入:

然后Wireshark抓报文来分析吧。
  • 首先当然是TCP的三次握手建连接了
  • 然后开始rtsp的交互流程,从Option到Play
  • 然后开始rtp传音视频数据,rtcp做控制
  • 最后VLC上停止播放,也就是发个TearDown,停止传输,RTCP的goodbye,还有TCP的断开连接




2.RTSP细节
下面开始具体分析一下RTSP具体流程:

Opiton---Describe--Setup-Play--------.............-------Teardown

C表示RTSP客户端即PC,S表示RTSP服务端即摄像头
2.1 Option

 C->S: OPTION request            //询问S有哪些方法可用
S->C: OPTION response        //S回应信息中包括提供的所有可用方法

 


这里提供的方法有如上。


2.2 Describe

 C->S: DESCRIBE request      //要求得到S提供的媒体初始化描述信息
S->C: DESCRIBE response      //S回应媒体初始化描述信息,主要是sdp,这里面有个简单的SDP协议

 



2.3 Setup

C->S: SETUP request         //设置会话属性,以及传输模式,提醒S建立会话
S->C: SETUP response         //S建立会话,返回会话标识符及会话相关信息

这里的setup有两个,即分别对应前面的trackID=1、trackID=2,也就是Describe中的视频与音频了。

 




2.4 Play

C->S: PLAY request          //C请求播放
S->C: PLAY response          //S回应请求信息

 



2.5 发送数据

S->C: 发送流媒体数据

在上面的play命令后将开始流传输,这块与rtp/rtcp相关,单独摘出来在后面介绍。


2.6 Teardown

C->S: TEARDOWN request     //C请求关闭会话

S->C: TEARDOWN response     //S回应请求

 


这之后还会有:rtcp发送goodbyetcp断开连接。


2.6  其他

在这里补充一个get_parameter

 


3.流传输

在上面RTSP细节第4步摄像头回应了Play Response后,将会开始传输流数据,这里包括了视频流与音频流,在Describe中看到为:

 



3.1视频传输

在H264协议里定义了三种帧,完整编码的帧叫I帧,参考之前的I帧生成的只包含差异部分编码的帧叫P帧,还有一种参考前后的帧编码的帧叫B帧,对定义的理解以及264的处理方法可以在网上进一步了解

于是刚开始传输的是第一个I帧,而I帧数据前会有一个参数集传输:


这三条具体为:




  根据本RTP荷载规范, 大于00的NRI值指示相对传输优先级, 象编码器决定的一样。 MANE可以使用本信息保护更重要的NAL单元。最高的传输优先级是11, 依次是 10, 01;00 最低。H.264编码器必须根据H.264规范设置NRI值(subclause 7.4.1)当nal_unit_type 范围的是1到12. 特别是, H.264规范要求对于nal_unit_type为6,9,10,11,12的NAL单元的NRI的值应该为0。对于nal_unit_type等于7,8 (指示顺序参数集或图像参数集)的NAL单元,H.264编码器应该设置NRI为11 (二进制格式)对于nal_unit_type等于5的主编码图像的编码片NAL单元(指示编码片属于一个IDR图像), H.264编码器应设置NRI为11。这也就对上面做出了解释。


后面开始真正的图像数据传输,I帧分片传输,P帧分片传输。

I帧的第一片:


I帧的中间片:


I帧的最后一片:

 

然后开始P帧,同样列举开始中间结尾三片:





再看第一帧与第二帧,也就是上面提到的第一个I帧,和紧跟其后的第一个P帧,这两帧的Timestamp相差360,也就是9000/25

随后图像大变动后会有新的一个I帧开始,然后再尾随一串P帧:

 


3.2音频传输

 


3.2 RTCP控制



补充:

1、RFC3984里提到的三种H.264 over RTP封装,分别是Single NALU(一个RTP含一个NALU)、STAP-A(一个RTP包含多个NALU)、FU-A(一个NALU分布到多个RTP包)三种封装格式,且会自动把SPS和PPS放到裸码流文件头部。

2、查看rtp包的payload type,比如说type是96,那么在wireshark工具栏选择Edit->preferences->protocols->H264, 把H264 dynamic payload types设成96,就可以在wireshark中看到,payload types 为96的数据自动被解析为h264的nalu单元


  • 0
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值