RTP协议

1 RTP协议背景及概述

流(Streaming)是近年在Internet上出现的新概念,其定义非常广泛,主要是指通过网络传输多媒体数据的技术总称。

流式传输分为两种

  • 顺序流式传输  (Progressive Streaming)
  • 实时流式传输  (Real time Streaming)

实时流式传输是实时传送,特别适合现场事件。“实时”是指在一个应用中数据的交付必须与数据的产生保持精确的时间关系,这需要相应的协议支持,这样RTP和RTCP就相应的出现了。

RTP全名:Real-time Transport Protocol(实时传输协议)。它是IETF提出的一个标准,对应的RFC文档为RFC3550。

  • RFC3550定义了RTP,也定义了配套的实时传输控制协议RTCP(Real-time Transport Control Protocol)。
  • RTP用来为IP网上的语音、图像、传真等多种需要实时传输的多媒体数据提供端到端的实时传输服务。
  • RTP为Internet上端到端的实时传输提供时间信息和流同步,但并不保证服务质量,服务质量由RTCP来提供。

详细的协议参考:

链接:https://pan.baidu.com/s/10fMJI8AQFZAqvUChBpVD_g 
提取码:rd1v 

 

RTP协议原理:较简单,负责对流媒体数据进行封包并实现媒体流的实时传输,即它按照RPT数据包格式来封装流媒体数据,并利用与它绑定的协议进行数据包的传输。

RTCP原理:向会话中的所有成员周期性地发送控制包来实现的,应用程序通过接收这些控制数据包,从中获取会话参与者的相关资料,以及网络状况、分组丢失概率等反馈信息,从而能够对服务质量进行控制或者对网络状况进行诊断。

RTP在端口号1025到65535之间选择一个未使用的偶数UDP端口号,而在同一次会话中的RTCP则使用下一个基数UDP端口号

默认端口号:    RTP:5004    RTCP:5005

从下图可看出RTP被划分在传输层,它建立在UDP上。同UDP协议一样,为了实现其实时传输功能,RTP也有固定的封装形式。RTP用来为端到端的实时传输提供时间信息和流同步,但并不保证服务质量。服务质量由RTCP来提供。

2 RTP协议封装

多媒体处理流程

从开发者的角度看,RTP 应当是应用层的一部分。

RTP实现者在发送RTP数据时,需先将数据封装成RTP包,而在接收到RTP数据包,需要将数据从RTP包中提取出来。

下图为RTP部格式:

*****************************************************

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

2)        P:填充标志,占1位,如果P=1,则在该报文的尾部填充一个或多个额外的八位组,它们不是有效载荷的一部分。

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

4)        CC:CSRC计数器,占4位,指示CSRC 标识符的个数(作用信源CSRC计数器)

5)        M: 标记,占1位,不同的有效载荷有不同的含义,对于视频,标记一帧的结束;对于音频,标记会话的开始。(对于分组中的重要事件可用该位标识)

6)        PT: 有效荷载类型,占7位,用于说明RTP报文中有效载荷的类型,如GSM音频、JPEM图像等,在流媒体中大部分是用来区分音频流和视频流的,这样便于客户端进行解析。

详细参考:https://blog.csdn.net/qq_40732350/article/details/88374707

7)        序列号:占16位,用于标识发送者所发送的RTP报文的序列号,每发送一个报文,序列号增1。这个字段当下层的承载协议用UDP的时候,网络状况不好的时候可以用来检查丢包。同时出现网络抖动的情况可以用来对数据进行重新排序,序列号的初始值是随机的,同时音频包和视频包的sequence是分别记数的。

8)        时戳(Timestamp):占32位,必须使用90 kHz 时钟频率。时戳反映了该RTP报文的第一个八位组的采样时刻。接收者使用时戳来计算延迟和延迟抖动,并进行同步控制。

9)        同步信源(SSRC)标识符:占32位,用于标识同步信源。该标识符是随机选择的,参加同一视频会议的两个同步信源不能有相同的SSRC。

10)    特约信源(CSRC)标识符:每个CSRC标识符占32位,可以有0~15个。每个CSRC标识了包含在该RTP报文有效载荷中的所有特约信源。

注:基本的RTP说明并不定义任何头扩展本身,如果遇到X=1,需要特殊处理

 

取一段码流如下:

 

80 e0 00 1e 00 00 d2 f0 00 00 00 00 41 9b 6b 49 €?....??....A?kI

e1 0f 26 53 02 1a ff06 59 97 1d d2 2e 8c 50 01 ?.&S....Y?.?.?P.

cc 13 ec 52 77 4e e50e 7b fd 16 11 66 27 7c b4 ?.?RwN?.{?..f'|?

f6 e1 29 d5 d6 a4 ef3e 12 d8 fd 6c 97 51 e7 e9 ??)????>.??l?Q??

cfc7 5e c8 a9 51 f6 82 65 d6 48 5a 86 b0 e0 8c ??^??Q??e?HZ????

其中,

80               是V_P_X_CC

e0               是M_PT

00 1e          是SequenceNum

00 00 d2 f0 是Timestamp

00 00 00 00是SSRC

把前两字节换成二进制如下

1000 0000 1110 0000

按顺序解释如下:

10               是V;

0                 是P;

0                 是X;

0000           是CC;

1                 是M;

110 0000    是PT;

*****************************************************

有效载荷类型:7位,指出后面的RTP数据属于何种格式的应用。应用层可根据次类型进行处理。

音频:μ律PCM(0),GMS(3)             A律PCM(8),G.722(9),G728(1)

视频:活动JPEG(26)、H.261(31)、                MPEG1(32)、MPEG2(33)、H.264(96)等

RTCP的主要功能

  • 提供数据传输质量的反馈
  • 为每个RTP源传输一个固定的识别符CNAME
  • 知晓成员数目,控制包的发送速率
  • 传输最小连接控制信息,如参加者标识

RTCP也是用UDP来传送的,但RTCP封装的仅仅是一些控制信息,因而分组很短,所以可以将多个RTCP分组封装在一个UDP包中。RTCP有如下五种分组类型:

 

发送端报告分组SR(Sender Report)用来使发送端以多播方式向所有接收端报告发送情况。SR分组的主要内容有:相应的RTP流的SSRC,RTP流中最新产生的RTP分组的时间戳和NTP,RTP流包含的分组数,RTP流包含的字节数。

3 RTP协议关键技术

  • 时间戳
  • 时延
  • 抖动
  • 丢包率
  • 会话和流两级分用

****************************************************************************************************

时间戳(1)

时间戳字段是RTP首部中说明数据包时间的同步信息,是数据能以正确的时间顺序恢复的关键。

时间戳的值给出了分组中数据的第一个字节的采样时间,要求发送方时间戳的时钟是连续、单调增长的,即使在没有数据输入或发送数据时也是如此。

在静默时,发送方不必发送数据,保持时间戳的增长,在接收端,由于接收到的数据分组的序号没有丢失,就知道没有发生数据丢失,而且只要比较前后分组的时间戳的差异,就可以确定输出的时间间隔。

时间戳(2)

RTCP 中的 SR (Sender Report发送端报告)控制分组包含NTP(网络时间)时间戳和RTP时间戳可用于同步音视频媒体流。

RTP时间戳是依据邻近的RTP数据包中的时间戳结合NTP时间差得到的。

公式表达为:RTP_tsi = tsi + NTPi - NTP'i

RTP_tsi表示RTCP中的RTP时间戳;tsi表示邻近的RTP包中的时间戳;NTPi表示RTCP的网络时间戳;NTP'i表示邻近的RTP包对应的网络时间戳;下标表示第i个源。

时间戳(3)

因此,i和源j之间的相对时差可以表示为:

RTP_tsi - RTP_tsj = ( tsi + NTPi - NTP'i ) - ( tsj + NTPj - NTP'j )


(RTP_tsi – tsi)-( RTP_tsj - tsj) = (NTPi –NTP'i) - (NTPj—NTP'j) 

由于NTP同步,差值可以反映出两个源的相对时差。因为要同步不同来源的媒体流,必须使得同步他们的绝对时间基准,而NTP时间戳正是这样的绝对时间基准。

应用RTP时间戳来保证同一来源的媒体流同步。

****************************************************************************************************

时延

影响时延的因素有多个方面:

  • 编解码
  • 网络
  • 防抖动缓冲
  • 报文队列

其中有些是固定时延,如编解码网络速率等;有些是变化的,如防抖动缓冲等,固定的时延可以通过改变编解码方式和提高网络速率来改变,而变化时延通常采用提高转发效率来提高。

****************************************************************************************************

抖动

到达时刻抖动J的定义:一对包中接收机相对发射机的时间跨度差值的平均偏差。

该值等于两个包相对传输时间的差值,相对传输时间是指包的RTP时间标志和到达时刻接收机时钟,以同一单位的差值.若Si是包i的RTP时间标志,Ri是包i以RTP时间标志单位的到达时刻值。对于两个包i和j,D可以表达为

 D(i,j) = (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计算

****************************************************************************************************

丢包率

丢包率是通过计算接收包数量和发送包数量的比率得到。

流程    

发送方:每间隔一定时间读取每个发送通道的发包数量和数据长度,组成一个此通道的RTCP报文发送给接收方,同时将发送数据包计数清零。    

接收方:收到RTCP包后,读取接收通道接收到的包数量,并计算出丢包率,通过一个RTCP接收汇报包发送给发送方,同时对接收数据包计数清零。

****************************************************************************************************

会话和流两级分化

一个RTP会话包括传给某个指定目的地对的所有通信量,发送方可能包括多个。而从同一个同步源发出的RTP分组序列称为流(Stream),一个RTP会话可能包含多个RTP流。

一个RTP分组在服务器端发送出去的时候总是要指定属于哪个会话和流,在接收时也需要进行两级分用,即会话分用和流分用。

只有当RTP使用同步源标识和分组类型把同一个流中的分组组合起来,才能够使用序列号和时间戳对分组进行排序和正确回放。

 

RTP协议运用

RTP协议应用方案——单播

在客户端与媒体服务器之间建立一个单独的数据通道,从一台服务器送出的每个数据包只能传送给一个客户端,这种传送方式称为单播。

  • 优点:便于控制和管理  
  • 缺点:每个用户必须分别对媒体服务器发送单 独的查询,而媒体服务器必须向每个用户发送所申请的数据包拷贝。这种巨大冗余造成服务器负担沉重,响应需要很长时间

RTP协议应用方案——广播

 广播指的是用户被动地接收流。

在广播过程中,数据包的单独一个拷贝将发送给网络上的所有用户,客户端接收流,但不能控制流; 广播方式中资料包的单独一个拷贝将发送给网络上的所有用户, 而不管用户是否需要,会非常浪费网络带宽。    

  • 优点:简单    
  • 缺点:浪费网络带宽

组播技术构建的网络,允许路由器一次将数据包复制到多个通道上。采用组播方式,媒体服务器只需要发送一个信息包,所有发出请求的客户端即可同时收到连续数据流而无延时。

组播吸收了单播和广播两种发送方式的长处,     克服了上述两种发送方式的弱点。

  • 优点:减少网络上传输的信息包的总量;网络利用效率大大提高,成本大为下降。  
  • 缺点:当不同的用户同时点播同一个节目时,由于点播总有先后顺序,后点播的用户依照网络中同时点播此节目的其它用户的播放进度,这就造成当前用户极有可能从节目的中间开始看起,很难做到个性化。

RTP协议安全

RTP提供的安全性包括保密性、认证与完整性、密钥管理。

保密性

客户端都支持缺省的加密算法 ,RTCP包头随机附加前缀加以迷惑,CBC模式具有随机接入功能,实现加密的同时还能保证丢失的包不 被他自己或下一个包解密。

认证与完整性

RTP标准协议对任何认证过程都不加特别说明,除非在密钥已知时采用内部认证。仅在通过其他方法认证RTP流媒体时,命令行认证机制才启动工作。

密钥管理

由SIP,SAP和SDP协议完成,这些协议有强大的认证功能和密钥管理功能。

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值