gb28181之rtp负载之h264

版权声明:heibao111728 https://blog.csdn.net/heibao111728/article/details/84999594

我们知道国标中支持的媒体流格式不止一种,其中最常见的就数PS和h264(ES流中的其中一种)了,PS流我们之前的博文中已经分享过了,本篇博文我们来一起聊聊国标中媒体流的负载为h264的细节。

我们知道h264为了方便网络传输,把原始数据分装成了多个NALU,而NALU包大小是不固定的,因此有时候一个rtp包中可以负载多个NALU,有时候一个rtp包中只负载一个NALU,有时候多个rtp包中包含的是某一个NALU的切片。

对于一个rtp包中包含多个NALU,又可以分为四种情况:
Single-Time Aggregation Packet type A (STAP-A);
Single-TimeAggregation Packet type B (STAP-B);
Multi-Time Aggregation Packet(MTAP) with 16-bit offset (MTAP16);
and Multi-Time Aggregation Packet(MTAP) with 24-bit offset (MTAP24);

对于多个rtp包中包含一个NALU的分片可以分为两种情况:
Fragmentation unit A(FU-A);
Fragmentation unit B(FU-B);

以上描述更详细参见rfc3984:

对上图做一点补充:在h264的官方文档中,指定了NAL Unit type 为"0~23"的情况,在此文档,也就是rfc3984对其做了扩展,指定了NAL Unit type为"24~29"的情况。也就说,只要NAL Unit type的值为"0~23", 使用的负载加载方式都是一个rtp包包含一个NALU数据包。

上图抓包中,我们可以看出rtp的mark标记位为"1",说明这是一帧的结束,我们再看负载前两个字节为7c41,其中7c的后5位的十进制值为28,说明采用FU-A分片方式,之后的41也说明该帧是视频帧的最后一包数据。

猜你喜欢

转载自blog.csdn.net/heibao111728/article/details/84999594