User Tools

Site Tools


tech:multimedia:nal

Differences

This shows you the differences between two versions of the page.

Link to this comparison view

Next revision
Previous revision
tech:multimedia:nal [2010/05/06 13:03]
admin created
tech:multimedia:nal [2014/11/10 08:22] (current)
Line 2: Line 2:
 ===== NAL技术 ===== ===== NAL技术 =====
 ==== 1.NAL概述 ==== ==== 1.NAL概述 ====
-NAL全称Network Abstract Layer,即网络抽象层。在H.264/​AVC视频编码标准中,整个系统框架被分为了两个层面:视频编码层面(VCL)和网络抽象层面(NAL)。其中,前者负责有效表示视频数据的内容,而后者则负责格式化数据并提供头信息,以保证数据适合各种信道和存储介质上的传输。+NAL全称Network Abstract Layer即网络抽象层。在H.264/​AVC视频编码标准中,整个系统框架被分为了两个层面:视频编码层面(VCL)和网络抽象层面(NAL)。其中,前者负责有效表示视频数据的内容,而后者则负责格式化数据并提供头信息,以保证数据适合各种信道和存储介质上的传输。
  
 现实中的传输系统是多样化的,其可靠性,服务质量,封装方式等特征各不相同,NAL这一概念的提出提供了一个视频编码器和传输系统的友好接口,使得编码后的视频数据能够有效地在各种不同的网络环境中传输。 现实中的传输系统是多样化的,其可靠性,服务质量,封装方式等特征各不相同,NAL这一概念的提出提供了一个视频编码器和传输系统的友好接口,使得编码后的视频数据能够有效地在各种不同的网络环境中传输。
 +
 ==== 2.NAL单元 ==== ==== 2.NAL单元 ====
 NAL单元是NAL的基本语法结构,它包含一个字节的头信息和一系列来自VCL的称为原始字节序列载荷(RBSP)的字节流。头信息中包含着一个可否丢弃的指示标记,标识着该NAL单元的丢弃能否引起错误扩散,一般,如果NAL单元中的信息不用于构建参考图像,则认为可以将其丢弃;最后包含的是NAL单元的类型信息,暗示着其内含有效载荷的内容。 NAL单元是NAL的基本语法结构,它包含一个字节的头信息和一系列来自VCL的称为原始字节序列载荷(RBSP)的字节流。头信息中包含着一个可否丢弃的指示标记,标识着该NAL单元的丢弃能否引起错误扩散,一般,如果NAL单元中的信息不用于构建参考图像,则认为可以将其丢弃;最后包含的是NAL单元的类型信息,暗示着其内含有效载荷的内容。
 送到解码器端的NAL单元必须遵守严格的顺序,如果应用程序接收到的NAL单元处于乱序,则必须提供一种恢复其正确顺序的方法。 送到解码器端的NAL单元必须遵守严格的顺序,如果应用程序接收到的NAL单元处于乱序,则必须提供一种恢复其正确顺序的方法。
 ==== 3.NAL实现编解码器与传输网络的结合 ==== ==== 3.NAL实现编解码器与传输网络的结合 ====
-NAL提供了一个编解码器与传输网络的通用接口,而对于不同的网络环境,具体的实现方案是不同的。对于基于流的传输系统如H.320、MPEG等,需要按照解码顺序组织NAL单元,并为每个NAL单元增加若干比特字节对齐的前缀以形成字节流;对于RTP/​UDP/​IP系统,则可以直接将编码器输出的NAL单元作为RTP的有效载荷;而对于同时提供多个逻辑信道的传输系统,我们甚至可以根据重要性将不同类型的NAL单元在不同服务质量的信道中传输[2]+NAL提供了一个编解码器与传输网络的通用接口,而对于不同的网络环境,具体的实现方案是不同的。对于基于流的传输系统如H.320、MPEG等,需要按照解码顺序组织NAL单元,并为每个NAL单元增加若干比特字节对齐的前缀以形成字节流;对于RTP/​UDP/​IP系统,则可以直接将编码器输出的NAL单元作为RTP的有效载荷;而对于同时提供多个逻辑信道的传输系统,甚至可以根据重要性将不同类型的NAL单元在不同服务质量的信道中传输。 
 ==== 4.结论 ==== ==== 4.结论 ====
 为了实现编解码器良好的网络适应性,需要做两方面的工作:第一、在Codec中将NAL这一技术完整而有效的实现;第二、在遵循H.264/​AVC ​ NAL规范的前提下设计针对不同网络的最佳传输方案。如果实现了以上两个目标,所实现的就不仅仅是一种视频编解码技术,而是一套适用范围很广的多媒体传输方案,该方案适用于如视频会议,数据存储,电视广播,流媒体,无线通信,远程监控等多种领域。 为了实现编解码器良好的网络适应性,需要做两方面的工作:第一、在Codec中将NAL这一技术完整而有效的实现;第二、在遵循H.264/​AVC ​ NAL规范的前提下设计针对不同网络的最佳传输方案。如果实现了以上两个目标,所实现的就不仅仅是一种视频编解码技术,而是一套适用范围很广的多媒体传输方案,该方案适用于如视频会议,数据存储,电视广播,流媒体,无线通信,远程监控等多种领域。
 ===== NALU类型 ===== ===== NALU类型 =====
-标识NAL单元中的RBSP数据类型,其中,nal_unit_type为1, ​ 2,  3,  4,  5及12的NAL单元称为VCL的NAL单元,其他类型的NAL单元为非VCL的NAL单元。+标识NAL单元中的RBSP数据类型,其中,nal_unit_type为1, ​ 2,  3,  4,  5的NAL单元称为VCL的NAL单元,其他类型的NAL单元为非VCL的NAL单元。
   * 0:未规定   * 0:未规定
   * 1:非IDR图像中不采用数据划分的片段   * 1:非IDR图像中不采用数据划分的片段
Line 20: Line 22:
   * 4:非IDR图像中C类数据划分片段   * 4:非IDR图像中C类数据划分片段
   * 5:IDR图像的片段   * 5:IDR图像的片段
-  * 6:补充增强信息 ​ (SEI) +  * 6:补充增强信息SEI 
-  * 7:序列参数集 +  * 7:序列参数集(SPS) 
-  * 8:图像参数集+  * 8:图像参数集(PPS)
   * 9:分割符   * 9:分割符
   * 10:序列结束符   * 10:序列结束符
   * 11:流结束符   * 11:流结束符
   * 12:填充数据   * 12:填充数据
-  * 13  –  23:保留+  * 13:序列参数集扩展 
 +  * 14:带前缀的NAL单元 
 +  * 15:子序列参数集 
 +  * 16  –  18:保留 
 +  * 19:不采用数据划分的辅助编码图像片段 
 +  * 20:编码片段扩展 
 +  * 21  ​– ​ 23:保留
   * 24  –  31:未规定   * 24  –  31:未规定
-===== ==== NALU的顺序要求 ​==== ===== +==== SPS详析 ​==== 
-  - H.264/​AVC标准对送到解码器的NAL单元顺序是有严格要求,如果NAL单元的顺序是混乱的,必须将其重新依规范组织后送入解码器,否则解码器不能够正确解码。 +==== PPS详析 ​==== 
-  - 序参数集NAL单元必须在传送所有此参数集为参考的他NAL单元之前传送不过允许这些NAL单元中间出现重复序列参数集NAL单元。所谓重复的详细解释为:序列数集NAL单元都其专门的标识,如果两个序列数集NAL单元的标识相同以认为后一个只不过是前一个的拷贝新的序列参数集。 +==== SEI详析 ​==== 
-  - 图像参数集NAL单元必须在所有以此参数集为参考的其他NAL单元之先,过允许这些NAL单元中间出现重复的图像参数集NAL单元这一点与上述序列参数集NAL单元是相同 + 
-  - 不同基本编码图像中的片段(slice)单元和数据划分片段(data ​ partition)单元在顺序上不可以相互交叉,即不允许属某一基本编码图像一系列片段(slice)单元和数据划分片段(data ​ partition)单元忽然出现另一基本编码图像的片段(slice)单元片段和数据划分片段(data ​ partition)单元。 + 
-  - 参考图像的影响:如果一幅图像以另一幅图像为参考则属于前者的所有片段(slice)单元数据划分片段(data ​ partition)单元必须在属于后者片段和数据划分片段之后,无论基本编码图像还是冗余编码图像都必须遵守这个规则 +=====NAL在多媒体传输、存储系统中应用===== 
-  - 基本编码图像所有片段(slice)单元和数据划分片段(data ​ partition)单元必须属于相应冗余编码图像的片段(slice)单元和数据划分片段(data ​ partition)单元之前。 +NAL的头占用了一个字节比特自高至低排表示如下: 
-  - 如果数据流中出现了连续无参考基本编图像,则图像序号小的在前面。 + 
-  - 如果arbitrary_slice_order_allowed_flag置为1,一个基本编码图像中的片段(slice)单元和数据划分片段(data ​ partition)单元的顺序是任意的,如果arbitrary_slice_order_allowed_flag置为零,则要按照片段中第一个宏块位置来确定片段的顺序,若使用数据划分,则A类数据划分片段B类数据划分片段之前,B类数据划分片段在C类数据划分片段之前,而且对应不同片段的数据划分片段不能相互交叉,也不能与没有数据划分的片段相互交叉。 +0AABBBBB 
-  ​- 如果存在SEI(补充增强信息)  单元的话它必须在它所对应的基本编码图像的片段(slice)单元和数据划分片段(data ​ partition)单元之前,并时必须紧接在上一个基本编图像所有片段(slice)单元和数据划分片段(data ​ partition)单元后边。假如SEI属于多个基本编码图像其顺序仅以第一基本编图像为参照。 + 
-  - 如果存在图像分割符它必须在所有SEI ​ 单元、基本编码图像所有片段slice)单元数据划分片段(data ​ partition)单元之前并且紧接着上一个基本编码图像那NAL单元。 +AA用于表示该NAL是否可以丢弃(有无被其后的NAL参考),00b表示没有参考作用,可丢弃,如B slice、SEI等,非零——包括01b、10b、11b——表示该NAL不可丢弃如SPS、PPS、I Slice、P Slice等。常用的NAL取值如: 
-  - 如果存在序列结束符且序列结束符后还有图像,则该图像必须是IDR(即解码器刷新)图像序列结束符位置应当在属于这IDR图像的分割符、SEI ​ 单元等数据之前,且紧接着前那些图像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读出来视频帧不包含PPSSPS信息位于MP4的文件头中解析器必须在打开文件的候就获取它们从MP4文件读出H.264帧往往是下面的形式(假设长度码为2字节): 
 +  ​00 19 06 [... 25 字节...] 24 aa 65 [... 9386 字节...] 
 +  SEI信息 ​                  IDR Slice
tech/multimedia/nal.1273151031.txt.gz · Last modified: 2014/11/10 08:31 (external edit)