socket通信报文格式RTP报文格式
RTP报文由两部分组成:报头和有效载荷。RTP报头格式如图6.7所示,其中:
      VRTP协议的版本号,占2位,当前协议版本号为2
  P:填充标志,占1位,如果P=1,则在该报文的尾部填充一个或多个额外的八位组,它们不是有效载荷的一部分。
  X:扩展标志,占1位,如果X=1,则在RTP报头后跟有一个扩展报头。
  CCCSRC计数器,占4位,指示CSRC 标识符的个数。
  M: 标记,占1位,不同的有效载荷有不同的含义,对于视频,标记一帧的结束;对于音频,标记会话的开始。
  同步信源(SSRC)标识符:占32位,用于标识同步信源。该标识符是随机选择的,参加同一视频会议的两个同步信源不能有相同的SSRC
  特约信源(CSRC)标识符:每个CSRC标识符占32位,可以有015个。每个CSRC标识了包含在该RTP报文有效载荷中的所有特约信源。
  PT: 有效载荷类型,占7位,用于说明RTP报文中有效载荷的类型,如GSM音频、JPEM图像等。
  序列号:占16位,用于标识发送者所发送的RTP报文的序列号,每发送一个报文,序列号增1。接收者通过序列号来检测报文丢失情况,重新排序报文,恢复数据。
  时戳(Timestamp):占32位,时戳反映了该RTP报文的第一个八位组的采样时刻。接收者使用时戳来计算延迟和延迟抖动,并进行同步控制。
V
P
X
CC
M
PT
序列号
时戳
同步信源(SSRC)标识符
特约信源(CSRC)标识符
···
6.7 RTP报头格式
    这里的同步信源是指产生媒体流的信源,它通过RTP报头中的一个32位数字SSRC标识符来标识,而不依赖于网络地址,接收者将根据SSRC标识符来区分不同的信源,进行RTP报文的分组。特约信源是指当混合器接收到一个或多个同步信源的RTP报文后,经过混合处理产生一个新的组合RTP报文,并把混合器作为组合RTP报文的SSRC,而将原来所有的SSRC都作为CSRC传送给接收者,使接收者知道组成组合报文的各个SSRC
在发送端,上层应用程序以分组形式将编码后的媒体数据传给RTP通信模块,作为RTP报文的有效载荷,RTP通信模块将根据上层应用提供的参数在有效载荷前添加RTP报头,形成RTP报文,通过Socket接口选择UDP协议发送出去。
在接收端,RTP通信模块通过Socket接口接收到RTP报文后,将RTP报头分离出来作相应处理,再将RTP报文的有效载荷作为数据分组传递给上层应用。
考虑到在Internet这种复杂的环境中举行视频会议,RTP定义了两种中间系统:混合器(Mixer)和转换器(Translator)
Internet上举行视频会议时,可能有少数参加者通过低速链路与使用高速网络的多数参加者相连接。为了不强制所有会议参加者都使用低带宽和低质量的数据编码,RTP允许在低带宽区域附近使用混合器作为RTP级中继器。混合器从一个或多个信源接收RTP报文,对到达的数据报文进行重新同步和重新组合,这些重组的数据流被混合成一个数据流,将数据编码转化为在低带宽上可用的类型,并通过低速链路向低带宽区域转发。为了对多个输入信源进行统一的同步,混合器在多个媒体流之间进行定时调整,产生它自己的定时同步,因此所有从混合器输出的报文都把混合器作为同步信源。为了保证接收者能够正确识别混合器处理前的原始报文发送者,混合器在RTP报头中设置了CSRC标识符队列,以标识那些产生混和报文的原始同步信源。
Internet环境中,一些会议的参加者可能被隔离在应用级防火墙的外面,这些参加者被禁止直接使用IP组播地址进行访问,虽然他们可能是通过高速链路连接的。在这些情况下,RTP允许使用转换器作为RTP级中继器。在防火墙两端分别安装一个转换器,防火墙之外的转换器过滤所有接收到的组播报文,并通过一条安全的连接传送给防火墙之内的转换器,内部转换器将这些组播报文再转发送给内部网络中的组播组成员。
6.6.2  基于RTP的带宽控制方法
基于RTP的带宽控制算法正是利用这种控制策略来实施强制性同步控制的,其基本思想是在RTP协议机制支持下,发送端通过接收端周期反馈的接收报告来评价当前网络传输的QoS,并以此对数据发送速率进行适当调整。端点之间利用RTP报文和RTCP报文来实现带宽控制:
RTP报文的序号字段可用于排序RTP报文分组,以消除重复分组,保持视频或音频流内同步和连续地播放。
RTP报文的时戳字段可作为流间同步标识,以保持视频和音频流间同步和连续地播放。
  ③ 发送者可利用接收者反馈的RTCP报文来制实施端到端的强制性同步控制,以改善当前网络传输的QoS。
1. 接收端的控制策略
接收端通过RTP协议实施如下的控制策略:
  ① SSRC字段用于标识不同的信源,以支持多对一或多对多的多媒体通信。
  ② 时戳字段作为流间同步标识,用于媒体流间的流间控制,以保持视频和音频流间同步和连续地播放,并作为时间量用于计算报文分组的传输延时、延时抖动以及数据更新周期等,滤除严重延时的RTP报文分组。
    ③ 序号字段作为流内同步标识,用于排序RTP报文分组,消除重复报文分组,保持视频或音频流内同步和连续地播放。
    ④ 将接收端检测到的当前网络QoS状况通过RTCP的接收报告周期地反馈给发送端。
    2. 发送端的控制策略
发送端将采用如下的控制算法来调整传送带宽。
  ① 设bs为发送端当前的带宽,bmin和bmax分别为应用所设置的最小带宽和最大带宽,且bs[bmin,bmax]。
  ② 在每个发送带宽级上保持一个时间片,超时后将根据网络QoS状况提高或降低一个带宽级,以避免带宽频繁波动。这里使用报文丢失率作为QoS指示器,并设置一个阈值。如果QoS指示器超阈,说明网络发生阻塞,通过改变发送速率来调整传送带宽,疏导网络交通。
    ③ 初始时按最大带宽发送报文分组,即bsbmax,以提高网络通道的利用率。
  ④ 如果在规定的时间片内QoS指示器超阈,说明网络发生阻塞,则在超时后需要降低一个带宽级,即bs max { bs-μ,bmin },其中μ为比例因子。
  ⑤ 如果在规定的时间片内QoS指示器未超阈,说明网络交通状况良好,则在超时后应当提高一个带宽级,即bs min { bs+μ,bmax }。
⑥ 在点到多点通信场合中,发送者将面对多个不同网段上的接收者,而每个网段的交通状况又不尽相同。因此,在改变带宽时可采用多数表决法,即当报文丢失率超阈的接收者超过一定比例时再改变带宽。
  RTP协议   
  实时传输协议RTP提供了实时信息的端对端传输业务,如交互的语音和图象;这些业务包括负载类型识别,序列编号,加入时间标志,传输监视.典型的应用是在UDP层上传输RTP包,以利用它的复用和总和检测业务.   
  RTP包括两个紧密相关的部分:   
  -  实时传输协议(RTP),传输有实时特性的信息;   
  -  RTP控制协议(RTCP),监视业务质量和传输对话中成员的信息.   
  RTP包头   
  RTP头有以下格式:   
  0  1  2  3   
  0  1  23  4  5  6  7  89  0  1  2  3  45  6  7  8  90  1  2  34  5  6  7  8  9  0  1   
  +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+   
  |V=2|P|X|  CC  |M|  PT  |  序列号  |   
  +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+   
  |  时间标志  |   
  +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+   
  |  同步源(SSRC)识别符  |   
  +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+   
  |  有贡献源(CSRC)识别符  |   
  |  ...  ...  |   
  +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+   
  RTP包头格式   
  前12个字节出现在每个RTP包中,仅仅在被混合器插入时,才出现CSRC识别符列表.这些域有以下意义:   
  版本(V):2比特  此域定义了RTP的版本.此协议定义的版本是2.(值1被RTP草案版本使用,值0用在最初"vat"语音工具使用的协议中.)   
  填料(P):1比特  若填料比特被设置,此包包含一到多个附加在末端的填充比特,不是负载的一
部分.填料的最后一个字节包含可以忽略多少个填充比特.填料可能用于某些具有固定长度的加密算法,或者在底层数据单元中传输多个RTP包.   
  扩展(X):1比特  若设置扩展比特,固定头(仅)后面跟随一个头扩展.   
  CSRC计数(CC):4比特  CSRC计数包含了跟在固定头后面CSRC识别符的数目.   
  标志(M):1比特  标志的解释由具体协议规定.它用来允许在比特流中标记重要的事件,如帧范围.规定该标志在静音后的第一个语音包时置位.   
  负载类型(PT):7比特  此域定义了负载的格式,由具体应用决定其解释.协议可以规定负载类型码和负载格式之间一个默认的匹配.其他的负载类型码可以通过非RTP方法动态定义.RTP发射机在任意给定时间发出一个单独的RTP负载类型;此域不用来复用不同的媒体流.