分享

RTP

 爱睡觉的猫 2016-01-10
"RTP-实时协议":关键词rtp- 实时 协议

rtp,实时协议被用来为应用程序如音频,视频等的实时数据的传输提供端到端(end to end)的网络传输功能。传输的模型可以是单点传送或是多点传送。数据传输被一个姐妹协议——实时控制协议(rtcp)来监控,后者允许在一个大的多点传送网络上监视数据传送,并且提供最小限度的控制和识别功能。

rtp是被ietf在rfc1889中提出来的。顺带提及,rtp已经被接受为实时多媒体传送的通用标准。itu-t跟ietf都在各自的系统中将这一协议标准化。

1.1 为何需要rtp?

tcp不能支持像交互视频,会议等的实时服务,这一原因是由于tcp只是一个“慢”协议,需要三次握手。就此在ip层上udp是一个比tcp更好的选择。但是udp是本质上是一个不可靠协议,不支持在包丢情况下的重传机制。诚然,udp有一些特性,比如多路复用跟校验和服务,这些都是对实时服务很有利的。为了消除udp的缺点,rtp是作为应用层而被提出来的。

rtp提供的各种服务包括有效负载识别,序列编号,时间戳和投递监听。rtp能够序列化包,当这些包在收端不是按顺序到达的时。序列号也能被用来识别包丢失。时间戳被用于媒体有效的播放。到达的数据一直被rtcp监听,以通知rtp层来校正其编码和传输的参数。例如,如果rtcp层检测到包丢失,它会通知rtp层减缓发送速率。

尽管rtp有助于实时媒体的有效的播放 ,但是要注意的是rtp自身并不提供任何机制来确保及时传递或提供其他服务质量(qos)的保证,而是依靠低层服务来完成这些。同样,rtp也不保证投递或防止无序投递。rtp被设计出来主要是为了满足有多个参加者的多媒体会议的需要。rtp也同样适合于象持续数据的储存,分布式应用 交互仿真,主动标记以及应用程序的控制和测量。

1.2 rtp特性一览

rtp提供有效负荷类型识别,乱序重排和利用时间戳的媒体有效播放。

rtcp监控服务质量,也提供在一个当前进行的会话中传送关于参加者的信息作用。

rtp对于下层协议是独立的,它能够工作在像tcp/ip,atm,帧时延等类型的网络上。

如果被下层网络支持,rtp支持利用多路技术的对于多点的数据传输。

rtp序列号也能被用来确定包的合适位置。例如在视频解码,包无需按序解码。 

2.0 技术概览

2.1 rtp

rtp头具有如下的格式。开始的12个八位字节在每一个rtp包中都会出现;而csrc标识符列表只在通过混合器的包中出现。这些域含有以下意义:

 

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 | sequence number |

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

| timestamp |

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

| synchronization source (ssrc) identifier | 

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

| contributing source (csrc) identifiers |

| .... |

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

 

version (v) (版本号): 这个域长度为2比特,标出了rtp的最近版本。当前的版本为2.0

padding (p) (填充): 这个域长度为1比特,如果p被

此文来自: 马开东博客 转载请注明出处 网址: http://www.

置位,包在结尾处包含有一个或多个附加的填充字节,这些填充字节不是有效负荷的一部分。填充是一些需要固定块大小的加密算法所要求的,或是为了在低层pdu搬运rtp包。

extension (x): 这个域长度为1比特,如果被置位,固定的头后面紧跟了一个头的扩展。

csrc count (cc): 这个域长度为4比特。这个域表示了跟在固定头后面的csrc标识符的数目。 如前所述,这个域只有在通过一个混合器才有非零值。

marker bit (m): 这个域长度为1比特,如果m被置位,表示一些重要的项目如帧边界在包中被标记。例如,如果包中有几个比特的当前帧,连同前一帧,那么rtp的这一位就被置位。

payload type (pt) (有效负荷类型): 这个域长度为7比特,pt指示的是有rtp包中的有效负荷的类型。rtp音频视频简介(avp)包含了一个默认的有效负荷类型码到有效负荷格式的映射。附加的有效负荷类型可以向iana注册。

sequence number(序列号): 这个域长度为16个比特,每送一个rtp包数目就增加一,初始值被设为一个随机数。接收方不仅可以用这个序列号检测包丢失,也可以重组包序列。

time stamp(时间戳): 这个域长度为32个比特,时间戳反映了rtp数据包的头一个字节的采样时刻。 采样时刻必须是由一个单调线性增加的时钟产生,这样做是为了接收方的同步和抖动计算。初始值必须为随机数,这是为了避免对原码的攻击。例如,如果rtp源使用了一个编码器, 缓冲20ms的音频数据,那么rtp时间戳必须每个包增加160,无论包是被传递了还是被丢失了。

ssrc: 这个域长度为32比特,这个域表示了正在为会话产生rtp包的源。这个标识符是随机选中的,目的是为了避免同一个rtp会话中两个源有相同的标识符。

csrc list: 这个列表标识了在这个包中对有效负荷起作用的所有源。标识符的最大数目限定为15,这是由cc域所限定的(全零在cc域中是被禁止的)。如果有超过15个的分配源,只有前15个被标识。

仔细观察rtp可以注意到它不更低层的协议比如pdu一样,包含一个“定边界”的域。 这一原因是rtp的有效负荷是跟ip的有效负荷相同,因此也就不需要了。

如果相同的用户在一个会话中使用多个媒体,比如说视频跟音频,每个媒体都会打开单独的rtp会话。因此在rtp层面上不存在多路复用。多路复用由更低层来决定。但是rtcp保留了一个叫cname的标识符,这个标识符对于由同一用户初始化的媒体是相同的。因此cname是在rtp层面上能识别从一个用户产生的不同媒体的唯一的标识符。

从上可以看出,rtp头的开销是相当大的,为了减少这一开销,rtp头压缩被提了出来。

2.2 rtcp

rtp接收者利用rtcp报告包,提供接收质量的反馈。这个报告包可以是发送者类型也

此文来自: 马开东博客 转载请注明出处 网址: http://www.

可以是接收者类型。如果接收者主动参加到一个会话中,那么它就送sr(sender report),否则它将送rr(receiver report)。除sr跟rr包以外,rtcp还有其他的包类型:sdes (source description), bye 和app(application defined),rtcp和sdes包的有效负荷类型值在表1和表2中相应给出。

packet type                                               payload type

sr (发送者报告)                                                    200

rr (接收者报告)                                                    201

sdes (源描述)                                                       202

bye                                                                203

app (应用程序定义)                                               204

 

rtcp sdes item                                            value

end (sdes列表结尾)                                           0

cname (规范名)                                                   1

name (用户名)                                                     2

email                                                                   3

phone                                                                  4

loc                                                                      5

tool                                                                   6

note                                                                   7

priv                                                                     8

 

2.2.1 rtcp sr 

rtcp发送者报告包在图2中显示,各域含有下列意义。

version (v): 与rtp中同

padding (p): 与rtp中同

reception report count (rc): 该域长度为5比特,rc表示接收报告块的大小。

packet type (pt): 该域长度8比特,sr报告包的包类型是200。

ssrc: 与rtp中同

ntp time stamp: 该域长度64比特,ntp表示了该包发送时的最大执行时间 (wall clock time),这个信息是被用来测量链路网络(round-trip)传播延时。

rtp time stamp: 与rtp中同,这些时间戳被用于媒体内/外的同步。

sender’s packet count: 该域长度为32比特,该域指示了从会话开始直到本sr被发送过程中发送者发出的rtp数据包的数目。

sender’s octet count: 该域长度为32比特,表示从会话开始发送的有效负荷字节的总数目。

ssrc_n (源标识符): 该域长度为32比特,用于标识在此次阻塞报告中信息源

fraction lost: 自前一个sr或rr包发送后丢失的rtp包的份额。

cumulative number of packet lost: 该域长度为24比特,表示从会话开始,丢失的rtp数据包的总数目。

extended highest sequence number received: 该域长度32比特,低16位包含从ssrc_n收到的rtp包中的最高序列号,最高16位用于扩展相应的序列号的循环周期的计数值。

值得注意的是在同一会话的不同接收这来说,如果他们的起始时间差别比较大的话,接收者将产生不同的扩展位。

inter-arrival jitter: 该域长度32比特,表示了以时间戳为单位估计的rtp数据包到达时间的统计方差,用无符号的整数表示。

last sr timestamp: 该域长度32比特,它把收到的ntp时间戳64位中间的32位作为最近的rtcp sr的一部分。

delay since last sr (dlsr): 该域长度为32比特,延迟的单位是65536分之1秒,表示最近的sr包和本rr包之间的时间。  

2.2.2 rtcp rr 

rr包的结构与sr包相同,只是它没有包含发送者相关项(ntp, rtp 时间戳, 包数目跟字节数目)。 只有被动参加者才发rr包。

2.2.3 rtcp sdes 

sdes包在图3中给出,不同类型的源描述包如下列出:

cname: 这是规范终端标识符。cname在sdes包中是必须出现的项目,其余的都是可选的。cname可以被接收者用来识别同一个特定用户产生的不同的媒体流。

其他被支持的sdes项是name, email,phone, loc, tool, note 和 priv

涉及到大量的参加者时,在一个会话过程中有可能rtcp的流量超过rtp的流量,这是由于,在时间的任何一个点上,只有一个人在说而其他的人都在听。为了减少rtcp的流量,rtcp的包传输率,作为参加者数目,rtcp包大小,rtcp带宽等的一个函数做动态变化。根据标准,会话带宽的20%分配给rtcp并且rtcp带宽的5%分配给cname。换句话说,每发送五个rtp包才发送一个rtcp的rr跟sr包。对于小型会话(参加者数目比较小),每5秒中会有一个rtcp的传输,每隔15秒钟,一个附加项会被包括在sdes包中。

2.2.4 rtcp bye 

rtcp bye包在rtp会话的结尾被送出,包的结构如图4所示:

2.2.5 rtcp app 

app包是为了新的应用程序和新的特性的实验用途,其结构如图5所示

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| subtype | pt=app=204 | length |

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

| ssrc/csrc |

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

| name (ascii) |

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

| application-dependent data ...

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

3.0 sip中的rtp

ietf已经提议会话初始协议(sip)作为因特网上多媒体调用的建立,修改和终结。rtp/rtcp被媒体用来作为在他们系统中传输的协议。sip的流图结构如图6所示

4.0 h.323中的rtp

itu-t已经提出了h.323,这是另一个著名的多媒体通信系统。rtp/rtcp再次被用作媒体传输。h.323的流图结构在图7中给出。

5.0 结论

rtp是应用层级别的协议,它提供了在单点传送或多传送基础上,适合媒体传输如视频,音频,仿真数据等实时数据的,端到端的网络传输功能。rtp以序列化,有效负载识别和媒体实时播放为目标。数据传输增加了一个控制协议rtcp,这个协议监听了数据传送并且提供了最小限度的控制和识别功能。rtp和rtcp被设计成独立于下层网络传输网络,并且不提供源保留,也不保证实时服务的服务质量(qos)。

rtp 术语表

rtp 有效负载: 在一个rtp包中被传输的数据。例如,音频样本或压缩视频数据。

rtp 媒体类型: rtp 媒体类型是有效负载类型的一个集合,这个集合在单一的rtp会话中被运载。有效负载类型是在音频视频协议(avp)中被定义的【rfc 1890】。

rtp 会话:在一个使用rtp进行通讯的参加者集合中的联络。

synchronizing source(ssrc:rtp包的源,由在rtp头中的一个32位数值ssrc标识符来表示。为了跟网络地址区别开来。

contributing source (csrc):rtp包的一个流的源,这个源是通过一个rtp混合器来产生一个混合的新流。

mixer: 一个媒体间系统,它从一个或多个源发出的rtp包中提取内容,并把它们通过某种方式混合,然后从一个新的rtp包中送出。在此过程中数据格式可能被改变。

translator 一个媒体间系统,它把rtp包向前传送,并不改变它们的synchronizing

搜索此文相关文章:RTP-实时协议此文链接:http://www./%E5%8D%9A%E5%AE%A2%E5%9B%AD%E6%9C%89/17947.shtml转载请注明出处:RTP-实时协议 - 博客园

此文来自: 马开东博客 网址:http://www. 站长QQ 站长QQ420434200,点击确定开始回话! 赞助本站如果您想赞助本站长期发展,可以给站长 马开东 捐款,谢谢您的支持,我们会一如既往的努力,点击确认捐赠

    本站是提供个人知识管理的网络存储空间,所有内容均由用户发布,不代表本站观点。请注意甄别内容中的联系方式、诱导购买等信息,谨防诈骗。如发现有害或侵权内容,请点击一键举报。
    转藏 分享 献花(0

    0条评论

    发表

    请遵守用户 评论公约

    类似文章 更多