实时视频系统中的媒体传输,绝大多数都会采用RTP(实时传输协议)标准。H.264视频作为当前应用最广泛的视频编码标准,其传输协议也会首选RTP标准。在设计实现H.264的实时传输时,H.264协议基于RTP的打包和解包定义于IETF标准-RFC6184,RTC系统需要遵循这个标准来设计打包和解包处理模块。在通信理论中,这个过程可以被认为是基于传输的信道编码。本篇技术文章带你了解H.264在RTP中的基本格式和技术实践。
#01
基本格式
使用RTP对H.264打包和解包需要遵循IETF标准RFC6184, 我们先来了解一下H.264在RTP中的封包协议。
01
H.264的RTP报头
图1 RTP报头
对于H.264的RTP负载格式而言,RTP报头的格式和RFC 3550里面的定义是一致的,不过有一些字段需要特别说明一下。
标记位 (M):1位
对RTP时间戳所对应访问单元的最后一个数据包来设置标记位,符合视频中M位的正常使用格式,以允许有效的播放缓冲处理。解码器可以使用这个位作为访问单元最后一个数据包的早期指示,但是不能完全依赖这个属性。
负载类型 (PT):7位
没有特别指定的负载类型,需要通过协商来确定。
序列号(SN):16位
根据RFC 3550设置和使用。对于单NAL单元和非交错打包模式,序列号用于确定NAL单元的解码顺序。
时间戳:32位
RTP时间戳设置为视频内容的采样时间戳。必须使用90 kHz时钟频率。
02