H264/AVC NAL单元和解码

news/2024/8/26 16:56:44

在264中,NAL是以NALU(NAL unit)为单元来支持编码数据在基于包交换技术网络中的传输的;它定义了符合传输层或存储介质需求的数据格式,同时提供头信息,从而提供了视频编码与外部世界的接口。网络层和传输层的RTP封装只针对基于NALU的本地NAL接口,且每个NALU都只包含整数个字节。


NALU结构

一个NALU定义了可用于基于包和基于比特流系统的基本格式,区别这两种格式的方法在于每个比特流传输层都有一个起始代码。在NAL解码器接口,它假定按传输顺序传递NALU,同时,在NALU的头部设置标识接收正确的、丢失的或错误的标识位,如果在有效载荷中包含位错误,则通过标识位来标志。

一个NALU结构上是一个包含一定语法元素的可变长字节字符串,例如NALU可以携带一个编码片,A、B、C 型数据分割或一个序列或图像参数集。每个NALU由一个字节的头和一个包含可变长编码符号的字符串组成。头部含三个定长比特区,如图8.3 所示:NALU类型(T),NAL-REFERENCE-IDC(R)和隐藏比特位(F)。NALU类型用5bit来代表NALU的32种中不同类型特征,类型1-12是H.264的定义的,类型24-31是用于H.264以外的,RTP负荷规范使这其中的一些值来定义包聚合和分裂,其他值为H.264保留。R比特用于在重构过程中标记一个NALU的重要性。用于参考的参数集和片,即用于预测未来的帧,被认为是重要的或高优先级的,因为它们的丢失会使解码后续编码的片变得困难。非引用片被认为对解码器很重要,因为它们的丢失不会影响任何进一步的解码。该信息可选择性地用于在传输期间对某些NALU进行优先级排序最后是隐藏比特位,在H.264编码中默认置为0,当网络识别到单元中存在比特错误时,可将其置为1。F位主要用于适应不同种类的网络环境(比如有线无线相结合的环境)。例如对于从无线到有线的网关,一边是无线的非IP协议环境,一边是有线网络的无比特错误的环境。假设一个NALU到达无线那边时,校验和检测失败,网关可以选择从NAL流中去掉这个NALU,也可以把已知被破坏的NALU传给接收端。在这种情况下,智能的解码器将尝试重构这个NALU(已知它可能包含比特错误)。而非智能的解码器将简单的抛弃这个NALU。

编码片被描述为视频编码层(VCL) NAL单元。编码序列从一个瞬时解码器刷新(IDR)访问单元开始,该单元由一个或多个IDR片组成,每个IDR片是一个Intra编码片。后面是默认的片类型,即非IDR编码的片,和/或data partitioned片。data partitioned(数据分割)片在独立的NAL单元中携带编码视频数据的不同组成部分,这在容易出错的传输情况下可能是有用的。非VCL NAL单元包括参数集、补充增强信息参数,这些参数可能对解码和显示视频数据有用,但对正确解码不是必需的。


NALU解码过程

NALU解码的总体流程就是,首先从NALU中提取出RBSP语法结构,然后按照下图进行处理。对于NALU的解码,输入是NALU,输出结果是经过解码的当前图像的样点值。

特殊的,对于7和8这两类。图像和序列参数集在其他数据NALU的解码过程中作为参数使用,在这些数据NALU的片头中通过语法元素pic_parameter_set_id设置它们使用的图像参数集编号,而相应的每个图象参数集中通过语法元素seq_parameter_set_id设置它所使用的序列参数集编号。


http://www.niftyadmin.cn/n/1895470.html

相关文章

第一周 机器学习(ML)策略(1):1.6 开发集与测试集的大小

目录 第一章、简介 第二章、开发集与测试集的大小 2.1、 数据集较小时 训练集/开发集/测试集 的划分规则。 2.2、数据集较大时 训练集/开发集/测试集 的划分规则。 2.3、 用置信度评估测试集的性能。 2.4、数据集较大情况下可考虑省略 测试集 2.5、小结 第一章、简介 本…

服务器端跟踪和收集

SQL Server性能分析器只是少量系统存储过程中相当轻量的封装,这些系统存储过程显示了SQL跟踪的真正功能。 下列系统存储过程用来定义和管理跟踪: Sp_trace_create 用来定义一个跟踪,并和接下来将要讲的其他选项一样指定一个输出文件位置。这个…

74. 进程管理 - sar 收集、报告,或存储系统行为信息

开篇词 sar 是一个用于收集、报告,或存储系统活动信息的工具。 统计 页面 这里是页面字段的一些描述: 字段描述pgpgin/s在磁盘里每秒分页的总字节数。pgpgout/s从磁盘里每秒分页的总字节数。fault/s由系统产生的每秒页丢失故障(主要及…

第一周 机器学习(ML)策略(1):1.7 什么时候该改变开发集、测试集和指标

目录第一章、简介 第二章、什么时候该改变开发集、测试集的指标 2.1、什么情况下需要改变指标? 2.2、如何修改评估指标(增加权重) 2.3、增加权重后,归一化评估指标 2.4、设定指标是第一步,优化指标是第二步 2.5、 举例,两个猫分类…

Baeldung Java 周评 | 第七十三弹(关键词:Spring Data JPA 教程、Java 的二十年、了解垃圾收集日志、Hibernate 事物缓存并发策略工作原理、JVM 的反应式流)

开篇词 尤金的第 73 篇 Java 周评,诞生了! Spring 以及 Java 相关 Spring Data JPA 教程:查询方法简介 Petri 的 Spring Data JPA 系列的坚实部分 - 介绍查询方法。Spring 4 及 Java 8 的采用情况 我上周进行的调查对 Spring 4、Spring …

H264/AVC 解码时POC的计算

POC用于标识图像的播放顺序,同时还用于在对帧间预测片解码时,标记参考图像的初始图象序号,表明下列情况下帧或场之间的图像序号差别:使用直接预测模式的运动矢量推算时;B片中使用固有模式加权预测时;解码器…

程序员在囧途之越级汇报篇

不知道大家有没有发现过这样的问题。我们总觉得顶头上司很蠢,而顶头上司的上司相反看起来很睿智,所以我们有情况经常喜欢来个“越级“发邮件或者在电梯口碰到上上司,我们的苦衷如滔滔江水般的喷涌而出。 所以,今天给大家看个真实案…

H264/AVC 宏块片组映射图的产生

(这一届内容不太友好,没看懂,后面会回顾重新理解) 解码器在对每个片解码之前,首先需要基于当前有效图像参数集和需解码的片头,产生“宏块片组映射图”变量MbToSliceGroupMap,该变量对于一个接入…