《RTP协议详解-无水印版.docx》由会员分享,可在线阅读,更多相关《RTP协议详解-无水印版.docx(23页珍藏版)》请在taowenge.com淘文阁网|工程机械CAD图纸|机械工程制图|CAD装配图下载|SolidWorks_CaTia_CAD_UG_PROE_设计图分享下载上搜索。
1、RTP 协议分析一RTP 协议背景2二RTP 协议原理及工作机制32.1 RTP 协议原理42.1.1 RTP 协议原理42.1.2 RTCP 协议原理42.2 RTP 数据包格式52.2.1 RTP 数据包格式52.2.2 RTCP 数据包格式82.3 RTP 工作机制122.3.1 RTP 工作机制122.3.2 RTCP 工作机制12三RTP 协议关键技术指标1331 时间戳1332 时延1433 抖动153.4 丢包率153.5 会话和流两级分用163.6 多种流同步掌握16四RTP 协议应用方案174.1 RTP 协议应用方案之单播174.2 RTP 协议应用方案之播送174.3 R
2、TP 协议应用方案之组播174.3.1 RTP 协议组播方案总体概述184.3.2 RTP 协议组播方案效劳器端实现1943. 3RTP 协议组播方案客户端实现2043. 4RTP 协议视频帧率和质量调整策略21五RTP 协议移植打算22六RTP 协议安全方面考虑22一 RTP 协议背景流Streaming是近年在 Internet 上消灭的概念,其定义格外广泛,主要是指通过网络传输多媒体数据的技术总称。流媒体包含广义和狭义两种内涵:广义上的流媒体指的是使音频和视频形成稳定和连续的传输流和回放流的一系列技术、方法和协议的总称,即流媒体技术;狭义上的流媒体是相对于传统的下载-回放方式而言的,指的
3、是一种从Internet 上猎取音频和视频等多媒体数据的方法,它能够支持多媒体数据流的实时传输和实时播放。通过运用流媒体技术,效劳器能够向客户机发送稳定和连续的多媒体数据流,客户机在接收数据的同时以一个稳定的速率回放,而不用等数据全部下载完之后再进展回放。流式传输有挨次流式传输(Progressive Streaming)和实时流式传输(Realtime Streaming)两种方式。实时流式传输是实时传送,特别适合现场大事,实时流式传输必需匹配连接带宽,这意味着图像质量会因网络速度降低而变差,以削减对传输带宽的需求。“实时”的概念是指在一个应用中数据的交付必需与数据的产生保持准确的时间关系,
4、这需要相应的协议支持,这样RTP 和RTCP 就相应的消灭了。实时传输协议RTPRealtime Transport Protocol:是针对 Internet 上多媒体数据流的一个传输协议, 由IETF 作为RFC1889 公布,现在最的为RFC3550。RTP 被定义为在一对一或一对多的传输状况下工作,其目的是供给时间信息和实现流同步。RTP 的典型应用建立在UDP 上,但也可以在TCP 等其他协议之上工作。RTP 本身只保证明时数据的传输,并不能为按挨次传送数据包供给牢靠的传送机制,也不供给流量掌握或拥塞掌握,它依靠RTCP 供给这些效劳。实时传输掌握协议RTCPRealtime Tra
5、nsport Control Protocol:负责治理传输质量,在当前应用进程之间交换掌握信息,供给流量掌握和拥塞掌握效劳。在RTP 会话期间,各参与者周期性地传送RTCP 包,包中含有已发送的数据包的数量、丧失的数据包的数量等统计资料,因此,效劳器可以利用这些信息动态地转变传输速率,甚至转变有效载荷类型。RTP 和RTCP 协作使用,能以有效的反响和最小的开销使传输效率最正确化,故特别适合传送网上的实时数据。二 RTP 协议原理及工作机制让我们先看一下RTP 和RTCP 在网络层次中的位置,以便我们更加清楚的了解该协议,如以下图 1-1 所示:图 1-1 RTP&RTCP 网络层次关系图下
6、面我们就从RTP 以及RTCP 的协议原理,数据包格式,工作机制三个方面来对该协议做一个根本的生疏和了解:2.1 RTP 协议原理2.1.1 RTP 协议原理RTP 协议原理比较简洁,负责对流媒体数据进展封包并实现媒体流的实时传输,即它依据RPT数据包格式来封装流媒体数据,并利用与它绑定的协议进展数据包的传输,具体见本文 2.2.1RTP 数据格式;RTP 本身只保证明时数据的传输,并不能为按挨次传送数据包供给牢靠的传送机制,也不供给流量掌握或拥塞掌握,它依靠RTCP 供给这些效劳.2.1.2 RTCP 协议原理RTCP 原理是向会话中的全部成员周期性地发送掌握包来实现的,应用程序通过接收这些
7、掌握数据包,从中猎取会话参与者的相关资料,以及网络状况、分组丧失概率等反响信息,从而能够对效劳质量进展掌握或者对网络状况进展诊断.RTCP 协议的功能是通过不同的RTCP 数据报文(具体描述的见 2.2.2RTCP 数据包格式)来实现的,主要有如下几种类型: SR(Sender Report) 发送端报告,所谓发送端是指发出RTP 数据报的应用程序或者终端,发送端同时也可以是接收端。 RR(Receiver Report) 接收端报告,所谓接收端是指仅接收但不发送RTP 数据报的应用程序或者终端。 SDES 源描述,主要功能是作为会话成员有关标识信息的载体,如用户名、邮件地址、 号码等,此外还
8、具有向会话成员传达会话掌握信息的功能。 BYE 通知离开,主要功能是指示某一个或者几个源不再有效,即通知会话中的其他成员自己将退出会话。 APP 由应用程序自己定义,解决了RTCP 的扩展性问题,并且为协议的实现者供给了很大的敏捷性。RTCP 数据报携带有效劳质量监控的必要信息,能够对效劳质量进展动态的调整,并能够对网络拥塞进展有效的掌握。由于RTCP 数据报承受的是组播方式,因此会话中的全部成员都可以通过RTCP 数据报返回的掌握信息,来了解其他参与者的当前状况。例如在流媒体应用场合下,发送媒体流的应用程序将周期性地产生发送端报告SR, 该 RTCP 数据报含有不同媒体流间的同步信息,以及已
9、经发送的数据报和字节的计数, 接收端依据这些信息可以估量出实际的数据传输速率。另一方面,接收端会向全部的发送端发送接收端报告RR,该RTCP 数据报含有已接收数据报的最大序列号、丧失的数据报数目、延时抖动和时间戳等重要信息,发送端应用依据这些信息可以估量出来回时延,并且可以依据数据报丧失概率和时延抖动状况动态调整发送速率,以改善网络拥塞状况,或者依据网络状况平滑地调整应用程序的效劳质量。RTCP 具有以下四个功能:1、根本功能是供给数据传输质量的反响.这是 RTP 作为一种传输协议的主要作用,它与其他协议的流量和堵塞掌握相关.反响可能对自适应编码有直接作用,但是IP 组播的试验说明它对于从接收
10、机得到反响信息以诊断传输故障也有打算性作用.向全部成员发送接收反响可以使“观看员“评估这些问题是局部的还是全局的.利用类似多点播送的传输机制,可以使某些实体,诸如没有参加会议的网络网络业务观看员,接收到反响信息并作为第三类监视员来诊断网络故障.反响功能通过RTCP 放射机和接收机报告实现.2、RTCP 为每个RTP 源传输一个固定的识别符,称为标称名或CNAME.由于当发生冲突或程序重启时SSRC 可能转变,接收机要用CNAME 来跟踪每个成员.接收机还要用CNAME 来关联一系列相关RTP 会话期中来自同一个成员的多个数据流,例如同步语音和图象.3、前两个功能要求全部成员都发送RTCP 包,
11、因此必需掌握速率以使RTP 成员数可以逐级增长.通过让每个成员向全部成员发送掌握包,各个成员都可以独立地观看会议中全部成员的数目.4、可选的功能是传输最少的会议掌握信息,例如在用户接口中显示的成员识别.这最可能在“松散掌握“的会议中起作用,在“松散掌握“会议里,成员可以不经过资格掌握和参数协商而参加或退出会议.RTCP 作为一个延长到全部成员的便利通路,必需要支持具体应用所需的全部掌握信息通信.2.2 RTP 数据包格式2.2.1 RTP 数据包格式RTP 报文头格式见RFC3550 12: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
12、6 7 8 9 0 1+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+|V=2|P|X| CC|M|PT|sequence number|+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+|timestamp|+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+|synchronization source (SSRC) identifier|+=+=+=+
13、=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+|contributing source (CSRC) identifiers|.|+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+以上域具体意义如下:版本(V):2 比特 此域定义了RTP 的版本.此协议定义的版本是 2.(值 1 被RTP 草案版本使用,值 0 用在最初“vat“语音工具使用的协议中.)填料(P):1 比特 假设填料比特被设置,此包包含一到多个附加在末端的填充比特,不是负载的一局
14、部.填料的最终一个字节包含可以无视多少个填充比特.填料可能用于某些具有固定长度的加密算法,或者在底层数据单元中传输多个RTP 包.扩展(X):1 比特 假设设置扩展比特,固定头(仅)后面跟随一个头扩展.CSRC 计数(CC):4 比特 CSRC 计数包含了跟在固定头后面CSRC 识别符的数目.标志(M):1 比特 标志的解释由具体协议规定.它用来允许在比特流中标记重要的大事, 如帧范围.规定该标志在静音后的第一个语音包时置位.负载类型(PT):7 比特 此域定义了负载的格式,由具体应用打算其解释.协议可以规定负载类型码和负载格式之间一个默认的匹配.其他的负载类型码可以通过非RTP 方法动态定义
15、.RTP 放射机在任意给定时间发出一个单独的RTP 负载类型;此域不用来复用不同的媒体流.序列号sequence number:16 比特 每发送一个RTP 数据包,序列号加一,接收机可以据此检测包损和重建包序列.序列号的初始值是随机的(不行推测),以使即便在源本身不加密时(有时包要通过翻译器,它会这样做),对加密算法泛知的一般文本攻击也会更加困难.时间标志timestamp:32 比特 时间标志反映了RTP 数据包中第一个比特的抽样瞬间. 抽样瞬间必需由随时间单调和线形增长的时钟得到,以进展同步和抖动计算.时钟的区分率必需满足要求的同步准确度,足以进展包到达抖动测量.时钟频率与作为负载传输的
16、数据格式独立,在协议中或定义此格式的负载类型说明中静态定义,也可以在通过非RTP 方法定义的负载格式中动态说明.假设 RTP 包周期性生成,可以使用由抽样时钟确定的额定抽样瞬间,而不是读系统时钟.例如,对于固定速率语音,时间标志钟可以每个抽样周期加 1.假设语音设备从输入设备读取掩盖 160 个抽样周期的数据块,对于每个这样的数据块,时间标志增加 160,无论此块被发送还是被静音压缩.时间标志的起始值是随机的,如同序列号.多个连续的RTP 包可能由同样的时间标志,假设他们在规律上同时产生.如属于同一个图象帧.假设数据没有依据抽样的挨次发送,连续的RTP 包可以包含不单调的时间标志,如 MPEG
17、 交织图象帧.同步源SSRC:32 比特 SSRC 域用以识别同步源.标识符被随机生成,以使在同一个RTP 会话期中没有任何两个同步源有一样的SSRC 识别符.尽管多个源选择同一个SSRC 识别符的概率很低,全部RTP实现工具都必需预备检测和解决冲突.假设一个源转变本身的源传输地址,必需选择的SSRC 识别符,以避开被当作一个环路源.有奉献源CSRC列表:0 到 15 项,每项 32 比特 CSRC 列表识别在此包中负载的有奉献源.识别符的数目在CC 域中给定.假设有奉献源多于 15 个,仅识别 15 个.CSRC 识别符由混合器插入,用有奉献源的SSRC 识别符.例如语音包,混合产生包的全部
18、源的SSRC 标识符都被陈设,以期在接收机处正确指示交谈者.留意:前 12 个字节消灭在每个RTP 包中,仅仅在被混合器插入时,才消灭CSRC 识别符列表.RTP 报文扩展头格式见RFC3550 18:01230 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+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+|defined by profile|length|+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-
19、+-+-+-+-+-+-+-+-+-+-+-+-+|header extension|.|假设 RTP 头中的扩展比特位X 置 1,则一个长度可变的头扩展局部被加到RTP 固定头之后,.头扩展包含 16 比特的长度域,指示扩展项中 32 比特字的个数,不包括 4 个字节扩展头(因此零是有效值).RTP 固定头之后只允许有一个头扩展.为允很多个互操作实现独立生成不同的头扩展,或某种特定实现有多种不同的头扩展,扩展项的前 16 比特用以识别标识符或参数.这 16 比特的格式由具体实现的上层协议定义.根本的 RTP 说明并不定义任何头扩展本身。2.2.2 RTCP 数据包格式RTCP 包括五种数据包
20、类型RFC3550 69:abbrev.namevalue( 该值RTCP头格式中的PT类型字段)SRsender report200RRreceiver report201SDESsource description202BYEgoodbye203APPapplication-defined204现在我们就 SR 报文为例具体描述一下 RTCP 报文格式RFC3550 35:01230 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+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
21、-+-+-+-+-+-+-+-+-+-+-+header |V=2|P|RC|PT=SR=200|length|+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+|SSRC of sender|+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+sender |NTP timestamp, most significant word| info+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-
22、+-+-+-+-+-+-+-+-+|NTP timestamp, least significant word|+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+|RTP timestamp|+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+|sender”s packet count|+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+|sender”s o
23、ctet count|+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+report |SSRC_1 (SSRC of first source)| block +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+1| fraction lost |cumulative number of packets lost|+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-
24、+-+|extended highest sequence number received|+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+|interarrival jitter|+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+|last SR (LSR)|+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+|delay since last SR (D
25、LSR)|+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+report |SSRC_2 (SSRC of second source)| block +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ 2:.:+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+|profile-specific extensions|+-+-+-+-+-+-+-+-+-+-
26、+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+每个 RTCP 包的开头局部是与RTP 数据包相类似的固定局部,随后是一块构造化单元, 它随负载类型不同长度发生变化,但是总以 32 比特终止.放射机报告包由 3 局部组成,假设定义,可能跟随第 4 个面对协议的扩展局部. 第一局部:8 字节长.该域有以下意义:版本(V):2 比特 RTP 版本识别符,在 RTCP 包内的意义与RTP 包中的一样.此协议中定义的版本号为 2.填料(P):1 比特 假设设置填料比特,该 RTCP 包在末端包含一些附加填料比特,并不是掌握信息的根本局部.填料的最终一个比特统计
27、了多少个字节必需被无视.某些有固定块大小的加密算法可能需要填料比特.在复合RTCP包中,复合包作为一个整体加密,填料比特只能加在最终一个单包的后面.接收报告块计数(RC):5 比特 该包中所含接收报告块的数目.零值有效. 包类型(PT):8 比特 包含常数 200,用以识别这个为RTCP SR 包.长度:16 比特 以 32 比特字为单位,该RTCP 包的长度减一,包括头和任何填料.(偏移量 1 保证零值有效,避开了在扫描RTCP 包长度时可能发生的无限循环,同时以32 比特为单位避开了对以 4 为倍数的有效性检测.)SSRC:32 比特 SR 包发起者的同步源标识符.其次局部:放射机信息,2
28、0 比特长,在每个放射机报告包中消灭.它概括了从今放射机发出的数据传输状况.此域有以下意义:NTP 时间标志:64 比特 指示了此报揭露送时的壁钟时刻,它可以与从其它接收机返回的接收报告块中的时间标志结合起来,测量到这些接收机的环路时沿.接收机必需期望此时间标志的准确度远低于NTP 时间标志的区分率.测量的不确定度不行知,因此也无需指示.某个放射机,能够跟踪逝去时间但是无法跟踪壁钟时间,可以用参加会议后的逝去时间代替.假定该值小于 68 年,则最高比特为零.允许用抽样时钟估量逝去壁钟时间.无法用壁钟时间或逝去时间的可以设置此项为零.RTP 时间标志:32 比特 与以上的NTP 时间标志对应同一
29、时刻,但是与数据包中的RTP 时间标志具有一样的单位和偏移量.这个全都性可以用来让NTP 时间标志已经同步的源间进展媒体内/间同步,还可以让与媒体无关的接收机估量标称RTP 时钟频率.留意在大多数状况下此时间标志不等于任何接近的RTP 包中的时间标志.然而,通过“RTP 时间标志计数器“和“由在抽样点上周期性检测壁钟时间得到的实际时间“两者之间的关系,可以通过相应的NTP 时间标志计算得到此RTP 时间标志.发送的报文数:32 比特 从开头传输到此SR 包产生时该放射机发送的RTP 数据包总数. 假设放射机转变SSRC 识别符,该计数器重设.发送的字节文数:32 比特 从开头传输到此SR 包产
30、生时该放射机在RTP 数据包发送的字节总数(不包括头和填料).假设放射机转变SSRC识别符,该计数器重设.此域可以用来估量平均负载类型数据速率.第三局部:零到多个接收报告块,块数等于从上一个报告以来该放射机收听到的其它源的数目.每个接收报告块传输关于从某个同步源来的数据包的接收统计信息.假设某个源因冲突而转变其SSRC识别符,接收机并不连续统计数字.这些统计数字是:SSRC_n(源识别符):32比特 在此接收报告块中信息所属源的SSRC识别符.丢包率:8比特 自从前一SR包或RR包放射以来,从SSRC_n传来的RTP数据包的损失比例, 以固定点小数的形式表示,小数点在此域的左侧,等于将损失比例
31、乘256后取整数局部. 该值定义为损失包数被期望接收的包数除,在下一段中定义.假设由于复制而导致包损为负值,损失比例值设为零.留意在收到上一个包后,接收机无法告之以后的包是否丧失, 假设在上一个接收报告间隔内从某个源发出的全部数据包都丧失,那么将不为此源发送接收报告块.累计包丧失数:24比特 从开头接收到现在,从源SSRC_n发到根源的RTP数据包的丢包总数.该值定义为期望接收的包数减去实际接收的包数,接收的包括复制的或迟到的.由于迟到的包不算作损失,在发生复制时包损可能为负值.期望接收的包数定义为扩展的上一接收序号(随后定义)减去最初接收序号.接收到的扩展的最高序列号:32比特 低16比特包
32、含从源SSRC_n来的最高接收序列号,高16比特用相应的序列号周期计数器扩展该序列号.留意在同一会议中的不同接收机,假设启动时间明显不同,将产生不同的扩展项.到达间隔抖动:32比特 RTP数据包到达时刻统计方差的估量值,以时间标志为单位测量, 用无符号整数表达.到达时刻抖动J定义为一对包中接收机相对放射机的时间跨度差值的平均偏差(平滑后确实定值).如以下等式所示,该值等于两个包相对传输时间的差值, 相对传输时间是指包的RTP时间标志和到达时刻接收机时钟,以同一单位的差值.假设Si是包i的RTP时间标志,Ri是包i以RTP时间标志单位的到达时刻值,对于两个包i和j,D可以表达为D(i,j) =
33、(Rj - Ri) - (Sj - Si) = (Rj - Sj) - (Ri - Si)到达时刻抖动可以在收到从源SSRC_n来的每个数据包i后连续计算,利用该包和前一包i-1的偏差D(按到达挨次,而非序号挨次),依据公式J(i) = J(i-1) + (|D(i-1,i)| -J(i-1)/16计算.无论何时发送接收报告,都用当前的J值.此处描述的抖动计算允许与协议独立的监视器对来自不同实现的报告进展有效的解释. 上一SR报文 (LSR):32比特 接收到的来自源SSRC_n的最RTCP放射机报告(SR)的64位NTP时间标志的中间32位.假设还没有接收到SR,该域值为零.自上一SR的时间
34、延时(DLSR):32比特 是从收到来自SSRC_n的SR包到发送此接收报告块之间的延时,以1/65536秒为单位.假设还未收到来自SSRC_n的SR包,该域值为零.假设SSRC_r为发出此接收报告块的接收机.源SSRC_n可以通过记录收到此接收报告块的时刻A来计算到SSRC_r的环路传输时延.可以利用最的SR时间标志(LSR)域计算整个环路时间A-LSR,然后减去此DLSR域得到环路传播时延.可以用此来近似测量到一族接收机的距离,尽管有些连接可能有格外不对称的时延.接收机报告包(RR)与放射机报告包根本一样,除了包类型域包含常数 201 和没有放射机信息的 5 个字(NTP 和RTP 时间标
35、志和放射机包和字节计数).余下区域与SR 包意义一样.假设没有发送和接收据报告,在 RTCP 复合包头部参加空的RR 包(RC=0)。其它三种报文的格式由于比较简洁,不再具体描述;2.3 RTP 工作机制2.3.1 RTP 工作机制RTP 依据应用程序的要求将流媒体数据包封装成RTP 数据包并进展发送;它靠上层的调用以及依靠网络层发送来实现;工作时,RTP 协议从上层接收流媒体信息码流如H.263,装配成RTP 数据包发送给下层,下层协议供给RTP 和RTCP 的分流。如在UDP 中,RTP 使用一个偶数号端口,则相应的 RTCP 使用其后的奇数号端口。RTP 数据包没有长度限制,它的最大包长
36、只受下层协议的限制。2.3.2 RTCP 工作机制RTCP 报文不封装音视频数据,而是封装发送端或者接收端的统计报表信息;在 RTP 会话期间,每个参与者周期性的向其它参与者发送RTCP 掌握信息包,如以下图1-2 所示:图 1-2 RTCP 工作示意图由于网络的状况很不稳定,假设网络状况好我们可以削减语音的延迟时间,也可以增大视频的发送帧率或质量。假设网络状况不好我们可以增大语音延迟时间以保证语音连续,也可削减视频的发送帧率或质量,以削减网络的堵塞。RTCP 包的发送率依据与会者的数量来调整.三 RTP 协议关键技术指标3.1 时间戳时间戳字段是RTP首部中说明数据包时间的同步信息,是数据能
37、以正确的时间挨次恢复的关键。时间戳的值给出了分组中数据的第一个字节的采样时间(Sampling Instant),要求发送方时间戳的时钟是连续、单调增长的,即使在没有数据输入或发送数据时也是如此。在静默时,发送方不必发送数据,保持时间戳的增长,在接收端,由于接收到的数据分组的序号没有丧失,就知道没有发生数据丧失,而且只要比较前后分组的时间戳的差异,就可以确定输出的时间间隔。RTP 规定一次会话的初始时间戳必需随机选择,但协议没有规定时间戳的单位,也没有规定该值的准确解释,而是由负载类型来确定时钟的颗粒,这样各种应用类型可以依据需要选择适宜的输出计时精度。在RTP传输音频数据时,一般选定规律时间
38、戳速率与采样速率一样,但是在传输视频数据时,必需使时间戳速率大于每帧的一个滴答。假设数据是在同一时刻采样的, 协议标准还允很多个分组具有一样的时间戳值,如多个分组属于同一画像。RTCP 中的SRSender Report 发送端报告掌握分组包含NTP网络时间,是以1900-1-1 零时为起点的系统确定时间时间戳和 RTP 时间戳封装数据时候打上的时间戳与媒体帧上打上的时间戳不同可用于同步音视频媒体流。其实现机制如下:RTP 时间戳是依据邻近的RTP 数据包中的时间戳结合NTP 时间差得到的,用公式表达为:RTP_tsi = tsi + NTPi-NTP”i 其中:RTP_tsi 表示RTCP
39、中的RTP 时间戳;tsi 表示邻近的RTP 包中的时间戳;NTPi 表示RTCP 的网络时间戳;NTP”i 表示邻近的RTP 包对应的网络时间戳;下标表示第i 个源。RTP_tsj=tsj+NTPjNTP”j 表示第j 个源的RTP 时间戳; 因此,i 和源 j 之间的相对时差可以表示为:RTP_tsi tsi -( RTP_tsj - tsj) = (NTPi NTP”i) - NTPjNTP”j;由于NTP同步,差值可以反映出两个源的相对时差。由于要同步不同来源的媒体流,必需使得同步他们确实定时间基准,而NTP 时间戳正是这样确实定时间基准4。而对于同一来源的媒体流,应用RTP 的时间戳
40、来保证其同步。3.2 时延影响时延的因素有多个方面:编解码、网络、防抖动缓冲、报文队列等都影响时 延,其中有些是固定时延,如编解码网络速率等;有些是变化的,如防抖动缓冲和队列调度等,固定的时延可以通过转变编解码方式和提高网络速率来转变,而变化的时延通常承受提高转发效率来提高;假设 SSRC_r 为发出一个接收报告块的接收机.源SSRC_n 可以通过记录收到接收报告块的时刻A 来计算到SSRC_r 的环路传输时延.可以利用最的SR 时间标志(LSR)域计算整个环路时间A-LSR,然后减去此DLSR 域得到环路传播时延.3.3 抖动在视频 中,语音、视频数据都是使用UDP协议传送的,但这种协议传输
41、的数据包在网络层不能保证其发送挨次,需要应用层进展排序。在网络的传输中都会有延时, 且随着网络负载的变化,延时的长短也不一样,对于语音数据,假设接收方收到后马上播放,很简洁造成语音的抖动。RTP 数据包到达时刻统计方差的估量值,以时间标志为单位测量,用无符号整数表达到达时刻抖动J定义为一对包中接收机相对放射机的时间跨度差值的平均偏差(平滑后确实定值).如以下等式所示,该值等于两个包相对传输时间的差值,相对传输时间是指包的RTP时间标志和到达时刻接收机时钟,以同一单位的差值.假设Si是包i的RTP时间标志,Ri是包i以RTP时间标志单位的到达时刻值,对于两个包i和j,D可以表达为D(i,j) =
42、 (Rj - Ri) - (Sj - Si) = (Rj - Sj) - (Ri - Si)到达时刻抖动可以在收到从源SSRC_n来的每个数据包i后连续计算,利用该包和前一包i-1的偏差D(按到达挨次,而非序号挨次),依据公式J(i) = J(i-1) + (|D(i-1,i)| - J(i-1)/16计算.无论何时发送接收报告,都用当前的J值.为了更好的解决抖动的问题,最好能实现抖动缓存原理比较简洁,在此不做具体描述,一是保证语通道读取数据包的挨次正确,二是掌握接收方依据采集的时间挨次播放语音,削减语音的抖动;另外供给QoS和资源预留使语音数据获得优先发送和获得固定的带宽也是解决抖动问题的主
43、要手段。3.4 丢包率丢包率是通过计算接收包数量和发送包数量的比率得到的,丢包率获得的整个流程是:发送方每间隔肯定时间读取每个发送通道的发包数量和数据长度,组成一个此通道的RTCP 报文发送给接收方,同时将发送数据包计数清零;接收方收到RTCP 包后,读取接收通道接收到的包数量,并计算出丢包率,通过一个RTCP 接收汇报包发送给发送方,同时对接收数据包计数清零。自从前一SR 包或RR 包放射以来,从 SSRC_n 传来的RTP 数据包的损失比例,以固定点小数的形式表示,定义为损失包数被期望接收的包数除,在下一段中定义.假设由于复制而导致包损为负值,损失比例值设为零.留意在收到上一个包后,接收机
44、无法告之以后的包是否丧失,假设在上一个接收报告间隔内从某个源发出的全部数据包都丧失,那么将不为此源发送接收报告块.3.5 会话和流两级分用一个 RTP 会话(Session)包括传给某个指定目的地对(Destination Pair)的全部通信量,发送方可能包括多个。而从同一个同步源发出的RTP 分组序列称为流(Stream),一个RTP 会话可能包含多个RTP 流。一个RTP 分组在效劳器端发送出去的时候总是要指定属于哪个会话和流,在接收时也需要进展两级分用,即会话分用和流分用。只有当RTP 使用同步源标识(SSRC)和分组类型(PTYPE)把同一个流中的分组组合起来,才能够使用序列号(Se
45、quence Number)和时间戳(Timestamp)对分组进展排序和正确回放。3.6 多种流同步掌握RTCP 的一个关键作用就是能让接收方同步多个RTP 流,例如:当音频与视频一起传输的时候,由于编码的不同,RTP 使用两个流分别进展传输,这样两个流的时间戳以不同的速率运行,接收方必需同步两个流,以保证声音与影像的全都。为能进展流同步,RTCP 要求发送方给每个传送一个唯一的标识数据源的标准名(Canonical Name, 尽管由一个数据源发出的不同的流具有不同的同步源标识(SSRC),但具有一样的标准名,这样接收方就知道哪些流是有关联的。而发送方报告报文所包含的信息可被接收方用于协调
46、两个流中的时间戳值。发送方报告中含有一个以网络时间协议NTP(Network Time Protocol)格式表示确实定时间值,接着RTCP 报告中给出一个RTP 时间戳值,产生该值的时钟就是产生RTP 分组中的TimeStamp 字段的那个时钟。由于发送方发出的全部流和发送方报告都使用同一个确定时钟,接收方就可以比较来自同一数据源的两个流确实定时间,从而确定如何将一个流中的时间戳值映射为另一个流中的时间戳值。四 RTP 协议应用方案4.1 RTP 协议应用方案之单播在客户端与媒体效劳器之间建立一个单独的数据通道,从一台效劳器送出的每个数据包只能传送给一个客户端,这种传送方式称为单播。优点:便于掌握和治理;缺点:每个用户必需分别对媒体效劳器发送单独的查询,而媒体效劳器必需向每个用户发送所申请