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

H.264 中的 NAL 技术相关推荐

  1. H.264中的NAL技术

    NAL技术 1.NAL概述 NAL全称Network Abstract Layer, 即网络抽象层. 在H.264/AVC视频编码标准中,整个系统框架被分为了两个层面:视频编码层面(VCL)和网络抽象 ...

  2. 视频基础知识:浅谈视频会议中H.264编码标准的技术发展

    浅谈视频会议中H.264编码标准的技术发展 浅谈视频会议中H.264编码标准的技术发展 数字视频技术广泛应用于通信.计算机.广播电视等领域,带来了会议电视.可视电话及数字电视.媒体存储等一系列应用,促 ...

  3. 【H.264/AVC视频编解码技术详解】八、 熵编码算法(2):H.264中的熵编码基本方法、指数哥伦布编码

    <H.264/AVC视频编解码技术详解>视频教程已经在"CSDN学院"上线,视频中详述了H.264的背景.标准协议和实现,并通过一个实战工程的形式对H.264的标准进行 ...

  4. H.264中的SPamp;amp;SI帧技术简述

    H.264中的SP&SI帧技术简述 1           应用背景(详细可见文献[1,2])        流间切换.随机接入.错误恢复.快进快退.拼接 2           SP/SI帧 ...

  5. 八、H.264中的熵编码基本方法、指数哥伦布编码

    GitHub代码地址:点击这里 本节视频免费 1. H.264中的熵编码基本方法 在成功从NAL Unit中获取到语法元素的码流之后,接下来就是对语法元素的码流进行解析.根据我们在前面的博文中所讲述的 ...

  6. 八、 熵编码算法(2):H.264中的熵编码基本方法、指数哥伦布编码

    由于种种问题,哈夫曼编码并没有作为一种实际应用的技术使用到实际编码算法中:本节看下H.264中实际使用的熵编码算法:指数哥伦布编码 在H264官方标准文档的第九章由说明 一.H.264中熵编码基本方法 ...

  7. H.264中IDR帧和I帧区别

    IDR(Instantaneous Decoding Refresh)--即时解码刷新.       I和IDR帧都是使用帧内预测的.它们都是同一个东西而已,在编码和解码中为了方便,要首个I帧和其他I ...

  8. H.264 中很有用的一些概念

    Q:PSNR 峰值信噪比 是根据它来取qp是不是? A:不是 和QP没有直接关系但是QP的选择会影响到PSNR Q: 如果不用率失真最优化,为什么选择SATD+delta×r(mv,mode)作为模式 ...

  9. H.264中的一些易混淆概念

    Q:PSNR 峰值信噪比 Q:是根据它来取qp是不是? A:不是, 和QP没有直接关系, 但是QP的选择会影响到PSNR Q: 如果不用率失真最优化, 为什么选择SATD+delta×r(mv,mod ...

最新文章

  1. 计算指数c语言2的n次方,计算2的N次方........有什么错吗?
  2. 如何解决数据倾斜问题?
  3. 贪吃蛇程序不要白不要,一个赞就够了
  4. 计算机课教学要求,《计算机基础课程教学基本要求》研制报告
  5. 温故js系列(4)-运算符详解
  6. ofo 回应甩卖办公桌;华为与袁隆平合作;罗永浩 1 亿股权遭冻结 | 极客头条
  7. HDU 1861 游船出租(模拟)
  8. 网易云音乐ncm格式转换mp3格式工具
  9. 数学建模论文格式规范(国赛)
  10. 微信小程序中的wx.navigateTo跳转路径写法
  11. (二)使用selenium爬取拉钩招聘网信息并存入csv文件
  12. Meta 开源早期 AI 翻译工具支持 200 种语言
  13. 前端 Leader 是如何带领团队和建设团队文化的
  14. zapya_快牙(com.dewmobile.kuaiya) - 5.9.7 (CN) - 应用 - 酷安网
  15. 零基础零经验自学Python,到精通Python要多久啊?
  16. 解决运行roscore时出现报错问题
  17. 14个小方法巧除鞋臭脚臭
  18. 恒大帝景220平文华东路
  19. Python学习之旅(核心编程基础篇003运算符)
  20. 求幂级数的收敛域及和函数手写笔记

热门文章

  1. 向日葵远程控制软件:死磕鼠标交互,远程桌面操作精确
  2. 数据结构(廿六) -- C语言版 -- 图 - 图的遍历 -- 邻接表 - 深度/广度优先遍历/搜索(DFS、BFS)
  3. 如何自助搭建企业门户网站(一)
  4. 农村小学计算机教育论文,小学计算机的教育论文
  5. 一般线性模型和线性回归模型_您的线性回归模型指南
  6. vue项目设置全局字体样式font-family
  7. 工程优化matlab,MATLAB第12章工程优化设计实例.doc
  8. 金仓数据库KingbaseES之null和“ ”的区别
  9. unity3d-学习笔记10-卡牌游戏制作(实现点击卡片消失,并将后面的卡片填充的功能)
  10. 为什么选择快速开发?