zoukankan      html  css  js  c++  java
  • <摘录>NAL格式

    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:未规定

    SPS详析

    PPS详析

    SEI详析

    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
  • 相关阅读:
    基于ObjectCache的应用
    数学趣题——验证角谷猜想
    数学趣题——递归法寻找最小值
    数学趣题——寻找同构数
    数学趣题——表示成两个数的平方和
    数学趣题——马克思手稿中的数学题
    数学趣题——具有特殊性质的数
    数学趣题——验证四方定理
    数学趣题——连续整数固定和问题
    数学趣题——验证尼克彻斯定理
  • 原文地址:https://www.cnblogs.com/hummersofdie/p/3037184.html
Copyright © 2011-2022 走看看