第1章. RTP概述1.1. RTP是什么
RTP的全称是实时传输协议。该协议旨在为IP网络上的语音、图像、传真等需要实时传输的多媒体数据提供端到端的实时传输服务。RTP在互联网上为端到端的实时传输提供了时间信息和流同步功能,然而,它并不确保服务质量,服务质量则由RTCP来负责提供。
1.2. RTP的应用环境
实时传输协议(RTP)适用于在单播或组播网络环境中传输实时数据,其常见应用场景包括以下几点。
第二章:深入解析RTP,2.1节:RTP的协议结构,2.1.1节:探讨传输层的组成部分。
实时传输协议,简称RTP,正如其名,旨在实现数据的实时传输,因此被视为传输层的一个组成部分。图1展示了流媒体应用中一种典型的协议架构。
图 1 流媒体体系结构
观察图表可知,RTP位于传输层,且其构建于UDP协议之上。与UDP协议相似,RTP同样具备特定的封装格式,以实现其实时传输功能。RTP主要负责为端到端实时传输提供时间信息和流同步,然而,它并不确保服务质量。至于服务质量,则由RTCP负责提供。这些特性,在第4章中有所阐述。
2.1.2. 应用层的一部分
许多人将RTP视为应用层的一个组成部分,这一观点主要基于应用开发者的视角。在操作系统中,TCP/IP等协议栈为我们提供了最普遍使用的服务,而RTP的具体实现则需要开发者自行完成。鉴于此,从开发者的角度来看,RTP的实现与应用层协议的实现并无二致,因此我们可以将RTP视为一种应用层协议。
在进行RTP数据传输的过程中,发送方必须先将数据打包成RTP格式,而在接收端,必须将数据从RTP包中解包提取。
2.2. RTP的封装
协议的封装旨在满足其功能需求。根据先前提出的功能需求,我们可以推断出RTP封装中理应包含同步源与时戳等字段。然而,完整的封装结构究竟如何?请参照图2进行观察。
图 2 RTP的头部格式
版本号(V):2比特,用来标志使用的RTP版本。
填充位置(P)仅占用1比特,一旦该位被激活,那么RTP数据包的结尾便会加入额外的填充字节。
在扩展位(X)占据1比特的情况下,若该位被激活,那么在RTP固定头部之后,将紧接着出现一个扩展头部。
中国证监会计数器(CC)为4位,其后紧随固定头部,记录着CSRC的数量。
标记位(M)仅占用1比特,其具体含义由配置文档(Profile)负责说明。
载荷类型(PT):7比特,标识了RTP载荷的类型。
该序列号由16位组成,发送方在每次发送完一个RTP数据包后,都会将此域的数值递增1,而接收方则可通过此域来识别数据包的缺失并进行相应的恢复。此序列号的起始值是随机设定的。
时间戳为32比特,标志着该数据包首字节被采集的具体时间点。每当会话启动,时间戳便被设定为一个初始数值。即便在无信号传输的情况下,时间戳的数值亦需随时间的推移持续递增。毕竟,时间在不停地流逝。时间戳在消除波动和确保同步方面扮演着至关重要的角色。
同步源标识符,即SSRC,它是一个32位的标识符,用于指代RTP包流的来源。在单一RTP会话中,不得存在两个相同的SSRC值。这一标识符的选取是随机的,而RFC1889标准推荐使用MD5算法进行随机化处理。
贡献源列表(CSRC List)中包含0至15项,每项由32比特构成,其功能是标识出对RTP混合器生成的新包有所贡献的所有RTP包的来源。这些混合器会将具有贡献性的SSRC标识符添加至列表中。列表中详尽列出了所有SSRC标识符,确保接收端能够准确识别对话双方的身份。
领取音视频开发资料包:音视频流媒体高级开发
FFmpegWebRTCRTMPRTSPHLSRTP播放器
企鹅群994289133领取资料
企鹅群994289133领取资料
2.3. RTCP的封装
为了确保RTP的服务质量,RTCP必须提供相应的保障,故此,以下将详细阐述RTCP的相关内容。
RTCP的核心作用包括:对服务质量进行监控和提供反馈、实现媒体间的同步,以及对多播组成员进行识别。在RTP会话进行过程中,各参与者会定期发送RTCP数据包。这些RTCP数据包内含有诸如已发送数据包数量、丢失数据包数量等统计数据,使得参与者能够依据这些信息灵活调整传输速度,甚至调整数据负载的类型。RTP与RTCP协同运作,能够通过高效反馈和极低成本,实现传输效率的优化,因此非常适合于网络中实时数据的传输。
图1显示,RTCP同样是通过UDP进行传输的,然而它所封装的仅仅是控制信息,因此其数据包长度较短,这就使得多个RTCP分组能够被封装进一个UDP数据包中。RTCP具体包括以下五种分组类型。
表 1 RTCP的5种分组类型
这五种分组封装的方式基本相似,接下来我将专门介绍SR类型,至于其他类型的封装方法,请查阅RFC3550文档。
发送端通过发送SR(Sender Report)分组,能够以多播的形式向所有接收端传达发送状态。该分组的核心信息包括:对应RTP流的SSRC标识,RTP流中最新分组的时戳及NTP时间,RTP流中的分组总数,以及RTP流中的字节数量。SR分组的封装方式如图3所示。
图 3 RTCP头部的格式
版本(V):同RTP包头域。
填充(P):同RTP包头域。
接收报告计数器(RC)为5比特,它代表SR包中接收报告块的个数,这个数目有可能为零。
包类型(PT):8比特,SR包是200。
长度范围为16位,这部分用于记录SR包的总长度,以32位为单位,并减去1。
同步源标识符(SSRC)是用于标识SR包发送者的同步源,其与RTP包中对应的SSRC标识符相同。
网络时间协议(NTP)SR数据包传输时的确凿时间点。该协议旨在实现不同RTP媒体流的同步。
RTP时间戳与NTP时间戳相对应,它们在单位上保持一致,并且均拥有相同的随机起始值,均位于RTP数据包之中。
发送者数据包统计:在启动发送数据包至生成该同步复位(SR)包的期间,发送者所传输的RTP数据包累计数量。每当源同步码(SSRC)发生变更,该计数区域将被重置为零。
发送者的八位计数:自发送者开始传输数据包至生成该SR包的期间,所传输的净负荷数据的总字节数量,此数值不包含任何头部信息及填充内容。每当发送者变更其SSRC标识时,该计数区域需归零。
同步源n的SSRC标识符所对应的是本报告块中所收录的、由该源端接收而来的数据包的相关统计数据。
丢失率(Fraction Lost):这一指标反映了自上一个同步源编号为n(SSRC_n)的SR或RR数据包发出之后,同步源n所发送的RTP数据包在传输过程中出现的丢失情况。
累计的包丢失数量包括:自接收SSRC_n起始的包开始,至发送SR为止,以及从SSRC_n发送的RTP数据包中丢失的总计。
所接收到的序列号最高的扩展序列,源自于SSRC_n所传来的RTP数据包中的最大序列值。
抖动接收(Interarrival Jitter):对RTP数据包接收时刻的统计波动性进行估算
上一次SR时间戳,即LSR:系指从SSRC_n接收到的最新SR数据包中提取的NTP时间戳的中间32位数字。若尚未接收到任何SR数据包,该字段将归零处理。
自上次SR事件发生至今的延迟时间(简称DLSR):自上次从SSRC_n接收SR数据包以来,至本报告发送时所经历的整个时间间隔。
2.4. RTP的会话过程
应用程序在创建RTP会话之际,会选定一对目标传输地址。这些地址由网络地址和两个端口构成,其中一端口用于传输RTP数据包,另一端口则用于RTCP数据包,确保RTP/RTCP数据得以准确发送。RTP数据被发送至偶数编号的UDP端口,与之相对应的控制信号RTCP数据则被发送至紧邻的奇数编号UDP端口(即偶数端口加一),二者共同形成一组UDP端口。RTP数据的传输流程是这样的,而接收流程则是其相反过程。
RTP协议负责接收来自上层的流媒体信息码流,例如H.263,并将其封装成RTP数据包;同时,RTCP接收来自上层的控制信息,并将其封装成RTCP控制包。
RTP会将数据包发送至UDP端口对的偶数端口;而RTCP则会将控制信息发送至UDP端口对的接收端口。
第3章. 相关的协议3.1. 实时流协议RTSP
实时流协议,即RTSP(Real-Time Streaming Protocol),是由IETF所提出的,而与其相对应的RFC文档编号为RFC2362。
图 1 展示了 RTSP,这是一个位于应用层的协议,属于 TCP/IP 网络体系结构的一部分。该协议采用客户机/服务器模式进行运作,它属于多媒体播放控制协议范畴。其主要功能是让用户在观看流媒体内容时,能够如同操作本地影碟机一般,实现对播放流的暂停、继续、快进和快退等操作。
3.2. 资源预定协议RSVP
RSVP,即资源预定协议,是由IETF所提出的一项协议,与之相对应的RFC文档编号为2208。
图1显示,RSVP协议位于IP层之上、传输层之下,属于网络控制范畴。它通过在路由器中预留部分带宽,从而在一定程度上保障了流媒体传输的服务质量。例如,在网络视频会议工具vic等试验性系统中,已经整合了RSVP技术。
第4章. 常见的疑问4.1. 怎样重组乱序的数据包
可以根据RTP包的序列号来排序。
4.2. 怎样获得数据包的时序
可以根据RTP包的时间戳来获得数据包的时序。
4.3. 声音和图像怎么同步
依据声音和图像数据流之间的相对时间关系,即RTP数据包的时间戳,以及它们的绝对时间点,即RTCP数据包中的信息,我们能够确保声音与图像的同步播放。
4.4. 接收缓冲和播放缓冲的作用
正如1.3.1节所说明,接收缓冲区负责对顺序混乱的数据包进行排列;而播放缓冲区则旨在消除播放过程中的不稳定现象,确保实现同步的播放效果。
第5章. 实现方案
表 2 协议分析要求
表2列出了协议分析的具体需求。显而易见,要提取RTP音频包中的音频数据相当简便,只需移除RTP包的头部信息即可。然而,若想成功播放解码后的音频流,我们必须了解其编码方式,而这可以通过RTP包头的有效载荷类型字段(PT)来获取。
本网站每日更新互联网创业教程,一年会员只需98,全站资源免费下载点击查看会员权益