H.264 中的 NAL 技术

1.NAL 概述

NAL 全称 Network Abstract Layer,即网络抽象层。在 H.264/AVC 视频编码标准中,整个系统框架被分为 了两个层面:视频编码层面(VCL)和网络抽象层面(NAL)。其中,前者负责有效表示视频数据的内容, 而后者则负责格式化数据并提供头信息,以保证数据适合各种信道和存储介质上的传输。 现实中的传输系统是多样化的,其可靠性,服务质量,封装方式等特征各不相同,NAL 这一概念的提出 提供了一个视频编码器和传输系统的友好接口,使得编码后的视频数据能够有效地在各种不同的网络环境 中传输。

2.NAL 单元

NAL 单元是 NAL 的基本语法结构,它包含一个字节的头信息和一系列来自 VCL 的称为原始字节序列载荷 (RBSP)的字节流。头信息中包含着一个可否丢弃的指示标记,标识着该 NAL 单元的丢弃能否引起错误 扩散,一般,如果 NAL 单元中的信息不用于构建参考图像,则认为可以将其丢弃;最后包含的是 NAL 单 元的类型信息,暗示着其内含有效载荷的内容。 送到解码器端的 NAL 单元必须遵守严格的顺序,如果应 用程序接收到的 NAL 单元处于乱序,则必须提供一种恢复其正确顺序的方法。

3.NAL 实现编解码器与传输网络的结合

NAL 提供了一个编解码器与传输网络的通用接口,而对于不同的网络环境,具体的实现方案是不同的。 对于基于流的传输系统如 H.320、MPEG 等,需要按照解码顺序组织 NAL 单元,并为每个 NAL 单元增加 若干比特字节对齐的前缀以形成字节流;对于 RTP/UDP/IP 系统,则可以直接将编码器输出的 NAL 单元 作为 RTP 的有效载荷;而对于同时提供多个逻辑信道的传输系统,甚至可以根据重要性将不同类型的 NAL 单元在不同服务质量的信道中传输。

4.结论

为了实现编解码器良好的网络适应性,需要做两方面的工作:第一、在 Codec 中将 NAL 这一技术完整而 有效的实现;第二、在遵循 H.264/AVC NAL 规范的前提下设计针对不同网络的最佳传输方案。如果实现 了以上两个目标,所实现的就不仅仅是一种视频编解码技术,而是一套适用范围很广的多媒体传输方案, 该方案适用于如视频会议,数据存储,电视广播,流媒体,无线通信,远程监控等多种领域。

NALU 类型

标识 NAL 单元中的 RBSP 数据类型,其中,nal_unit_type 为 1, 2, 3, 4, 5 的 NAL 单元称为 VCL 的 NAL
单元,其他类型的 NAL 单元为非 VCL 的 NAL 单元。
• 0:未规定
• 1:非IDR图像中不采用数据划分的片段
• 2:非IDR图像中A类数据划分片段
• 3:非IDR图像中B类数据划分片段
• 4:非IDR图像中C类数据划分片段
• 5:IDR图像的片段
• 6:补充增强信息(SEI)
• 7:序列参数集(SPS)
• 8:图像参数集(PPS)
• 9:分割符
• 10:序列结束符
• 11:流结束符
• 12:填充数据
• 13:序列参数集扩展
• 14:带前缀的NAL单元
• 15:子序列参数集
• 16–18:保留
• 19:不采用数据划分的辅助编码图像片段
• 20:编码片段扩展
• 21–23:保留
• 24–31:未规定

NAL 在多媒体传输、存储系统中的应用

NAL 的头占用了一个字节,按照比特自高至低排列可以表示如下:
0AABBBBB
其中,AA 用于表示该 NAL 是否可以丢弃(有无被其后的 NAL 参考),00b 表示没有参考作用,可丢弃,如 B slice、SEI 等,非零——包括 01b、10b、11b——表示该 NAL 不可丢弃,如 SPS、PPS、I Slice、P Slice 等。 常用的 NAL 头的取值如:

0x67: SPS
0x68: PPS
0x65: IDR
0x61: non-IDR Slice 0x01: B Slice
0x06: SEI
0x09: AU Delimiter

由于 NAL 的语法中没有给出长度信息,实际的传输、存储系统需要增加额外的头实现各个 NAL 单元的定界。 其中,AVI 文件和 MPEG TS 广播流采取的是字节流的语法格式,即在 NAL 单元之前增加 0x00000001 的同步 码,则从 AVI 文件或 MPEG TS PES 包中读出的一个 H.264 视频帧以下面的形式存在:

00 00 00 01 06 ... 00 00 00 01 67 ... 00 00 00 01 68 ... 00 00 00 01 65 ... 
SEI 信息            SPS            PPS             IDR Slice

而对于 MP4 文件,NAL 单元之前没有同步码,却有若干字节的长度码,来表示 NAL 单元的长度,这个长度 码所占用的字节数由 MP4 文件头给出;此外,从 MP4 读出来的视频帧不包含 PPS 和 SPS,这些信息位于 MP4 的文件头中,解析器必须在打开文件的时候就获取它们。从 MP4 文件读出的一个 H.264 帧往往是下面的形式 (假设长度码为 2 字节):

    00 19 06 [... 25 字节...] 24 aa 65 [... 9386 字节...]
     SEI 信息                    IDR Slice
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值