RTP、RTCP协议学习总结
RTP、RTCP与其他协议的关系:
从上图中可以看出,RTP被划分在传输层,建立于UDP上。 一、 RTP协议:
RTP协议是实时传输协议,主要用于VOIP、视频等实时媒体传输的协议,为这些实时媒体数据提供端到端的传送服务。但是RTP协议没有提供任何确保按时传送数据的机制,也没有提供任何质量保证的机制,因而要实现服务质量必须由下层网络来提供保证。也就是说RTP协议只管传输,不管传输的视频或者语音质量是否良好也不管对端是否收到。
那么传输的视频质量和语音质量由谁来控制呢??这就要用到和RTP协议关系非常密切的子协议,RTCP协议。 RTP数据报文
每一个RTP数据报文都由头部和负载两个部分组成,其中头部前12个字节的含义是固定的,而负载则可以是音频或者视频数据。 RTP报头的报文格式
各字段的含义如下:
版本(V):2 个比特,表示RTP 的版本号。
填充(P):1 个比特,置“1”表示用户数据最后加有填充位,用户数据中最后一个字节是填充位计数,它表示一共加了多少个填充位。在两种情况下可能需要填充,一是某些加密算法要求数据块大小固定;二是在一个低层协议数据包中装载多个RTP 分组。
扩展(X):1 个比特,置“1”表示RTP 报头后紧随一个扩展报头。 CSRC 计数(CC):4 个比特,表示CSRC 标识符的数量。CSRC标识紧跟在RTP固定头部之后,用来表示RTP数据包的来源;RTP协议允许在同一个会话中存在多个数据源,它们可以通过RTP混合器合并为一个数据源。
标记(M):1 个比特,其具体解释由应用文档来定义。例如,对于视频流,它表示一帧的结束,而对于音频,则表示一次谈话的开始。 载荷类别(PT):7 个比特,标明RTP负载的格式,包括所采用的编码算法、采样频率、承载通道等。
序列号(SN):2 个字节,每发送一个RTP 数据包该序号增加1。用来为接收方提供探测数据丢失的方法,但是如何处理丢失的数据则是应
用程序自己的事情,RTP协议本身并不负责数据的重传。
时间戳(TS):4 个字节,记录了负载中第一个字节的采样时间,接收方根据时间戳能够确定数据的到达是否收到了延迟抖动的影响,但具体如何来补偿延迟抖动则是应用程序自己的事情。
同步源标识符(SSRC):4 个字节,用来标识一个同步源。此标识符是随机选择的,旨在确保在同一个RTP协议会话中不存在两个同步源具有相同的 SSRC 标识符
提供源标识符(CSRC):识别该数据包中的有效载荷的贡献源 二、RTCP协议:
RTCP协议是实时传输控制协议,是RTP的控制部分,需要与RTP协议一起配合使用,当应用程序启动一个RTP会话时将同时占用两个端口,分别供RTP和RTCP使用。RTCP用于保证网络的服务质量并传递与会者会话中的信息,主要工作就是对RTP上传输的数据流分发质量进行反馈;如丢包率、抖动、带宽、速率等。通常RTCP会采用和RTP相同的分发机制,向会话中的所有成员周期性的发送控制信息,应用程序通过接收这些数据信息从中获取会话参与者的相关资料以及网络状况、丢包率等反馈信息,在下次发送数据包的时候做一些调整,来实现对RTP传输数据的质量优化。
RTCP的功能:
1, RTCP 的基本功能是提供关于数据传输质量的反馈,这是RTCP
协议的重要组成部分,它大致和其它传输协议的流量控制及拥