为了保证视频流在不同传输环境中能有效地传输,单纯的高压缩率是不够的,必须提供有效的方法,使视频流能够与传输协议无缝连接,才能应用到各种网络。在以前的标准中,MPEG标准包含系统层,同时制定了H.320或H.324等独立的标准来满足视频编码的网络适应性。然而,对于不同的通信系统来说,只有将网络适应性与视频编码紧密结合起来,才可能获得最佳的传输性能。因此在制定新一代国际视频编码标准H.264/AVC时就考虑了网络友好性,提出了网络抽象层NAL(Network Abstraction Layer)的概念。可根据实现的功能不同,将编码器分成两层:视频编码层VCL(Video Coding Layer)与网络抽象层NAL(Network Abstraction Layer)。
NAL层作为VCL层与传输层的接口,主要负责VCL数据的打包、序列和图像的设置参数(parameter sets)传输、IDR(Instantaneous Decoding Refresh)等,使压缩后的数据能在不同网络传输。NAL层将视频编码数据抽象成NAL单元,根据不同的传输方式,进行NAL单元封装,H.264编码器分层结构图中的H.324M表示用于移动的H.324系统。
根据传输网络中数据交换方法的不同,有两种类型的NAL单元:
针对电路交换网,如H.320,MPEG.2等,提出字节流格式NAL单元。NAL层将视频编码数据封装成字节流格式的单元,每一个单元包含3个(或4个)字节的起始前缀,值0x000001
针对分组交换网,如RTP/IP或TCP/IP系统等,提出包传输NAL单元。NAL层将编码数据直接进行协议封装,而不必进行起始码填充。
根据打包的数据类型不同,又可以将NAL单元分为VCL.NAL单元和非VCL.NAL单元。VCL.NAL单元包含视频残差编码数据,对其解码后能够重建图像。非VCL.NAL单元包含附加信息,如参数集和辅助增强信息(SEI:Supplemental Enhancement Information)等。
其中参数集包含高层的语法元素,这些信息对解码而言非常重要。VCL.NAL单元解码必须参考参数集里的语法元素,主要有序列参数集和图像参数集。这些参数如果在传输中出错或丢失,将直接影响其它NAL单元的解码。通常这些参数集在VCL—NAL单元前传递,也可通过重复传输来提高其鲁棒性,防止数据丢失。在一些应用中,参数集可以和VCL.NAL单元在同一信道传输。在一些特殊环境下,可以采用比视频信道更可靠的传输机制来优先传递参数集。VCL层编码集中了近些年来视频编码方面的先进技术,并将它们很好结合起来,与以前的标准相比,在同等视觉质量的情况下可节省50%左右的码率。
网络抽象,NAL负责使用下层网络的分段格式来封装数据,包括组帧、逻辑信道的信令、定时信息的利用或发序列结束信号等。例如,NAL支持视频在电路交换信道上的传输格式,支持视频在Internet上利用RTP/UDP/IP传输的格式。NAL包括网络提取层的头信息、段结构信息和实际载荷信息,即上层的VCL数据。NAL提供适当的映射方法将头部信息和数据映射到传输层协议上,可以减少在分组交换传输种组帧和重同步所需要的资源开销。为了提高在不同特性的网络上定制VCL数据格式的能力,H.264的网络提取层在VCL和NAL之间定义了基于分组的接口规范、打包方式等,也包括了相应的信令内容。这样,高效率编码任务和网络友好性任务就由VCL和NAL分别完成。