rtp包抖动计算公式_RTP协议

0.引言

阅读本文前,可以阅读前面的文章,能够帮助你更好的理解本篇文章的内容,文章列表内容如下:

详细解析RTSP框架和数据包分析(1)

手把手搭建RTSP流媒体服务器

关于RTP协议,推荐2篇SPEC协议文档,如下:

3-RFC3550(英⽂)-RTP A Transport Protocol for Real-Time Applications.pdf

3-RFC3550(中⽂)-RTP协议中⽂版.pdf

中文文档界面如下:

bf3b936665132fec3d1f61caea38e9d1.png
9e9cef4c21986f6051bfa032abd76a0f.png
6c5d32f1be1ee5a099d56c9e03d3142e.png

英文文档界面如下:

f2eaf490006c4bfa793f9ba81f8bd426.png
b13aef48f7142539a8695ebd05fee36d.png

如果有朋友需要,可以关注,然后私信我

1.RTP协议简述

实时传输协议(Real-time Transport Protocol或简写RTP)是一个网络传输协议,它是由IETF的多媒体传输工作小组1996年在RFC 1889中公布的。

国际电信联盟ITU-T也发布了自己的RTP文档,作为H.225.0,但是后来当IETF发布了关于它的稳定的标准RFC后就被取消了。它作为因特网标准在RFC 3550(该文档的旧版本是RFC 1889)有详细说明。RFC 3551(STD 65,旧版本是RFC 1890)详细描述了使用最小控制的音频和视频会议。

RTP协议详细说明了在互联网上传递音频和视频的标准数据包格式。它一开始被设计为一个多播协议,但后来被用在很多单播应用中。RTP协议常用于流媒体系统(配合RTSP协议),视频会议和一键通(Push to Talk)系统(配合H.323或SIP),使它成为IP电话产业的技术基础。RTP协议和RTP控制协议RTCP一起使用,而且它是创建在UDP协议上的,也可以基于TCP协议推流。

实时传输协议(RTP)为数据提供了具有实时特征的端对端传送服务,如在组播或单播网络服务下的交互式视频音频或模拟数据。应用程序通常在 UDP 上运行 RTP 以便使用其多路结点和校验服务;这两种协议都提供了传输层协议的功能。但是 RTP 可以与其它适合的底层网络或传输协议一起使用。如果底层网络提供组播方式,那么 RTP 可以使用该组播表传输数据到多个目的地。

RTP 本身并没有提供按时发送机制或其它服务质量(QoS)保证,它依赖于底层服务去实现这一过程。 RTP 并不保证传送或防止无序传送,也不确定底层网络的可靠性。 RTP 实行有序传送, RTP 中的序列号允许接收方重组发送方的包序列,同时序列号也能用于决定适当的包位置,例如:在视频解码中,就不需要顺序解码。

RTP标准定义了两个子协议,RTP和RTCP。数据传输协议RTP,用于实时传输数据。该协议提供的信息包括:时间戳(用于同步)、序列号(用于丢包和重排序检测)、以及负载格式(用于说明数据的编码格式)。控制协议RTCP,用于QoS反馈和同步媒体流。相对于RTP来说,RTCP所占的带宽非常小,通常只有5%。

RTP 使用偶数端口号接收发送数据,相应的RTCP则使用相邻的下一位奇数端口号。

RTP提供抖动补偿和数据无序到达检测的机制。由于IP网络的传输特性,数据的无序到达是很常见的。 RTP允许数据通过IP组播的方式传送到多个目的地。RTP被认为是在IP网络中传输音频和视频的基本标准。RTP通常配合模板和负载格式使用。

对于实时多媒体流应用,及时传送信息是首要目标,为达到目标可以忍受部分丢包。例如,在音频应用中的一个丢包,可能导致损失音频数据中的一秒内容,这个很容易通过合适的隐藏算法掩盖过去,从而不被人注意。由于TCP更注重可靠性而不是及时性,在RTP应用中很少使用取而代之,大部分RTP实施是基于UDP的

2.RTP协议格式

RTP报⽂由头部+扩展区域+数据区域(有效负荷)组成,格式的重要部分如下所示:

(1)V:RTP协议的版本号,占2位,当前协议版本号为2。

(2)P:填充标志,占1位,如果P=1,则在该报⽂的尾部填充⼀个或多个额外的⼋位组,它们不是有效载荷的⼀部分。如有些加密算法,需要固定长度的数据。就会使用P去填充。一般都是0。

(3)X:扩展标志,占1位,如果X=1,则在RTP报头后跟有⼀个扩展报头。

(4)CSRC计数器,占4位,指示CSRC 标识符的个数。计算有多少个源的标志。

(5)M: 标记,占1位,不同的有效载荷有不同的含义,对于视频,标记⼀帧的结束。对于⾳频,标记帧的开始。音频和视频是不同的含义。

(6)PT: 有效载荷类型,占7位,⽤于说明RTP报⽂中有效载荷的类型,如GSM⾳频、JPEM图像等。

(7)序列号:占16位,⽤于标识发送者所发送的RTP报⽂的序列号,每发送一个报文,序列号增1,接收者通过序列号来检测报文丢失情况,重新排序报文,恢复数据。可用于在UDP的传输下,解决乱序的问题。可以使用缓存去重新排序,再去处理数据。这时就需要设计缓存队列,支持排序。如队列有3个包才开始去读取。不同的sequence,对应不同的RTP通道。

(8)时间戳:占32位,时戳反映了该RTP报⽂的第⼀个⼋位组的采样时刻接收者使⽤时戳来计算延迟和延迟抖动,并进⾏同步控制。如果timestamp = 1000换成秒就是1秒。如果单位是1/90000,换成秒1/90000*1000=0.0111秒。时间刻度,关键看看编码怎么设置。

(9)同步信源(SSRC)标识符号:占32位,⽤于标识同步信源。该标识符是随机选择的,参加同⼀视频会议的两个同步信源不能有相同的SSRC。指产⽣媒体流的信源,例如⻨克⻛、摄像机、RTP混合器等。它通过RTP报头中的⼀个32位数字SSRC标识符来标识,⽽不依赖于⽹络地址,接收者将根据SSRC标识符来区分不同的信源,进行RTP报文分组,这个是非常重要的。

(10)特约信源(CSRC)标识符:每个CSRC标识符占32位,可以有0~15个。每个CSRC标识了包含在该RTP报⽂有效载荷中的所有特约信源。特约信源把混合器接收到⼀个或多个同步信源的RTP报⽂后,经过混合处理产⽣⼀个新的组合RTP报⽂,并把混合器作为组合RTP报⽂的SSRC(同步信源),⽽将原来所有的SSRC(同步信源)都作为CSRC(特约信源)传送给接收者,使接收者知道组合报⽂的各个SSRC。

RTP报头格式如下图:

98eb99a02d0b4452427678177eea35e3.png

若⼀个RTP包流的源,对由RTP混频器⽣成的组合流起了作⽤,则它就是⼀个作⽤源。对特定包的⽣成起作⽤的源,其SSRC标识符组成的列表,被混频器插⼊到包的RTP报头中。这个列表叫做CSR表。如下图所示:

2d4a3ffe0496ff5a15ed8da6d6ff9a86.png

例如,有三个信号源各发出⼀路rtp流,RTP1携带的SSRC是SSRC1,RTP2携带的SSRC是SSRC2,RTP3携带SSRC3,这三路RTP流到达混合器时,混合器会将这三路流混合成⼀路流发出去,它会把这三路流的SSRC记录下来,形成⼀个列表,叫CSRC表,在发送的混合RTP流中,SSRC域填充的字段是混合器本身的SSRC4,⽽CSRC字段则会根据SSRC4包的负载的源来填⼊。

3.RTP报文的发送和接收过程

在发送端,上层应⽤程序以分组形式将编码后的媒体数据传给RTP通信模块,作为RTP报⽂的有效载荷,RTP通信模块将根据上层应⽤提供的参数在有效载荷前添加RTP报头,形成RTP报⽂,通过Socket接⼝选择UDP或TCP协议发送出去。

在接收端,RTP通信模块通过Socket接⼝接收到RTP报⽂后,将RTP报头分离出来作相应处理,再将RTP报⽂的有效载荷作为数据分组传递给上层应⽤。

如果当前的RTP包的负载是来⾃SSRC1的,那么在当前RTP包的CSRC字段填⼊SSRC1。这样接收者就可以根据CSRC来区分不同的信源

⼀般的,混合的RTP流中,每隔⼀段时间,就会有⼀个RTP报⽂包含了完整的CSRC表。例如在发送混合流时的第⼀个RTP包,它的CSRC域把CSRC表都填⼊,此时该包的负载可能是⽆意义或者并不是媒体流。此后的RTP报⽂中则根据负载的来源来填⼊CSRC域,这样在接收端才能够解析

4.总结

本篇文章讲解了,RTP协议的基本原理和协议分析,如果需要更详细的文档,可以关注我,然后私信我,希望能够帮助到大家。

欢迎关注,转发,点赞,收藏,分享,评论区讨论。

后期关于项目的知识,会在微信公众号上更新,如果想要学习项目,可以关注微信公众号“记录世界 from antonio”

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值