RTP定议
RTP(RealTimeTransportProtocol )实时传输协议的缩写定义了用于通过Internet传输音频和视频的标准数据包格式。它在RFC1889中定义。它由音频视频传输工作组开发,并于1996年首次发布。RTP广泛用于涉及流媒体的通信和娱乐系统,例如电话,视频电话会议应用程序,电视服务和基于Web的一键通功能。RTP的历史:
该协议由四名成员组成的互联网工程任务组(IETF)开发:- S.Casner(PacketDesign)
- V.雅各布森(数据包设计)
- H.舒尔茨林(哥伦比亚大学)
- R.Frederick(BlueCoatSystemsInc.)
RTP的应用:
- RTP主要有助于媒体混合,排序和时间戳。
- 互联网协议语音(VoIP)
- 通过互联网进行视频电话会议。
- 互联网音频和视频流。
RTP报头格式:
RTP报文的报头格式图示如下图所示:版本:
此2位字段定义版本号。当前版本为2。
- P–此字段的长度为1位。如果值为1,则表示数据包末尾存在填充,如果值为0,则没有填充。
- X–此字段的长度也是1位。如果此字段的值设置为1,则它表示数据和基本标头之间有一个额外的扩展标头,如果值为0,则没有额外的扩展名。
- 参与者计数–此4位字段指示参与者数。此处,最大可能的贡献者数为15,因为4位字段可以允许数字形式为0到15。
- M–此字段的长度为1位,应用程序将其用作结束标记以指示其数据的结束。
- 负载类型–此字段的长度为7位,用于指示负载类型。我们列出了一些常见类型的有效载荷的应用。
负载类型 | 编码名称 |
---|---|
0 | 微音频 |
1 | 1016 |
2 | G721音频 |
3 | GSM音频 |
5-6 | DV14音频 |
7 | 液晶屏音频 |
8 | PCMAAudio |
9 | G722音频 |
10-11 | L16音频 |
14 | MPEG音频 |
15 | G728音频 |
26 | 运动JPEG |
31 | H.216 |
32 | MPEG1视频 |
33 | MPEG2视频 |
例如,如果我们使用“1”作为编码名称为1016的有效负载类型,则意味着它将对媒体流使用FS-1016语音编码。
如果我们使用编码名称为H.261的“31”有效载荷类型,则意味着它将使用ITU-T视频压缩标准。同样,每个有效负载类型的数量都表示用于音频/视频流的特定编码类型。
- 序列号–此字段的长度为16位。它用于为RTP数据包提供序列号。它有助于排序。第一个数据包的序列号被赋予一个随机数,然后每个下一个数据包的序列号递增1。此字段主要有助于检查丢失的数据包和顺序不匹配。
- 时间戳–此字段的长度为32位。它用于查找不同RTP数据包的时间之间的关系。第一个数据包的时间戳是随机给出的,然后是下一个数据包的时间戳,由上一个时间戳和生成当前数据包的第一个字节所花费的时间之和给出。1时钟周期的值因应用而异。
- 同步源标识符–这是一个32位字段,用于标识和定义源。此源标识符的值是由源本身选择的随机数。这主要有助于解决当两个源以相同的序列编号开始时出现的冲突。
- 参与者标识符–这也是一个32位字段,用于在会话中存在多个源的源标识中。混合器源使用同步源标识符,其他剩余源(最多15个)使用参与者标识符。
增补噪声
当对无话部分进行抑制后,会造成听者一方听到的声音有损失,增补噪声就是对它的补偿。完全的沉默无声会使听者以为链路出问题了。在接受方产生的·些背景噪声可以产生这样的假像:固定的噪声流一直仍然在网络中传输着。实际上,增补噪声根本没有通过网络进行发送。
把增补噪声加进分组语音系统的处理过程被称为“增补噪声的产生"(简称CNG)。有许多产生方法。最简单的办法是在接收者处放一片芯片,芯片用低电流产生一些随机“白噪声”。问题是如果增补噪声的变化不是很复杂的话,玲听的人很快就能发现了它的人为规律。
更精确的CNG方法是抽样并保存无话抑制中在谈话开始时没有消除的短暂停顿。然后,在无话抑制期间,CNG进行多种变化,产生出实际的背景声音。这种方法产生的增补噪声非常自然。(声音学工程师录制了儿分钟的空房间里的声音,并把它填充到语音的断续处以进行剪辑实现上述同样的目的)。
IP协议是网络层协议。在互联网协议组中,IP层和应用服务层之间是传输层(通常被称为TCP层)。这一层使用的主要协议是面向连接的“传输控制协议”(简称TCP)和无连接的“用户数据报协议”(简称UDP)。
TCP的面向连接性使得VoIP首先想到选择TCP,但是TCP要经常重发IP层因为发现差错而抛弃的部分,这一点会造成实时的VoIP方式的谈话的失败。UDP看来在这一点上比较适合VoIP,因为UDP不要求重发,但另一方面,UDP是无连接的,这使得VoIP连接在IP网上标识路由变得十分困难。
幸运的是,在IP分组内还有许多协议可以使用。事实上在IP分组内部大约可容入256种协议(在IP分组头中有一个8比特的域指示协议类型)。大约200种已经有了定义,其中有一种是“实时传输协议”(简称RTP)。RTP和TCP除了有一点不同外,其余的十分相似。当差错造成分组丢失时,RTP不要求进行重传。这使得RTP很适合用于包括VoIP在内的各种类型的实时应用。
表4-2概括了VoIP中存在的问题及其解决方法。这仅仅是对VoIP问题的一些解释,还不能成为标准。我们还需要探讨制定出解决VoIP问题的标准,才能保证VoIP产品可以交互操作。
表4-2 VOIP中的问题和解决方法
RTP的优点和用途是什么?
顾名思义,RTP的设计目标是实时流式传输与媒体相关的数据。RTP包括抖动补偿、数据包丢失检测以及无序数据包传递的机制,这些问题在通过IP传输的UDP(用户数据报协议)传输中尤为常见。由于RTP允许通过IP多播并行数据传输到多个目标端点,因此它是音频和视频IP网络传输的主要标准。RTP体系结构设计中引用的相关配置文件和有效负载格式的机制是在应用程序层(而不是操作系统层)上实现的。VoIP等需要采用实时多媒体数据流的应用程序通常需要及时交付数据,并且对数据包丢失的容忍度各不相同。例如,VoIP应用程序中的音频数据包丢失可能会导致丢失一些毫秒的音频数据。这种损失可以通过误差补偿算法进行适当处理,使其对调用方来说微不足道且难以察觉。TCP(传输控制协议)也针对RTP使用进行了标准化,尽管由于其错误控制机制可能导致延迟并影响及时的数据包传递,因此它通常未在应用程序中使用。因此,大多数RTP应用程序通常基于UDP实现。