RTP和RTCP

RTCP
实时传输控制协议(Real-time ControlProtocol,RTCP),往往与RTP一起使用。
RTCP功能
1:为应用程序提供会话质量的信息
每个RTCP信息包不封装声音数据或者电视数据,而是封装发送端和/或者接收端的统计报表。这些信息包括发送的信息包数目、丢失的信息包数目和信息包的抖动等情况,这些反馈信息反映了当前的网络状况。
发送端可以根据反馈信息来调整传输速率,接收端可以根据反馈信息判断问题是本地的、区域性的还是全球性的。
2:确定 RTP用户源 
RTCP为每个RTP用户提供了一个全局唯一的称为规范名称 (Canonical Name)的标志符 CNAME

3:RTCP信息包
类似于RTP信息包,每个RTCP信息包以固定部分开始,紧接着的是可变长结构单元,最后以一个32位边界结束。
根据所携带的控制信息不同RTCP信息包可分为RR(接收者报告包)、SR(源报告包)、SEDS(源描述包)、BYE(离开申明)和APP(特殊应用包)五类5类:
1、SR:
源报告包,用于发送和接收活动源的统计信息;
2、RR:
接收者报告包,用于接收非活动站的统计信息;
3、SDES:
源描述包,用于报告和站点相关的信息,包括CNAME;
4、BYE:
断开RTCP包,是站点离开系统的报告,表示结束;
5、APP:
应用特定函数。

RTCP有如下五种分组类型
这里写图片描述

SR包的封装
这里写图片描述
版本(V):同RTP包头域。
填充(P):同RTP包头域。
接收报告计数器(RC):5比特,该SR包中的接收报告块的数目,可以为零。
包类型(PT):8比特,SR包是200。
长度域(Length):16比特,其中存放的是该SR包以32比特为单位的总长度减一。
同步源(SSRC):SR包发送者的同步源标识符。与对应RTP包中的SSRC一样。
NTP Timestamp(Network time protocol)SR包发送时的绝对时间值。NTP的作用是同步不同的RTP媒体流。
RTP Timestamp:与NTP时间戳对应,与RTP数据包中的RTP时间戳具有相同的单位和随机初始值。
Sender’s packet count:从开始发送包到产生这个SR包这段时间里,发送者发送的RTP数据包的总数. SSRC改变时,这个域清零。
Sender`s octet count:从开始发送包到产生这个SR包这段时间里,发送者发送的净荷数据的总字节数(不包括头部和填充)。发送者改变其SSRC时,这个域要清零。
同步源n的SSRC标识符:该报告块中包含的是从该源接收到的包的统计信息。
丢失率(Fraction Lost):表明从上一个SR或RR包发出以来从同步源n(SSRC_n)来的RTP数据包的丢失率。
累计的包丢失数目:从开始接收到SSRC_n的包到发送SR,从SSRC_n传过来的RTP数据包的丢失总数。
收到的扩展最大序列号:从SSRC_n收到的RTP数据包中最大的序列号,
接收抖动(Interarrival jitter):RTP数据包接受时间的统计方差估计
上次SR时间戳(Last SR,LSR):取最近从SSRC_n收到的SR包中的NTP时间戳的中间32比特。如果目前还没收到SR包,则该域清零。
上次SR以来的延时(Delay since last SR,DLSR):上次从SSRC_n收到SR包到发送本报告的延时。

任意两个RTP终端之间都互发 RTCP包。

http://blog.csdn.net/hrbeuwhw/article/details/8135112

RTP
RTP全名是Real-time Transport Protocol(实时传输协议)。
rtp往往与RTCP(Real-time Transport Control Protocol,即实时传输控制协议)一起使用。
RTP会话往往有两个端口:一个用于RTP传输,一个用于RTCP传输。
RTP本身并不能为按序传输数据包提供可靠的保证,也不提供流量控制和拥塞控制,这些都由RTCP来负责完成。

流媒体体系结构
这里写图片描述

RTP包的组成分析
“$”+3字节(RTP包长度)+RTP Header+RTP荷载(H264或者AAC等等)+”$”+3字节(RTP包长度)+RTP Header+RTP荷载(H264或者AAC等等)。。。。。。

RTP Header
这里写图片描述

版本号(V):2比特,用来标志使用的RTP版本。
填充位(P):1比特,如果该位置位,则该RTP包的尾部就包含附加的填充字节。
扩展位(X):1比特,如果该位置位的话,RTP固定头部后面就跟有一个扩展头部。
CSRC计数器(CC):4比特,含有固定头部后面跟着的CSRC的数目。
标记位(M):1比特,该位的解释由配置文档(Profile)来承担.
载荷类型(PT):7比特,标识了RTP载荷的类型。
序列号(SN):16比特,发送方在每发送完一个RTP包后就将该域的值增加1,接收方可以由该域检测包的丢失及恢复包序列。序列号的初始值是随机的。
时间戳:32比特,记录了该包中数据的第一个字节的采样时刻。在一次会话开始时,时间戳初始化成一个初始值。即使在没有信号发送时,时间戳的数值也要随时间而不断地增加(时间在流逝嘛)。时间戳是去除抖动和实现同步不可缺少的。
同步源标识符(SSRC):32比特,同步源就是指RTP包流的来源。在同一个RTP会话中不能有两个相同的SSRC值。该标识符是随机选取的 RFC1889推荐了MD5随机算法。
贡献源列表(CSRC List):0~15项,每项32比特,用来标志对一个RTP混合器产生的新包有贡献的所有RTP包的源。由混合器将这些有贡献的SSRC标识符插入表中。SSRC标识符都被列出来,以便接收端能正确指出交谈双方的身份。

RTP荷载H264码流
分包规则是:如果小于MTU采用单个NAL单元包,如果大于MTU就采用FUs分片方式。
注意:封装为RTP包,需要去掉H264的3个字节或者4个字节的起始字节。

MTU说明
最大传输单元(Maximum Transmission Unit,MTU)是指一种通信协议的某一层上面所能通过的最大数据包大小(以字节为单位)。
因为协议数据单元的包头和包尾的长度是固定的,MTU越大,则一个协议数据单元的承载的有效数据就越长,通信效率也越高。
MTU也不是越大越好,因为MTU越大, 传送一个数据包的延迟也越大;并且MTU越大,数据包中 bit位发生错误的概率也越大。
网络中一些常见链路层协议MTU的缺省数值如下:
FDDI协议:4352字节
以太网(Ethernet)协议:1500字节
PPPoE(ADSL)协议:1492字节
X.25协议(Dial Up/Modem):576字节
Point-to-Point:4470字节

H.264 Payload格式定义了三种不同的基本的负载(Payload)结构. 接收端可能通过RTP Payload的第一个字节来识别它们.

单个NAL单元包

这里写图片描述

1:单一NAL单元模式
例如有一个H.264的NALU是这样的:
[00 00 00 01 67 42 A0 1E 23 56 0E 2F … ]
这是一个序列参数集NAL单元. [00 00 00 01]是四个字节的开始码, 67是NALU头, 42开始的数据是NALU内容.
封装成RTP包将如下:
[RTP Header] [67 42 A0 1E 23 56 0E 2F]
这里写图片描述

2:组合封包模式(H264较少用)
当NALU的长度特别小时, 可以把几个NALU单元封在一个RTP包中
这里写图片描述

3:Fragmentation Units (FUs).
当NALU的长度超过MTU时, 就必须对NALU单元进行分片封包
这里写图片描述

http://blog.csdn.net/chen495810242/article/details/39207305
http://blog.csdn.net/maopig/article/details/6671251
http://super-and-star.blog.163.com/blog/static/1095294122011325111119243/

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值