因为现在主流的IP网络部署使用SIP协议比较多,因此RTP和SIP应用相对比较紧密。很多时候,我们花费大量时间讨论SIP协议和传输等问题,没有太多关注RTP流的处理。这里,我们单纯脱离具体应用场景,和读者讨论RTP的一些基本概念。
RTP提供了与信号协议和应用无关的通用媒体传输层。在我们更详细地了解RTP及其系统设计之前,我们应该了解RTP发送方和接收方的基本工作流程。以下是两个IETF和ITU的规范,帮助我们进一步了解RTP。
RTP发送方的处理流程
发送方负责捕获和转换视听数据以进行传输,以及生成RTP数据包。它还可以通过响应接收器反馈来调整传输的媒体流来参与纠错和拥塞控制。发送过程如图所示:
未压缩的媒体数据(音频或视频)被捕获到缓冲区中,并从中生成压缩帧。根据所使用的压缩算法,可以以多种方式对帧进行编码,并且编码帧可以取决于较早和较晚的数据。
压缩帧被加载到RTP数据包中,准备发送。如果帧很大,它们可能会被分成几个RTP数据包;如果它们很小,多个帧可能会捆绑到一个RTP数据包中。根据所使用的纠错方案,信道编码器可用于生成纠错数据包或在传输之前对数据包重新排序。
在发送RTP数据包之后,与这些数据包相对应的缓冲媒体流数据最终被释放。发送方不能丢弃这些数据,这些数据可能是用来进行数据纠错的或编码过程中需要这些数据。此要求可能意味着发送方必须在发送相应的数据包后将数据缓冲一段时间,具体取决于所使用的编解码器和纠错方案。
发送方负责为其生成的媒体流生成定期状态报告,包括唇音同步所需的报告。它还接收来自其他参与方的接收质量反馈,并可以使用该信息来调整其传输。
RTP 接收方处理流程
接收方负责从网络收集RTP数据包、纠正任何丢失数据、恢复定时、解压缩的媒体流,并且将结果呈现给用户。它还发送接收质量反馈,允许发送者调整到接收者的传输,并且它维护会话参与者的数据库。显示了一个RTP接收方的接收过程;
接收过程的第一步是从网络收集数据包,验证它们的正确性,并将它们插入到特定的发送方的输入队列中。从输入队列收集到的数据包并将其传递到可选的通道编码例程以纠正丢失补偿。在通道编码器之后,数据包被插入到指定到源地址的播放缓冲区中。播放缓冲区按时间戳进行排序,将数据包插入缓冲区的过程中会纠正传输过程中引起的排序。数据包保留在播放缓冲区中,直到接收到完整的帧,并且它们会被额外缓冲以消除由网络引起的数据包间时序的变化。计算要添加的延迟量是RTP实现设计中最关键的步骤之一。每个数据包都标有相应帧所需的播放时间。
达到播放时间后,数据包将被分组以形成完整的帧,并且修复任何损坏的或丢失的帧。在进行必要的修复之后,将对帧进行解码(根据所使用的编解码器,可能需要在修复丢失的帧之前对媒体进行解码)。此时,发送方和接收方的时钟速率可能存在明显差异。这种差异表现为RTP媒体时钟值和播放时钟的一个漂移。接收方必须补偿这种时钟偏差,以避免播放中出现空白间隙。
最后,将媒体数据播放给用户。根据媒体格式和输出设备,可以单独播放每个流,例如,呈现多个视频流,每个视频流都在自己的窗口中,或者可能需要将所有源的媒体混合到单个流中进行播放,例如,组合多个音频源以通过单组扬声器进行播放。
从这个简短的概述中可以明显看出,发送方的处理流程相对比较简单,但是RTP接收方的操作很复杂,从流程来讲,接收方的流程比发送方的操作更复杂。在传输过程中存在很多的不可预测的因素会影响接收方的数据接收。这种额外的复杂性主要是由于IP网络的存在很多动态的可变因素:大部分的复杂性因素来自于补偿数据包丢失处理,以及恢复受抖动影响的数据流的时序。
作者:james.zhu
来源:SIP实验室
原文:https://mp.weixin.qq.com/s/ito6d_ehnlZldjqX-v6ySw
版权声明:本文内容转自互联网,本文观点仅代表作者本人。本站仅提供信息存储空间服务,所有权归原作者所有。如发现本站有涉嫌抄袭侵权/违法违规的内容, 请发送邮件至1393616908@qq.com 举报,一经查实,本站将立刻删除。