本文主要是介绍音视频压缩:H264码流层次结构和NALU详解,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!
问题背景:
前面在讲封装格式过程中,都有一个章节讲解如何将H.264
的NALU
单元如何打包到TS
、FLV
、RTP
中,解封装刚好相反,怎么从这些封装格式里面解析出一个个NALU
单元。
NALU
即是编码器的输出数据又是解码器的输入数据,所以在封装和传输时,我们一般处理对象就是NALU
,至于NALU
内部到底是什么则很少关心。
甚至我们在编解码时,我们只需要初始化好x264
编码库,然后输入YUV
数据,它就会给你经过一系列压缩算法后输出NALU
,或者将NALU
输入到x264
解码库就会输出YUV
数据。
这篇文章就初步带你看下NALU
能传输那些数据,NALU
的类型和结构以及H264
码流的层次,最后通过分析工具分析下裸码流记性验证,你可以选择感兴趣章节阅读。
NALU
结构:
H.264
的基本流(elementary stream
)就是一系列NALU
的集合,如下图所示:
NALU
结构分为两层,包含了视频编码层(VCL
)和网络适配层(NAL
):
视频编码层(VCL
即Video Coding Layer
):负责高效的视频内容表示,这是核心算法引擎,其中对宏块、片的处理都包含在这个层级上,它输出的数据是SODB
;
网络适配层(NAL
即Network Abstraction Layer
):以网络所要求的恰当方式对数据进行打包和发送,比较简单,先报VCL
吐出来的数据SODB
进行字节对齐,形成RBSP
,最后再RBSP
数据前面加上NAL
头则组成一个NALU
单元。
分层目的:
这样做的目的:VCL
只负责视频的信号处理,包含压缩,量化等处理,NAL
解决编码后数据的网络传输,这样可以将VCL
和NAL
的处理放到不同平台来处理,可以减少因为网络环境不同对VCL
的比特流进行重构和重编码;
这篇关于音视频压缩:H264码流层次结构和NALU详解的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!