实时传输协议---RTP详解

Posted 贺二公子

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了实时传输协议---RTP详解相关的知识,希望对你有一定的参考价值。

原文地址:https://blog.csdn.net/Chiang2018/article/details/122741850


文章目录


一、RTP简介

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

RTP是一种运行在传输层的协议,通常基于 UDP 协议,但也支持 TCP 协议。

RTP数据包由两部分组成,一部分是RTP Header,一部分是RTP Payload,RTP Header占用最少12个字节,最多72个字节;另一部分是RTP Payload,用来封装实际的数据负载,例如h264的裸码流数据。

官方指导文档参考:https://datatracker.ietf.org/doc/html/rfc3551

二、RTP的工作机制

当应用程序提供RTSP协议建立一个RTP会话时,应用程序将确定一对目的传输地址(一个网络地址和两个端口号),其中两个端口号中的偶数端口是分配给RTP进行裸码流数据传输的,奇数端口则是分配给RTCP进行传输控制的。

RTP的发送过程如下:

  1. 从上层接收流媒体信息码流(如H.264),封装成RTP数据包;RTCP从上层接收控制信息,封装成RTCP控制包。
  2. 将RTP 数据包发往UDP端口对中偶数端口;RTCP将RTCP控制包发往UDP端口对中的接收端口。

三、RTP协议解析

RTP分组的首部格式如下图所示,其中前12个字节是必须的:

  • 版本号(V):2比特,用来标志使用的RTP版本。
  • 填充位(P):1比特,如果该位置位,则该RTP包的尾部就包含附加的填充字节。
  • 扩展位(X):1比特,如果该位置位的话,RTP固定头部后面就跟有一个扩展头部。
  • CSRC计数器(CC):4比特,含有固定头部后面跟着的CSRC的数目。
  • 标记位(M):1比特,该位的解释由配置文档(Profile)来承担.
  • 载荷类型(PT):7比特, 表示传输的多媒体类型,常见类型详见https://tools.ietf.org/html/rfc3551
  • 序列号(SN):16比特,发送方在每发送完一个RTP包后就将该值增加1,接收方可以由该值确定包的丢失及恢复包序列。序列号的初始值是随机的。
  • 时间戳:32比特,记录了该包中数据的第一个字节的采样时刻。在一次会话开始时,时间戳初始化成一个初始值,时间戳的数值随时间而不断地增加。时间戳是去除抖动和实现同步不可缺少的。同一个帧的不同分片的时间戳是相同的。这样就省去了起始标志和结束标志。一定要记住,不同帧的时间戳肯定是不一样的。
  • 同步源标识符(SSRC):32比特,同步源就是指RTP包流的来源。在同一个RTP会话中不能有两个相同的SSRC值。该标识符是随机选取的 RFC1889推荐了MD5随机算法,是全局唯一的。
  • 特约信源标识符(CSRC List):0~15项,每项32比特,用来标志对一个RTP混合器产生的新包有贡献的所有RTP包的源。由混合器将这些有贡献的SSRC标识符插入表中。SSRC标识符都被列出来,以便接收端能正确指出交谈双方的身份。

下面是一个RTP的抓包,Wireshark工具已经根据RTP协议帮助我们解析完成:

以上是关于实时传输协议---RTP详解的主要内容,如果未能解决你的问题,请参考以下文章

rtp协议详解/rtcp协议详解

实时传输控制协议---RTCP详解

RTP/RCP协议时啥

流媒体专家rtp和rtcp协议详解I

RTP协议

流媒体传输协议之 RTP (上篇)