音视频流媒体————RTP流

本文详细介绍了RTP(实时传输协议)的原理和应用,包括其用于有序传输的序列号机制,以及RTP包的结构,如tpkt头部、RTP头部、扩展信息和媒体流载荷。特别地,讨论了NALU的拆分、H264和H265媒体流载荷的处理方式,以及如何处理NALU长度超过MTU的情况。此外,还提到了基本信息和媒体流描述信息在RTP包中的作用,以及加密信息的相关内容。
摘要由CSDN通过智能技术生成

1. 简介

    实时传输协议(RTP)为数据提供了具有实时特征的端对端传送服务, RTP 实行有序传送, RTP 中的序列号允许接收方重组发送方的包序列,同时序列号也能用于决定适当的包位置,例如:在视频解码中,就不需要顺序解码。

2. RTP码流格式

    以NALU为单位打包视频流,若NALU的长度大于MTU(一次网传能够传输的最大字节数),则这个NALU需要拆分为多个RTP包。

    如表1所示为RTP包的格式,RTP包由tpkt头部、rtp头部、扩展信息以及媒体流载荷组成,tpkt头部不是标准RTP协议中定义的,rtp头部是必须有的,扩展信息和媒体流载荷是可选的,可以只有扩展信息或媒体流载荷中的一个。

表1 RTP包格式
tpkt头部rtp头部扩展信息媒体流载荷

    如表2所示为基本信息RTP包,基本信息属于RTP包格式中的扩展信息。I帧的第一个NALU RTP包前需要加上基本信息RTP包。基本信息包括:公司标记、当前时间(年月日时分秒毫秒)、加密类型、相机标记、视频流类型、音频流类型、视频帧号。

表2 基本信息RTP包
tpkt头部rtp头部基本信息

    如表3所示为媒体流描述信息RTP包,媒体流描述信息属于RTP包格式中的扩展信息。I帧的第一个NALU RTP包前需要加媒体流描述信息RTP包。媒体流描述信息包括:编码版本号、编码年月日、原始图片宽高、是否隔行扫描、b帧数目、是否为SVC码流、是否使用e帧、最大参考帧数目、水印类型,显示时是否需要反隔行、JPEG的Q值、以1/90000s为单位的两帧间时间间隔,是否使用固定帧率、裁剪起始x坐标、裁剪起始y坐标、裁剪宽度、裁剪高度、音频帧长度、音频声道数、音频采样率、音频比特率。

表3 媒体流描述信息RTP包
tpkt头部rtp头部媒体流描述信息

    如表4所示为媒体流RTP包,若媒体流加密则需有加密信息,否则无需加密信息。加密信息包括:打包方式、加密算法、加密轮数、秘钥长度、加密类型。

表4 媒体流RTP包
tpkt头部rtp头部加密信息媒体流载荷

3. Tpkt头部

    下表为DSP产生的RTP包格式,其中tpkt头部不是RTP协议中的,网传时需要去掉tpkt头部。

Tpkt头部(4字节)
序号含义
0固定为24
1帧类型(I帧/P帧/音频帧),是否为最后一个NALU
2,3 RTP包的长度,包括tpkt头部长度
Rtp头部(12字节)
4 RTP版本,是否包含填充信息,是否包含扩展信息,CSRC计数器
5 M标记,负载类型(音频/视频/私有数据)
6,7 负载序列号,表示该负载类型的第几个RTP包
8,9,10,11 时间戳
12,13,14,15 Ssrc,同步源标识
扩展信息
16,17 扩展信息类型
18,19扩展信息长度
20扩展信息
媒体载荷

4. RTP头部

在这里插入图片描述
V:RTP协议的版本号,占2位,当前协议版本号为2
P:填充标志,占1位,如果P=1,则在该报文的尾部填充一个或多个额外的八位组,它们不是有效载荷的一部分。
X:扩展标志,占1位,如果X=1,则在RTP报头后跟有一个扩展信息。
CC:CSRC计数器,占4位,指示CSRC 标识符的个数。
M: 标记,占1位,不同的有效载荷有不同的含义,对于视频,标记一帧的结束;对于音频,标记会话的开始。
PT(payload type): 有效荷载类型,占7位,用于说明RTP报文中有效载荷的类型,如GSM音频、JPEM图像等,在流媒体中大部分是用来区分音频流和视频流的,这样便于客户端进行解析。
序列号:占16位,用于标识发送者所发送的RTP报文的序列号,每发送一个报文,序列号增1。这个字段当下层的承载协议用UDP的时候,网络状况不好的时候可以用来检查丢包。当出现网络抖动的情况可以用来对数据进行重新排序。序列号的初始值是随机的,同时音频包和视频包的sequence 是分别记数的。
时戳(Timestamp):占32位,必须使用90 kHz 时钟频率(程序中的90000)。时戳反映了该RTP报文的第一个八位组的采样时刻。接收者使用时戳来计算延迟和延迟抖动,并进行同步控制。可以根据RTP包的时间戳来获得数据包的时序。
同步信源(SSRC)标识符:占32位,用于标识同步信源。同步信源是指产生媒体流的信源,它通过RTP报头中的一个32位数字SSRC标识符来标识,而不依赖于网络地址,接收者将根据SSRC标识符来区分不同的信源,进行RTP报文的分组。该标识符是随机选择的,参加同一视频会议的两个同步信源不能有相同的SSRC。
特约信源(CSRC)标识符:每个CSRC标识符占32位,可以有0~15个CSRC。每个CSRC标识了包含在该RTP报文有效载荷中的所有特约信源。

5. 媒体流载荷

5.1 H264媒体流载荷

    若媒体流为未加密的H264码流,且NALU长度小于MTU(一次网传能够传输的最大字节数),则媒体流载荷为:H264码流。
    若媒体流为未加密的H264码流,且NALU长度大于MTU(一次网传能够传输的最大字节数),则一个NALU需分为多个RTP包,媒体流载荷为:FU indicator+FU header+去除第一个字节后的H264码流的一部分。

5.1.1 FU indicator

    F:禁止位,编码中默认为0,当网络识别此单元中存在比特错误时可将其设置为1,以便接受方丢弃该单元。
    NRI:优先级,取值范围为0~3,值越高表示当前NAL越重要,需要优先受到保护。
    Type:NALU是NAL Header中的Type。
在这里插入图片描述

5.1.2 header

    S:当设置成1,指示分片NAL单元的开始。当跟随的FU荷载不是分片NAL单元荷载的开始,开始位设为0。
    E:当设置成1,指示分片NAL单元的结束,即荷载的最后字节也是分片NAL单元的最后一个字节。当跟随的 FU荷载不是分片NAL单元的最后分片,结束位设置为0。
    R:保留位必须设置为0,接收者必须忽略该位。
    Type:NALU是NAL Header中的Type。
在这里插入图片描述

5.2 H265媒体载荷

    若媒体流为未加密的H265,且NALU长度小于MTU(一次网传能够传输的最大字节数),无论是否加密,媒体载荷为:H265码流。
    若媒体流为未加密的H265,且NALU长度大于MTU(一次网传能够传输的最大字节数),媒体载荷为:PayloadHdr+FU header+去除前两个字节后的H265码流的一部分。

5.2.1 PayloadHdr

    PayloadHdr共两个字节,PayloadHdr的第一个字节中间6位固定为49,第一个字节的最高位和最低位为NALU第一个字节的最高位和最低位。PayloadHdr的第二个字节为NALU的第二个字节。

5.2.2 FU header

    S:当设置成1,指示分片NAL单元的开始。当跟随的FU荷载不是分片NAL单元荷载的开始,开始位设为0。
    E:当设置成1,指示分片NAL单元的结束,即荷载的最后字节也是分片NAL单元的最后一个字节。当跟随的 FU荷载不是分片NAL单元的最后分片,结束位设置为0。
     Type:为NALU第一个字节的第1~6位,为NALU类型。
在这里插入图片描述

参考文献

1、https://blog.csdn.net/yangguoyu8023/article/details/97613726

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值