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单元在不同服务质量的信道中传输[2]。
4.结论
为了实现编解码器良好的网络适应性,需要做两方面的工作:第一、在Codec中将NAL这一技术完整而有效的实现;第二、在遵循H.264/AVC NAL规范的前提下设计针对不同网络的最佳传输方案。如果实现了以上两个目标,所实现的就不仅仅是一种视频编解码技术,而是一套适用范围很广的多媒体传输方案,该方案适用于如视频会议,数据存储,电视广播,流媒体,无线通信,远程监控等多种领域。
NALU类型
标识NAL单元中的RBSP数据类型,其中,nal_unit_type为1, 2, 3, 4, 5及12的NAL单元称为VCL的NAL单元,其他类型的NAL单元为非VCL的NAL单元。
0:未规定
1:非IDR图像中不采用数据划分的片段
2:非IDR图像中A类数据划分片段
3:非IDR图像中B类数据划分片段
4:非IDR图像中C类数据划分片段
5:IDR图像的片段
6:补充增强信息 (SEI)
7:序列参数集
8:图像参数集
9:分割符
10:序列结束符
11:流结束符
12:填充数据
13 – 23:保留
24 – 31:未规定
NALU的顺序要求
H.264/AVC标准对送到解码器的NAL单元顺序是有严格要求的,如果NAL单元的顺序是混乱的,必须将其重新依照规范组织后送入解码器,否则解码器不能够正确解码。
1.序列参数集NAL单元必须在传送所有以此参数集为参考的其他NAL单元之前传送,不过允许这些NAL单元中间出现重复的序列参数集NAL单元。所谓重复的详细解释为:序列参数集NAL单元都有其专门的标识,如果两个序列参数集NAL单元的标识相同,就可以认为后一个只不过是前一个的拷贝,而非新的序列参数集。
2.图像参数集NAL单元必须在所有以此参数集为参考的其他NAL单元之先,不过允许这些NAL单元中间出现重复的图像参数集NAL单元,这一点与上述的序列参数集NAL单元是相同的。
3.不同基本编码图像中的片段(slice)单元和数据划分片段(data partition)单元在顺序上不可以相互交叉,即不允许属于某一基本编码图像的一系列片段(slice)单元和数据划分片段(data partition)单元中忽然出现另一个基本编码图像的片段(slice)单元片段和数据划分片段(data partition)单元。
4.参考图像的影响:如果一幅图像以另一幅图像为参考,则属于前者的所有片段(slice)单元和数据划分片段(data partition)单元必须在属于后者的片段和数据划分片段之后,无论是基本编码图像还是冗余编码图像都必须遵守这个规则
5.基本编码图像的所有片段(slice)单元和数据划分片段(data partition)单元必须在属于相应冗余编码图像的片段(slice)单元和数据划分片段(data partition)单元之前。
6.如果数据流中出现了连续的无参考基本编码图像,则图像序号小的在前面。
7.如果arbitrary_slice_order_allowed_flag置为1,一个基本编码图像中的片段(slice)单元和数据划分片段(data partition)单元的顺序是任意的,如果arbitrary_slice_order_allowed_flag置为零,则要按照片段中第一个宏块的位置来确定片段的顺序,若使用数据划分,则A类数据划分片段在B类数据划分片段之前,B类数据划分片段在C类数据划分片段之前,而且对应不同片段的数据划分片段不能相互交叉,也不能与没有数据划分的片段相互交叉。
8.如果存在SEI(补充增强信息) 单元的话,它必须在它所对应的基本编码图像的片段(slice)单元和数据划分片段(data partition)单元之前,并同时必须紧接在上一个基本编码图像的所有片段(slice)单元和数据划分片段(data partition)单元后边。假如SEI属于多个基本编码图像,其顺序仅以第一个基本编码图像为参照。
9.如果存在图像分割符的话,它必须在所有SEI 单元、基本编码图像的所有片段slice)单元和数据划分片段(data partition)单元之前,并且紧接着上一个基本编码图像那些NAL单元。
10.如果存在序列结束符,且序列结束符后还有图像,则该图像必须是IDR(即时解码器刷新)图像。序列结束符的位置应当在属于这个IDR图像的分割符、SEI 单元等数据之前,且紧接着前面那些图像的NAL单元。如果序列结束符后没有图像了,那么它的就在比特流中所有图像数据之后。
11.流结束符在比特流中的最后。
分享到:
相关推荐
H.264标准是在先前的视频编码标准(如H.261、H.262(MPEG-2 Part 2)和H.263)基础上发展起来的,旨在解决随着技术进步而产生的新需求,特别是对于更高的压缩比和更灵活的网络适应性的需求。H.264通过引入多种先进的...
“H.264 Video EsViewer”是一款专为H.264码流分析设计的工具,它能帮助用户查看和理解码流中的每一个NAL单元。该工具的主要功能包括: 1. NAL单元解析:显示每个NAL单元的类型、长度、起始码等基本信息,帮助用户...
H.264算法的实现过程中,通常采用X.264开源编码器作为实现的基础。X.264与JM系列编码器、T.264编码器相比,有着优秀的性能和出色效果。 H.264编码算法的实现过程可以分为六个步骤: 1. RGB和YUV颜色空间的转换 在...
可以实现各种视频的编码和解码,可以在这个代码的基础上进行各种开发,比如算法的优化,转码技术,实现各种分辨了的转码-h.264 standard code, uses in the video frequency code! May realize each kind of video ...
在本文中,我们将深入探讨基于MATLAB编写的H.264编解码技术,这是一种在数字视频处理领域广泛使用的高效编码标准。MATLAB是一种强大的数值计算和编程环境,其简洁的语法使得它成为实现复杂算法的理想选择,包括像H....
4. **强大的错误恢复能力**:通过采用冗余数据编码等技术,H.264提高了视频在网络传输过程中的抗干扰能力,确保了视频质量的稳定。 #### 三、H.264标准的技术细节 H.264标准由多个部分组成,包括视频编码层(Video ...
H.264的核心在于其编码策略,它采用了先进的压缩技术,包括熵编码、运动估计和补偿、帧内预测、多参考帧、分层编码等,以实现更高的压缩比。以下是H.264的一些关键知识点: 1. **熵编码**:H.264使用了两种熵编码...
本文将深入解析如何在RTP中发送和接收H.264编码的数据,主要关注RFC3984中提及的关键概念和技术细节。 RTP(Real-time Transport Protocol)是一种网络协议,用于在网络上实时传输音频和视频数据。H.264,又称为AVC...
在Android平台上进行多媒体开发,H.264编码技术是一个重要的环节。H.264,也称为AVC(Advanced Video Coding),是国际电信联盟(ITU-T)与国际标准化组织(ISO/IEC)联合制定的一种高效视频编码标准。自2003年发布...
在本文中,我们将深入探讨如何使用VC++实现H.264文件的解析与转换,将其分解为一帧帧的YUV图像。H.264是一种高效的视频编码标准,广泛应用于数字电视、网络视频传输等领域。理解并实现H.264文件的解析和转换是计算机...
H264码流分析器是一款专业工具,主要用于深入解析H.264编码的视频文件,以便理解视频...使用这样的工具和样本文件,无论是开发者还是视频处理工程师,都能更深入地理解H.264编码技术,从而在实际工作中提升效率和效果。
8. 封装:将编码后的比特流与其他元数据(如时间戳、运动矢量等)一起封装成H.264的NAL单元,形成最终码流。 三、H.264在DSP上的实现 H.264编码在DSP上的实现需要充分利用其并行计算能力。例如,TI的DM642是一款高...
熵编码后的数据被组织成符合H.264规范的码流,包括NAL单元(Network Abstraction Layer Units),每个NAL单元包含一个或多个SEI(Supplemental Enhancement Information)、SPS(Sequence Parameter Set)、PPS...
在IT领域,尤其是在多媒体处理和网络通信中,"MFC+ffmpeg+socket实时解码H.264码流"是一个关键的技术组合。这个技术栈主要用于实现远程视频传输和播放,尤其是在实时监控、在线视频会议或者流媒体服务中。下面将详细...
3. **相关文献资料**: 可能包含关于H.264标准的技术论文或教程,帮助深入理解H.264的理论基础,包括熵编码的上下文自适应二进制算术编码(CAAC)和上下文自适应变量长度编码(CABAC),以及宏块级别的编码决策等。...
3. **分层结构**:H.264支持多级编码,如NAL单元(网络抽象层单元)、宏块、slice等,使得编码更加灵活,可以适应不同网络环境。 4. **预测模式**:包含多种预测模式,如帧内预测(Intra Prediction)、帧间预测...