网络流媒体(三)————RTP流

1. 简介

        实时传输协议(RTP)为数据提供了具有实时特征的端对端传送服务,如在组播或单播网络服务下的交互式视频音频或模拟数据。应用程序通常在 UDP 上运行 RTP 以便使用其多路结点和校验服务;这两种协议都提供了传输层协议的功能。但是 RTP 可以与其它适合的底层网络或传输协议一起使用。如果底层网络提供组播方式,那么 RTP 可以使用该组播表传输数据到多个目的地。
        RTP 本身并没有提供按时发送机制或其它服务质量(QoS)保证,它依赖于底层服务去实现这一过程。 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

固定为0x24

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类型。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值