rfc 定义的rtp和rtcp协议基本包格式

来源:互联网 发布:mac英雄联盟 编辑:程序博客网 时间:2024/05/22 08:04

RTP协议
实时传输协议RTP提供了实时信息的端对端传输业务,如交互的语音和图象;这些业务包括负载类型识别,序列编号,加入时间标志,传输监视.典型的应用是在UDP层上传输RTP,以利用它的复用和总和检测

业务.
RTP
包括两个紧密相关的部分:
-
实时传输协议(RTP),传输有实时特性的信息;
- RTP
控制协议(RTCP),监视业务质量和传输对话中成员的信息.
RTP
包头
RTP
头有以下格式:
              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|X|     CC    |M| PT |
序列号 |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
|
时间标志 |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
|
同步源(SSRC)识别符 |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
|
有贡献源(CSRC)识别符 |
| ... ... |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
RTP
包头格式
12个字节出现在每个RTP包中,仅仅在被混合器插入时,才出现CSRC识别符列表.这些域有以下意义:
版本(V):2比特 此域定义了RTP的版本.此协议定义的版本是2.(1RTP草案版本使用,0用在最初"vat"语音工具使用的协议中.)
填料(P):1比特 若填料比特被设置,此包包含一到多个附加在末端的填充比特,不是负载的一部分.填料的最后一个字节包含可以忽略多少个填充比特.填料可能用于某些具有固定长度的加密算法,或者在底层数据单元中传输多个RTP

扩展(X):1比特 若设置扩展比特,固定头()后面跟随一个头扩展.


CSRC
计数(CC):4比特 CSRC计数包含了跟在固定头后面CSRC识别符的数目.
标志(M):1比特 标志的解释由具体协议规定.它用来允许在比特流中标记重要的事件,如帧范围.规定该标志在静音后的第一个语音包时置位.

 
负载类型(PT):7比特 此域定义了负载的格式,由具体应用决定其解释.协议可以规定负载类型码和负载格式之间一个默认的匹配.其他的负载类型码可以通过非RTP方法动态定义.RTP发射机在任意给定时间发出一个单独的RTP负载类型;此域不用来复用不同的媒体流.


序列号:16比特 每发送一个RTP数据包,序列号加一,接收机可以据此检测包损和重建包序列.序列号的初始值是随机的(不可预测),以使即便在源本身不加密时(有时包要通过翻译器,它会这样做),对加密算法泛知的普通文本攻击也会更加困难.


时间标志:32比特 时间标志反映了RTP数据包中第一个比特的抽样瞬间.抽样瞬间必须由随时间单调和线形增长的时钟得到,以进行同步和抖动计算.时钟的分辨率必须满足要求的同步准确度,足以进行包到达抖动测量.时钟频率与作为负载传输的数据格式独立,在协议中或定义此格式的负载类型说明中静态定义,也可以在通过非RTP方法定义的负载格式中动态说明.RTP包周期性生成,可以使用由抽样时钟确定的额定抽样瞬间,而不是读系统时钟.例如,对于固定速率语音,时间标志钟可以每个抽样周期加1.若语音设备从输入设备读取覆盖160个抽样周期的数据块,对于每个这样的数据块,时间标志增加160,无论此块被发送还是被静音压缩.时间标志的起始值是随机的,如同序列号.多个连续的RTP包可能由同样的时间标志,若他们在逻辑上同时产生.如属于同一个图象帧.若数据没有按照抽样的 顺序发送,连续的RTP包可以包含不单调的时间标志,MPEG交织图象帧.

SSRC:32比特SSRC域用以识别同步源.标识符被随机生成,以使在同一个RTP会话期中没有任何两个同步源有相同的SSRC识别符.尽管多个源选择同一个SSRC识别符的概率很低,所有RTP实现工具都必须准备检测和解决冲突.若一个源改变本身的源传输地址,必须选择新的SSRC识别符,以避免被当作一个环路源.

CSRC列表:015,每项32比特 CSRC列表识别在此包中负载的有贡献源.识别符的数目在CC域中给定.若有贡献源多于15,仅识别15.CSRC识别符由混合器插入,用有贡献源的SSRC识别符.例如语音包,混合产生新包的所有源的SSRC标识符都被陈列,以期在接收机处正确指示交谈者.

RTP头扩展
RTP
提供扩展机制以允许实现个性化:某些新的与负载格式独立的功能要求的附加信息在RTP数据数据包头中传输.设计此方法可以使其它没有扩展的交互运行忽略此头扩展.RTP头扩展的格式如下图所示.
              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 
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ 


RTP头中的扩展比特位置1,则一个长度可变的头扩展部分被加到RTP固定头之后,.头扩展包含16比特的长度域,指示扩展项中32比特字的个数,不包括4个字节扩展头(因此零是有效值).RTP固定头之后只允许有一个头扩展.为允许多个互操作实现独立生成不同的头扩展,或某种特定实现有多种不同的头扩展,扩展项的前16比特用以识别标识符或参数.16比特的格式由具体实现的上层协议定义.基本的RTP说明并不定义任何头扩展本身.

 

 

RTP控制协议RTCP
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:
接收机报告,描述非活跃发射机成员的接收统计数字;


在本文中详细介绍SRRR.


每个RTCP包的开始部分是与RTP数据包相类似的固定部分,随后是一块结构化单元,它随负载类型不同长度发生变化,但是总以32比特终止.对齐要求和长度域使RTCP包可"堆栈",既可以将多个RTCP包形成一个复合RTCP,在底层协议(UDP),通常都是将复合包作为一个包传输的.
复合包中的每个RTCP单包可以单独处理,而无需考虑包复合的顺序.然而,为了实现某些协议功能,添加以下限制:


-
接收统计数字(SRRR),经常作为带宽限制值,尽可能达到统计数字的最大分辨率,因此每个周期发送的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接收报告块,可以在最初的SRRR包之后堆栈附加的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 90                                                          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是包iRTP时间标志,Ri是包iRTP时间标志单位的到达时刻值,对于两个包ij,D可以表达为
D(i,j)=(Rj-Sj)-(Ri-Si);

到达时刻抖动可以在收到从源SSRC_n来的每个数据包i后连续计算,利用该包和前一包i-1的偏差D(按到达顺序,而非序号顺序),根据公式J=Ji-1+(|D(i-1,i)|-Ji-1)/16计算.无论何时发送接收报告,都用当前的J.
此处描述的抖动计算允许与协议独立的监视器对来自不同实现的报告进行有效的解释.


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

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


假设SSRC_r为发出此接收报告块的接收机.SSRC_n可以通过记录收到此接收报告块的时刻A来计算到SSRC_r的环路传输时延.可以利用最新的SR时间标志(LSR)域计算整个环路时间A-LSR,然后减去此DLSR域得到环路传播时延.可以用此来近似测量到一族接收机的距离,尽管有些连接可能有非常不对称的时延.
接收机报告RTCP
0 1 2 3
0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 90                                                          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个字(NTPRTP时间标志和发射机包和字节计数).余下区域与SR包意义相同.若没有发送和接收据报告,RTCP

复合包头部加入空的RR(RC=0).

 

分析发射机和接收机报告
接收质量反馈不仅对发射机有用,而且对于其它接收机和第三派监视器也有作用.发射机可以基于反馈修正发送信息量;接收机可以判断问题是本地的,区域内的还是全球的;网络管理者可以利用与协议无关的监视器(只接收RTCP包但是不接收相应的RTP)去评估多点传送网络的性能.
在发射机信息和接收机报告块中都连续统计丢包数,因此可以计算任何两个报告块中的差别,在短时间和长时间内都可以进行测算,最近收到的两个包之间差值可以评估当前传输质量.包中有NTP时间标志,可以用两个报告间隔的差值计算传输速率.由于此时间间隔与数据编码始终速率独立,可以实现与编码及协议独立的质量监视.
从发射机信息中,第三派监视器可以在一个时间间隔内计算平均负载数据速率和平均发包速率,而无需考虑数据接收.两个值的比就是平均负载大小.若能假定包损与包的大小无关,那么某个特定接收机收到的包数乘以平均负载大小(或相应的包大小)就得出接收机可得到的外在吞吐量.

除了累计计数允许利用报告间差值进行长期包损测量外,单个报告的包损比例域提供一个短时测量数据.当会议规模递增到无法为所有接收机保存接收状态信息,或者报告间隔变得足够长以至于从一个特定接收机只能收到一个报告时,短时测量数据变得更重要.
到达间隔抖动域提供另一个有关网络阻塞的短时测量量.包损追踪长期阻塞,抖动测量追踪短时阻塞.抖动测量可以在导致包损前指示阻塞.由于到达间隔抖动
域仅仅是发送报告时刻抖动的一个快照,因此需要在一个网络内在一段时间内分析来自某个接收机的报告,或者分析来自多个接收机的报告.
负载类型
注意并非所有RTP所用的编码方式都分配了静态负载类型号.可以建立在96-127间的负载类型值与编码方式间的动态匹配.可用的负载类型空间比较小.仅在满足以下条件时分配新的静态负载类型:
-
很多因特网社团都对此编码感兴趣;
-
与现存编码方式比较有好处和/或要求与现有广泛使用会议及多媒体系统互通;
-
描述足以建立一个译码器.
下表 为RTP数据头的PT域定义了静态负载类型.此外,96-127之间的负载类型值可以通过会议控制协议动态定义.例如,一个会话期可以在一个给定会话期内,指定负载类型96指示PCMU编码,8,000抽样率,

通道.负载类型值表的"保留"项用以使RTPRTCP包可以被可靠识别.
一个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以下用来进行特权处理,10245000之间被操作系统动态分配.

4RTP协议
4
IRTP报头格式

Field值确定
V
(版本): 2 bit版本号置 2
P
(填充): l bit填充位置 0
X
(扩展): l bit扩展位置0
CC
CSRC数): 4 bit CSRC标识的数量,此字段填充为 0,本体制不使用 CSRC
M
(标志):l bit标志位,该标志在静音后的第一个语音包时置位。静音包仅发送一个,不连续发送。
pT
(净荷类型) 7 bit G723.1 4
G
729 18
Sequence number
(序列号):16bit序列号,初始值为一随机数,此后以1递增,收端以此判定包丢失及恢复包顺序。
Time stamP
(时戳):32bit时戳。用于标识RTP数据包中第一个字节来样时的时刻,其起始值为一随机值,以8000/s的速率递增。
Synchronization Source
SSRCidentifiers(同步源标志): 32 bit,用来标识RTP包的数据源。
Contributing Source
CSRCidentifiers(贡献源标志):每个 CSRC 32 bit 0 15 CSRC序列,本体制不包含该字段。

42 RTCP协议

RTCP报文共有5类:RR SR SDES BYE APP。本标准只对SRRR报文提出要求。
SR
(发送报文)的格式如下:
其中的各项内容定义如下:
版本(V): 2 bit协议鉴别,在本体制中规定为 2
填充(P): 1 bit在本体制中规定为 0
接收报告数(RC)5bit
SR中包含的RR的数目,在本体制中规定不得大于1
净荷类型(pt)8 bit
报文类型,以二进制表示。其中十进制的200代表SR
长度(length)16 bit
报文长度,指在其后的报文长度,所以有可能为0
发送者的同步源标志(SSRC of sender):32bit
源同步码,用以标识此次通话。
NTP
时戳(NTP timestmp): 64 bit
绝对时戳。在测量环路时延时可在对方的RR报文中带回;如果发送方不具有绝对时钟的能力,则可以用通话开始时间作为时钟0点或将此域置0。(在NTP格式中,64位的前32位是从1900110时开始

到现在的以秒为单位的整数部分,后32位是此时间的小数部分)
RTP
时戳(RTP timestamp): 32 bit
RTP的时戳为基推。
发送的报文数( sender/'s packet count): 32 bit
从通话开始后发送方总共发送的RTP报文的数目。
发送的字节数( sender/'s octet count):32 bit
从通话开始后发送方总共发送的有效载荷的数目(以字节记)。
随后描述的是一个或多个RR报文块,在本体制中规定在SR报文中最多只能有一个RR报文块。
源标志一nSSRC_n): 32 bit
源同步码,用以标识此RR块所从属的通话。
丢包率( fraction LOSt): 8 bit
从上一个SRRR报文发送后的丢包率,表现为接收方在此段时间内期待的RTP报文与所收到的
RTP
包数目的差值和它所期待的RTP报文的数目的比值,若为负值,置为0。详见RFC1889
累计的包丢失数( Cumulative numberof packets LoSt): 24 bit
累计的包丢失数。
接收到的扩展的最高序列号(extended highest sequence number received): 32 bit
其低16位是其收到的RTP包中的sequence number的最新值。其高16位标识其收到的RTP报文的 sequence number的循环的次数。
到达间隔抖动(interarrival jitter) 32bit
时延抖动。每两个RTP包的抖动可以用其RTP包中的RTP时戳和接收的时刻进行计算,计算公式如下:设
Rj
代表第j个包的到达时刻, Sj代表第j个包的RTP时戳值,则第 i RTP报文与第j RTP报文间的科动为Di,j) :
D
ij)=(RjRi-Sj Si =Rj Sj- Ri- Si
在生成RTCP报文时,其应当传送的时延抖动的值可用如下公式进行递 推计算:
J
J+( 1DI1I)1-J)/16
其中,J为要传送的时延抖动值。对后一项除以16是为了消除连带噪声。
上一SR报文时戳(LSR): 32 bit
收到的最近一个SR报文的NTP时戳的中间32位。
自上一SR的时间(DLSR):32bit
在收到上SR报文与此次以送报文之间的时间。以1/65536s记。如果还没有收到任何SR报文,此值置0
RR
报文的格式如下:

其中各项的功能与形式如 SR中的说明。若未收到任何RTP报文,则可发送一个空的RR,即RC=0
RTCP
包发送机制:在两次RTCP报文之音,若端点没有发出任何RTP报文,则端点此次发送RR(接收报文),否则,端点发送SR(发送报文),RTCP包每秒发送一次。