H264探索

1.H264概述

      H264分为多个标准以适应不同领域的应用,定义了四个不同的类(Profile):Baseline Profile(基类)、Main Profile(主类)、Extended Profile(扩展类)和High Profile(高端类)。

      Baseline Profile:提供I/P帧,仅支持逐行扫描和CAVLC。主要应用在视频会话,如可视电话、会议电视、远程教学、视频监控等,要求低延迟。

      Main Profile:提供I/P/B/SP/SI帧,仅支持逐行扫描和CAVLC。主要应用于网络的视频流,如视频点播、基于网络的视频监控等。

      Extended Profile:提供I/P/B帧,支持逐行扫描和隔行扫描,提供CAVLC或者CABAC。主要应用于消费电子应用,如数字电视广播、数字视频存储等。

      High Profile:在Main Profile的基础上新增:8x8帧内预测,自定义量化,无损视频编码,更多的是YUV格式,像素精度提高到10位或12位等。主要应用于针对高分辨率和高清晰度有特别要求的专业。

      在H264中,处理的图像帧分割成多个16x16的宏块,根据图像编码类型I帧、P帧、B帧等,决定是对图像数据本身处理还是对残差编码处理。图像数据本身即帧内编码I帧,利用图像的空间相关性,去除空间冗余。残差编码,首先利用运动估计技术,在一定范围内的窗口内搜索相对最佳宏块,然后相减形成残差,同时记录当前宏块的运行向量MV。对图像数据或者残差做DCT变换、量化。由于块处理造成“块效应”,为了提高参考图像的准确度、清晰度,可采用环路滤波提高图像清晰度。最后对量化后的系数、运动向量及其他信息做熵编码,形成最后的码流。

      H264将视频压缩系统分为视频编码层VCL和网络提取层NAL,结构如图所示:

     

      视频编码层VCL通过时域、空域预测和变换编码来完成对视频信息的压缩,网络提取层NAL则将于网络相关的信息从视频压缩系统中抽象出来,使网络对于视频编码层是透明的,它主要负责对编码后的数据进行封装,提高鲁棒性、降低误码率。采用分层结构有利于压缩编码与网络传输之间的分离,使视频编码层可以移植到不异构的网络中,适应不同的网络传输。

2.H264码流结构

      H264原始视频码流由一系列NAL单元组成,格式如下图所示:

 

      NAL前存在着起始码0x00000001或者0x000001,解码器检测到起始码作为一个NAL的起始标符,当检测到下一个起始码时,表明当前NAL结束。

      VCL数据就是编码处理的输出,在传输和存储之前,先被映射或者封装进NAL单元(NAL Uint,简称NALU),每个NAL单元包括对应视频编码的NAL头和RBSP(原始字节序列负荷),格式如下:

      

      NAL头部的数据(占一个字节)记录着后面的RBSP是什么类型的数据,是否会被其他帧参考以及网络传输是否有错误。它由三部分组成:

      forbidden_bit(1bit):禁止位,初始为0,网络发现NAL单元有比特错误时可设置为1,以便接收方纠错或者丢弃该单元;

      nal_reference_bit(2bit):当前NAL的优先级,优先级越大,越重要,解码器在处理不过来时,会丢掉重要性为0的NAL;

      nal_unit_type(5bit):NAL的类型,见下图;

      

      举个例子,如下图:

      

      00 00 00 01为起始码,67是NAL的头部,换算一下是0110 0111,参考上表可知这是一个SPS序列。

      关于RBSP的类型,我们可以参考下表:

      

      

      理解了NALU ,基本上就能摸清H264的结构。接下来看看一帧图像是怎么被分为一个又一个NALU的。

      一帧图片经过编码器之后,被编码为一个或者多个slice。NALU是装载着这些slice的载体,NALU跟slice的关系如下图:

      

      slice片和帧的概念是不一样的,一帧代表着一张图片,slice是H264提出的新概念,一帧图像可以被编码为一个或者多个slice。slice装载在NAL中进行网络传输,但是不代表NAL里就是slice,也有装着其他数据,如SPS、PPS、SEI等。如下图:

      

      slice的作用是当做宏块(macroblock)的载体,见上图,可以限制误码的扩散和传输。一张图片有一个或多个slice,每个slice可以分为头和数据,切片头内保存了关于切片的类型、切片宏块的类型、切片帧的数量的信息、参照帧的设置和量化参数的信息,切片数据是储存像素数据的地方,包含最少一个,最多整个图像的宏块(macroblock)

      关于宏块,它是视频信息的主要承载者,包含着每一个像素的色度和亮度信息。解码过程中,最主要的工作就是从码流中获取宏块中的像素阵列。宏块的结构图:

      

      从上面的图中可以看出,宏块中包含了宏块类型、预测类型、CPB、QP、像素的亮度和色度数据集等信息。

1ceeeda2-dc6e-4296-9f25-b7b955adba02

      

         

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值