实时传输协议---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协议帮助我们解析完成:
在这里插入图片描述

  • 0
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
rtp-util.h是一个C++头文件,用于实现实时传输协议(RTP)的相关功能。RTP是一种用于通过网络传输音频、视频和其他实时数据的协议。 该头文件包含了一些实用的函数和数据结构,用于处理RTP数据包的创建、解析和管理。以下是该头文件的一些主要特点和功能: 1. 数据结构:rtp-util.h定义了几个数据结构,如RTPPacket结构体,用于存储和管理RTP数据包的相关信息,比如序列号、时间戳、有效载荷类型等。 2. 函数功能: - createRTPPacket函数:用于创建一个RTP数据包,设定其相关信息,并将有效载荷数据存储到数据包中。 - parseRTPPacket函数:用于解析收到的RTP数据包,提取出相关的信息,比如序列号、时间戳和有效载荷数据等。 - updateRTPPacketTimestamp函数:用于更新RTP数据包的时间戳,以确保在传输过程中保持数据的一致性和同步性。 - calculateRTPPacketSize函数:用于计算RTP数据包的大小,包括头部和有效载荷的长度。 3. 错误处理:rtp-util.h还定义了一些错误码,用于处理在RTP数据包处理过程中可能出现的错误情况,比如包头格式错误、分配内存失败等。 该头文件的设计旨在提供一些在RTP数据传输过程中常用的功能和工具,方便开发人员在实现实时音视频传输应用时使用。通过使用rtp-util.h,开发人员可以更方便地处理RTP数据包的创建、解析和管理,以确保数据传输的有效性和准确性。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值