RTSP系列三:RTP协议介绍

我的音视频/流媒体开源项目(github)

RTSP系列:

        RTSP系列一:RTSP协议介绍-CSDN博客

        RTSP系列二:RTSP协议鉴权-CSDN博客 

        RTSP系列三:RTP协议介绍-CSDN博客 

        RTSP系列四:RTSP Server/Client实战项目-CSDN博客 

目录

一、基本概念

二、RTP报文格式

三、RTP封装视频

3.1、RTP封装H264

3.1.1、单一封包模式

3.1.2、组合封包模式

3.1.3、​分片封包模式

3.1.4、RTP抓包分析

3.2、RTP封装H265

四、RTP封装音频

4.1、RTP封装AAC

4.2、RTP打包PCMA

五、RTP扩展头部


一、基本概念

        一种数据数据传输协议,RTP 协议实际上是由实时传输协议RTP(Real-time Transport Protocol)和实时传输控制协议RTCP(Real-time Transport Control Protocol)两部分组成。

        RTP 协议基于多播或单播网络为用户提供连续媒体数据的实时传输服务;RTCP 协议是RTP 协议的控制部分,用于实时监控数据传输质量,为系统提供拥塞控制和流控制。 由于TCP 需要较多的开销,故不太适合传输实时数据。在流式传输的实现方案中,一般采用RTSP/TCP 来传输控制信息,而用RTP/UDP 来传输实时声音数据(也可以用RTP/TCP)。RTP也属于应用层协议,与RTSP的关系如下图所示:

RTSP系列三:RTP协议介绍_第1张图片

        RTP传输音视频过程如下:

RTSP系列三:RTP协议介绍_第2张图片

二、RTP报文格式

        RTP报文格式如下:

RTSP系列三:RTP协议介绍_第3张图片

*版本号(V):2比特,用来标志使用的RTP版本。

*填充位(P):1比特,如果该位置位,则该RTP包的尾部就包含附加的填充字节。

*扩展位(X):1比特,如果该位置位的话,RTP固定头部后面就跟有一个扩展头部。

*CSRC计数器(CC):4比特,含有固定头部后面跟着的CSRC的数目。

*标记位(M):1比特,该位的解释由配置文档(Profile)来承担.

*载荷类型(PT):7比特,标识了RTP载荷的类型。

*序列号(SN):16比特,发送方在每发送完一个RTP包后就将该域的值增加1,接收方可以由该域检测包的丢失及恢复包序列。序列号的初始值是随机的。

*时间戳:32比特,记录了该包中数据的第一个字节的采样时刻。在一次会话开始时,时间戳初始化成一个初始值。即使在没有信号发送时,时间戳的数值也要随时间而不断地增加(时间在流逝嘛)。时间戳是去除抖动和实现同步不可缺少的。

*同步源标识符(SSRC):32比特,同步源就是指RTP包流的来源。在同一个RTP会话中不能有两个相同的SSRC值。该标识符是随机选取的 RFC1889推荐了MD5随机算法。

*贡献源列表(CSRC List):0~15项,每项32比特,用来标志对一个RTP混合器产生的新包有贡献的所有RTP包的源。由混合器将这些有贡献的SSRC标识符插入表中。SSRC标识符都被列出来,以便接收端能正确指出交谈双方的身份。

符号 位数 定义 数值
V 2bit 版本号 2
P 1bit 填充位 0
X 1bit 扩展位 0
CC 4bit CSRC数目 0
M 1bit 标志位 当RTP负载是一个完整的NALU时M 位置为 1;当前RTP 数据包为一个NALU 的最后的那个分片时(NALU 的分片在后面讲述),M位置 1。其余情况下M位保持为 0。
PT 7bit 载荷类型  负载类型(音视频负载,类型在SDP中描述)
SeqNum 16bit 序列号 每发一个包加1
Timestamp 32bit 时间戳 单一封包 +采样率,h264为3600; 分片封包第一个加

你可能感兴趣的:(网络,音视频)