织梦CMS - 轻松建站从此开始!

罗索

RTP控制协议RTCP

jackyhwei 发布于 2011-09-27 21:46 点击:次 
RTP控制协议(RTCP)向会议中所有成员周期性发送控制包,利用与数据包相同的传输机制.底层协议必须提供数据包和控制包的复用,例如用不同的UDP端口.RTCP执行四个功能.
TAG:

RTP控制协议(RTCP)向会议中所有成员周期性发送控制包,利用与数据包相同的传输机制.底层协议必须提供数据包和控制包的复用,例如用不同的UDP端口.RTCP执行四个功能.

  -   基本功能是提供数据传输质量的反馈.这是RTP作为一种传输协议的主要作用,它与其他协议的流量和阻塞控制相关.反馈可能对自适应编码有直接作用,但是IP组播的实验表明它对于从接收机得到反馈信息以诊断传输故障也有决定性作用.向所有成员发送接收反馈可以使"观察员"评估这些问题是局部的还是全局的.利用类似多点广播的传输机制,可以使某些实体,诸如没有加入会议的网络网络业务观察员,接收到反馈信息并作为第三类监视员来诊断网络故障.反馈功能通过RTCP发射机和接收机报告实现.

  -   RTCP为每个RTP源传输一个固定的识别符,称为标称名或CNAME.由于当发生冲突或程序重启时SSRC可能改变,接收机要用CNAME来跟踪每个成员.接收机还要用CNAME来关联一系列相关RTP会话期中来自同一个成员的多个数据流,例如同步语音和图象.

  -   头两个功能要求所有成员都发送RTCP包,因此必须控制速率以使RTP成员数可以逐级增长.通过让每个成员向所有成员发送控制包,各个成员都可以独立地观察会议中所有成员的数目.此数目可以用来估计发包数率.

  -   第四个可选的功能是传输最少的会议控制信息,例如在用户接口中显示的成员识别.这最可能在"松散控制"的会议中起作用,在"松散控制"会议里,成员可以不经过资格控制和参数协商而加入或退出会议.RTCP作为一个延伸到所有成员的方便通路,必须要支持具体应用所需的所有控制信息通信.

  -   在RTP用于IP多点广播时,功能1-3是强制的,在所有情况下都推荐使用.建议RTP应用开发商避免使用只能用于单向广播而不能递增到多用户的方法.

  RTCP包格式

  这部分定义了几个RTCP包类型,可以传送不同的控制信息:

  -   SR:发射机报告,描述作为活跃发射机成员的发送和接收统计数字;

  -   RR:接收机报告,描述非活跃发射机成员的接收统计数字;

  在本文中详细介绍SR和RR.

  每个RTCP包的开始部分是与RTP数据包相类似的固定部分,随后是一块结构化单元,它随负载类型不同长度发生变化,但是总以32比特终止.对齐要求和长度域使RTCP包可"堆栈",既可以将多个RTCP包形成一个复合RTCP包,在底层协议(如UDP)中,通常都是将复合包作为一个包传输的.

  复合包中的每个RTCP单包可以单独处理,而无需考虑包复合的顺序.然而,为了实现某些协议功能,添加以下限制:

  -   接收统计数字(SR或RR),经常作为带宽限制值,尽可能达到统计数字的最大分辨率,因此每个周期发送的RTCP包必须包含一个报告包.

  -   必须限制首次在复合包中出现的包类型数目,以增加在第一个字中常数比特的数目,这样可以增加RTCP包的有效性,以区分误传的RTP包和其他无关包.

  因此,所有RTCP包必须在至少包含两个单包的复合包中传输,具有以下推荐格式:

  -   加密前缀:当且仅当复合包被加密时,对每个RTCP复合包加32比特的前缀.

  -   SR或RR:复合包中的第一个RTCP包必须是一个报告包.即使没有数据发送和接收,此时发送空的RR包,或者复合包中其他的唯一包是BYE包,也必须发送报告包.

  -   附加的RR:若被报告的接收统计源数目超过SR/RR包中最大允许的31个,附加的RR必须跟在最初的报告包后面.

  RTCP发送机制

  RTCP包发送机制:在两次RTCP报文之间,若端点没有发出任何RTP报文,则端点此次发送RR(接收报文),否则,端点发送SR(发送报文),RTCP包每秒发送一次.

  发射机和接收机报告

  RTP接收机利用RTCP报告包提供接收质量反馈,根据接收机是否同时还是发射机RTCP包采取两种不同的形式.发射机报告(SR)和接收机报告(RR)格式中唯一的不同,包括包类型码,在于发射机报告包括20字节活跃发射机专有的发射机信息部分.

  SR包和RR包都包括零到多个接收报告块,针对该接收机发出上一个报告块后接收到RTP包的起始同步源,每个源一个块.在CSRC列表中陈列的有贡献源不发送报告块.每个接收报告块提供从此块中指示的特定源接收到数据的统计数字.由于在SR/RR包中最多允许31接收报告块,可以在最初的SR或RR包之后堆栈附加的RR包,包含在上一个报告以来的间隔内收听到的所有源的接收报告.

  以下部分定义了两种报告的格式.

 SR:发射机报告RTCP包

  0   1   2   3

  0   1   2   3   4   5   6   7   8   9   0   1   2   3   4   5   6   7   8   9   0   1   2   3   4   5   6   7   8   9   0   1

  +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+

  |V=2|P|   RC   |   PT=SR=200   |   长度   |

  +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+

  |   发送者的SSRC   |

  +=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+

  |   NTP   时戳,   高字节   |

  +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+

  |   NTP   时戳,   低字节   |

  +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+

  |   RTP   时戳   |

  +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+

  |   发送的报文数   |

  +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+

  |   发送的字节数   |

  +=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+

  |   SSRC_1   (第一个源的SSRC)   |

  +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+

  |   丢包率   |   累计包丢失数   |

  -+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+

  |   接收到的扩展的最高序列号   |

  +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+

  |   到达间隔抖动   |

  +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+

  |   上一SR报文   (LSR)   |

  +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+

  |   自上一SR的时间(DLSR)   |

  +=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+

  |   SSRC_2   (第二个源的SSRC)   |

  +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+

  :   ...   :

  +=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+

  |   特定协议扩展   |

  +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+

  发射机报告包由3部分组成,若定义,可能跟随第4个面向协议的扩展部分.

  第一部分,8字节长.该域有以下意义:

  版本(V):2比特   RTP版本识别符,在RTCP包内的意义与RTP包中的相同.此协议中定义的版本号为2.

  填料(P):1比特   若设置填料比特,该RTCP包在末端包含一些附加填料比特,并不是控制信息的基本部分.填料的最后一个比特统计了多少个字节必须被忽略.某些有固定块大小的加密算法可能需要填料比特.在复合RTCP包中,复合包作为一个整体加密,填料比特只能加在最后一个单包的后面.

  接收报告块计数(RC):5比特   该包中所含接收报告块的数目.零值有效.

  包类型(PT):8比特   包含常数200,用以识别这个为RTCP   SR包.

  长度:16比特   以32比特字为单位,该RTCP包的长度减一,包括头和任何填料.(偏移量1保证零值有效,避免了在扫描RTCP包长度时可能发生的无限循环,同时以32比特为单位避免了对以4为倍数的有效性检测.)

  SSRC:32比特   SR包发起者的同步源标识符.

  第二部分,发射机信息,20比特长,在每个发射机报告包中出现.它概括了从此发射机发出的数据传输情况.此域有以下意义:

  NTP时间标志:64比特   指示了此报告发送时的壁钟时刻,它可以与从其它接收机返回的接收报告块中的时间标志结合起来,测量到这些接收机的环路时沿.接收机必须期望此时间标志的准确度远低于NTP时间标志的分辨率.测量的不确定度不可知,因此也无需指示.某个发射机,能够跟踪逝去时间但是无法跟踪壁钟时间,可以用加入会议后的逝去时间代替.假定该值小于68年,则最高比特为零.允许用抽样时钟估计逝去壁钟时间.无法用壁钟时间或逝去时间的可以设置此项为零.

  RTP时间标志:32比特   与以上的NTP时间标志对应同一时刻,但是与数据包中的RTP时间标志具有相同的单位和偏移量.这个一致性可以用来让NTP时间标志已经同步的源间进行媒体内/间同步,还可以让与媒体无关的接收机估计标称RTP时钟频率.注意在大多数情况下此时间标志不等于任何临近的RTP包中的时间标志.然而,通过"RTP时间标志计数器"和"由在抽样点上周期性检测壁钟时间得到的实际时间"两者之间的关系,可以通过相应的NTP时间标志计算得到此RTP时间标志.

  发送的报文数:32比特   从开始传输到此SR包产生时该发射机发送的RTP数据包总数.若发射机改变SSRC识别符,该计数器重设.

  发送的字节文数:32比特   从开始传输到此SR包产生时该发射机在RTP数据包发送的字节总数(不包括头和填料).若发射机改变SSRC识别符,该计数器重设.此域可以用来估计平均负载类型数据速率.

  第三部分零到多个接收报告块,块数等于从上一个报告以来该发射机收听到的其它源的数目.每个接收报告块传输关于从某个同步源来的数据包的接收统计信息.若某个源因冲突而改变其SSRC识别符,接收机并不延续统计数字.这些统计数字是:

  SSRC_n(源识别符):32比特   在此接收报告块中信息所属源的SSRC识别符.

  丢包率:8比特   自从前一SR包或RR包发射以来,从SSRC_n传来的RTP数据包的损失比例,以固定点小数的形式表示,小数点在此域的左侧,等于将损失比例乘256后取整数部分.该值定义为损失包数被期望接收的包数除,在下一段中定义.若由于复制而导致包损为负值,损失比例值设为零.注意在收到上一个包后,接收机无法告之以后的包是否丢失,若在上一个接收报告间隔内从某个源发出的所有数据包都丢失,那么将不为此源发送接收报告块.

  累计包丢失数:24比特   从开始接收到现在,从源SSRC_n发到本源的RTP数据包的丢包总数.该值定义为期望接收的包数减去实际接收的包数,接收的包括复制的或迟到的.由于迟到的包不算作损失,在发生复制时包损可能为负值.期望接收的包数定义为扩展的上一接收序号(随后定义)减去最初接收序号.

  接收到的扩展的最高序列号:32比特   低16比特包含从源SSRC_n来的最高接收序列号,高16比特用相应的序列号周期计数器扩展该序列号.注意在同一会议中的不同接收机,若启动时间明显不同,将产生不同的扩展项.

  到达间隔抖动:32比特   RTP数据包到达时刻统计方差的估计值,以时间标志为单位测量,用无符号整数表达.到达时刻抖动J定义为一对包中接收机相对发射机的时间跨度差值的平均偏差(平滑后的绝对值).如以下等式所示,该值等于两个包相对传输时间的差值,相对传输时间是指包的RTP时间标志和到达时刻接收机时钟,以同一单位的差值.若Si是包i的RTP时间标志,Ri是包i以RTP时间标志单位的到达时刻值,对于两个包i和j,D可以表达为

  D(i,j)=(Rj-Sj)-(Ri-Si);

  到达时刻抖动可以在收到从源SSRC_n来的每个数据包i后连续计算,利用该包和前一包i-1的偏差D(按到达顺序,而非序号顺序),根据公式J=J+(|D(i-1,i)|-J)/16计算.无论何时发送接收报告,都用当前的J值.

  此处描述的抖动计算允许与协议独立的监视器对来自不同实现的报告进行有效的解释.

  上一SR报文   (LSR):32比特   接收到的来自源SSRC_n的最新RTCP发射机报告(SR)的64位NTP时间标志的中间32位.若还没有接收到SR,该域值为零.

  自上一SR的时间(DLSR):32比特   是从收到来自SSRC_n的SR包到发送此接收报告块之间的延时,以1/65536秒为单位.若还未收到来自SSRC_n的SR包,该域值为零.

  假设SSRC_r为发出此接收报告块的接收机.源SSRC_n可以通过记录收到此接收报告块的时刻A来计算到SSRC_r的环路传输时延.可以利用最新的SR时间标志(LSR)域计算整个环路时间A-LSR,然后减去此DLSR域得到环路传播时延.

  可以用此来近似测量到一族接收机的距离,尽管有些连接可能有非常不对称的时延.

  RR接收机报告RTCP包

  0   1   2   3

  0   1   2   3   4   5   6   7   8   9   0   1   2   3   4   5   6   7   8   9   0   1   2   3   4   5   6   7   8   9   0   1

  +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+

  |V=2|P|   RC   |   PT=RR=201   |   长度   |

  +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+

  |   报文发送者的SSRC   |

  +=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+

  |   SSRC_1   (第一个源的SSRC)   |

  +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+

  |   丢包率   |   累计包丢失数   |

  +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+

  |   接收到的扩展的最高序列号   |

  +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+

  |   到达间隔抖动   |

  +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+

  |   上一SR   (LSR)   |

  +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+

  |   自上一SR的时间   (DLSR)   |

  +=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+

  |   SSRC_2   (第二个源的SSRC)   |

  +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+

  :   ...   :

  +=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+

  |   特定协议扩展   |

  +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+

  接收机报告包(RR)与发射机报告包基本相同,除了包类型域包含常数201和没有发射机信息的5个字(NTP和RTP时间标志和发射机包和字节计数).余下区域与SR包意义相同.若没有发送和接收据报告,在RTCP复合包头部加入空的RR包(RC=0).

 分析发射机和接收机报告

  接收质量反馈不仅对发射机有用,而且对于其它接收机和第三派监视器也有作用.发射机可以基于反馈修正发送信息量;接收机可以判断问题是本地的,区域内的还是全球的;网络管理者可以利用与协议无关的监视器(只接收RTCP包但是不接收相应的RTP包)去评估多点传送网络的性能.

  在发射机信息和接收机报告块中都连续统计丢包数,因此可以计算任何两个报告块中的差别,在短时间和长时间内都可以进行测算,最近收到的两个包之间差值可以评估当前传输质量.包中有NTP时间标志,可以用两个报告间隔的差值计算传输速率.由于此时间间隔与数据编码始终速率独立,可以实现与编码及协议独立的质量监视.

  从发射机信息中,第三派监视器可以在一个时间间隔内计算平均负载数据速率和平均发包速率,而无需考虑数据接收.两个值的比就是平均负载大小.若能假定包损与包的大小无关,那么某个特定接收机收到的包数乘以平均负载大小(或相应的包大小)就得出接收机可得到的外在吞吐量.

  除了累计计数允许利用报告间差值进行长期包损测量外,单个报告的包损比例域提供一个短时测量数据.当会议规模递增到无法为所有接收机保存接收状态信息,或者报告间隔变得足够长以至于从一个特定接收机只能收到一个报告时,短时测量数据变得更重要.

  到达间隔抖动域提供另一个有关网络阻塞的短时测量量.包损追踪长期阻塞,抖动测量追踪短时阻塞.抖动测量可以在导致包损前指示阻塞.由于到达间隔抖动

  域仅仅是发送报告时刻抖动的一个快照,因此需要在一个网络内在一段时间内分析来自某个接收机的报告,或者分析来自多个接收机的报告.

  负载类型

  注意并非所有RTP所用的编码方式都分配了静态负载类型号.可以建立在96-127间的负载类型值与编码方式间的动态匹配.可用的负载类型空间比较小.仅在满足以下条件时分配新的静态负载类型:

  -   很多因特网社团都对此编码感兴趣;

  -   与现存编码方式比较有好处和/或要求与现有广泛使用会议及多媒体系统互通;

  -   描述足以建立一个译码器.

  下表   为RTP数据头的PT域定义了静态负载类型.此外,96-127之间的负载类型值可以通过会议控制协议动态定义.例如,一个会话期可以在一个给定会话期内,指定负载类型96指示PCMU编码,8,000抽样率,双通道.负载类型值表的"保留"项用以使RTP和RTCP包可以被可靠识别.  

  一个RTP源在任何给定时刻,只能发射一个RTP负载类型;不允许在一个RTP对话期中交织多个RTP负载类型,但是可以并行存在多个RTP对话期以发送多媒体.此协议中定义的负载类型传输或者语音,或者图象,但是不允许两者同传.

  PT   编码   语音/图象   时钟速率   通道

  (A/V)   (Hz)   (语音)

  0   PCMU   A   8000   1

  8   PCMA   A   8000   1

  9   G722   A   8000   1

  4   G723   A   8000   1

  15   G728   A   8000   1

  18   G729   A   8000   1

  31   H261   V   90000

  34   H263   V   90000

  96-127   动态

  注意:负载类型1-7,10-14,16-30保留.

  端口分配

  同RTP协议定义所述,RTP数据在偶数UDP端口传输,相应的RTCP包在下一个高(奇)端口传输.

  依据此协议的应用程序可以用任意这样的UDP端口对.例如,可以用对话期管理程序随机分配.由于在同一台主机上可以运行多个利用本协议的应用程序,而有些操作系统不允许同一个UDP端口与不同的多点传送地址结合进行多重处理,因此不能要求固定的端口对.

  端口对在5000以上选择,以适应UNIX操作系统端口号分配惯例:1024以下用来进行特权处理,1024到5000之间被操作系统动态分配.

(ericbaner)
本站文章除注明转载外,均为本站原创或编译欢迎任何形式的转载,但请务必注明出处,尊重他人劳动,同学习共成长。转载请注明:文章转载自:罗索实验室 [http://www.rosoo.net/a/201109/15059.html]
本文出处:blog.csdn.net/ericbaner 作者:ericbaner
顶一下
(2)
100%
踩一下
(0)
0%
------分隔线----------------------------
发表评论
请自觉遵守互联网相关的政策法规,严禁发布色情、暴力、反动的言论。
评价:
表情:
用户名: 验证码:点击我更换图片
栏目列表
将本文分享到微信
织梦二维码生成器
推荐内容