大二小子一枚,刚刚跟随老师做项目,内容是安卓 h.264解码的编码与解码,老师说让我先找些C代码研究下,求高手指点

H.264和以前的标准一样,也是DPCM加变换编码的混合编码模式。但它采用“回归基本”的简洁设计,不用众多的选项,获得比H.263++好得多的压缩性能;加强了对各种信道的适应能力,采用“网络友好”的结构和语法,有利于对误码和丢包的处理;应用目标范围较宽,以满足不同速率、不同解析度以及不同传输(存储)场合的需求。技术上,它集中了以往标准的优点,并吸收了标准制定中积累的经验。与H.263 v2(H.263+)或MPEG-4简单类(Simple Profile)相比,H.264在使用与上述编码方法类似的最佳编码器时,在大多数码率下最多可节省50%的码率。H.264在所有码率下都能持续提供较高的视频质量。H.264能工作在低延时模式以适应实时通信的应用(如视频会议),同时又能很好地工作在没有延时限制的应用,如视频存储和以服务器为基础的视频流式应用。H.264提供包传输网中处理包丢失所需的工具,以及在易误码的无线网中处理比特误码的工具。在系统层面上,H.264提出了一个新的概念,在视频编码层(Video Coding Layer,VCL)和网络提取层(Network Abstraction Layer,NAL)之间进行概念性分割,前者是视频内容的核心压缩内容之表述,后者是通过特定类型网络进行递送的表述,这样的结构便于信息的封装和对信息进行更好的优先级控制。编码1.帧内预测编码帧内编码用来缩减图像的空间冗馀。为了提高H.264帧内编码的效率,在给定帧中充分利用相邻宏块的空间相关性,相邻的宏块通常含有相似的属性。因此,在对一给定宏块编码时,首先可以根据周围的宏块预测(典型的是根据左上角宏块、左边宏块和上面宏块,因为此宏块已经被编码处理),然后对预测值与实际值的差值进行编码,这样,相对于直接对该帧编码而言,可以大大减小码率。H.264提供9种模式进行4×4像素宏块预测,包括1种直流预测和8种方向预测。在图中,相邻块的A到I共9个像素均已经被编码,可以被用以预测,如果我们选择模式4,那么,a、b、c、d4个像素被预测为与E相等的值,e、f、g、h4个像素被预测为与F相等的值,对于图像中含有很少空间信息的平坦区,H.264也支持16×16的帧内编码。2.帧间预测编码帧间预测编码利用连续帧中的时间冗馀来进行运动估计和补偿。H.264的运动补偿支持以往的视频编码标准中的大部分关键特性,而且灵活地添加了更多的功能,除了支持P帧、B帧外,H.264还支持一种新的流间传送帧——SP帧,如图3所示。码流中包含SP帧后,能在有类似内容但有不同码率的码流之间快速切换,同时支持随机接入和快速回放模式。图3 SP-帧示意图H.264的运动估计有以下4个特性。(1)不同大小和形状的宏块分割对每一个16×16像素宏块的运动补偿可以采用不同的大小和形状,H.264支持7种模式,如图4所示。小块模式的运动补偿为运动详细信息的处理提高了性能,减少了方块效应,提高了图像的质量。图4 宏块分割方法(2)高精度的亚像素运动补偿在H.263中采用的是半像素精度的运动估计,而在H.264中可以采用1/4或者1/8像素精度的运动估值。在要求相同精度的情况下,H.264使用1/4或者1/8像素精度的运动估计后的残差要比H.263采用半像素精度运动估计后的残差来得小。这样在相同精度下,H.264在帧间编码中所需的码率更小。(3)多帧预测H.264提供可选的多帧预测功能,在帧间编码时,可选5个不同的参考帧,提供了更好的纠错性能,这样更可以改善视频图像质量。这一特性主要应用于以下场合:周期性的运动、平移运动、在两个不同的场景之间来回变换摄像机的镜头。(4)去块滤波器H.264定义了自适应去除块效应的滤波器,这可以处理预测环路中的水平和垂直块边缘,大大减少了方块效应。3.整数变换在变换方面,H.264使用了基于4×4像素块的类似于DCT的变换,但使用的是以整数为基础的空间变换,不存在反变换因为取舍而存在误差的问题,变换矩阵如图5所示。与浮点运算相比,整数DCT变换会引起一些额外的误差,但因为DCT变换后的量化也存在量化误差,与之相比,整数DCT变换引起的量化误差影响并不大。此外,整数DCT变换还具有减少运算量和复杂度,有利于向定点DSP移植的优点。4.量化H.264中可选52种不同的量化步长,这与H.263中有31个量化步长很相似,但是在H.264中,步长是以12.5%的复合率递进的,而不是一个固定常数。在H.264中,变换系数的读出方式也有两种:之字形(Zigzag)扫描和双扫描,如图6所示。大多数情况下使用简单的之字形扫描;双扫描仅用于使用较小量化级的块内,有助于提高编码效率。图6 变换系数的读出方式5.熵编码视频编码处理的最后一步就是熵编码,在H.264中采用了两种不同的熵编码方法:通用可变长编码(UVLC)和基于文本的自适应二进制算术编码(CABAC)。在H.263等标准中,根据要编码的数据类型如变换系数、运动矢量等,采用不同的VLC码表。H.264中的UVLC码表提供了一个简单的方法,不管符号表述什么类型的数据,都使用统一变字长编码表。其优点是简单;缺点是单一的码表是从概率统计分布模型得出的,没有考虑编码符号间的相关性,在中高码率时效果不是很好。因此,H.264中还提供了可选的CABAC方法。算术编码使编码和解码两边都能使用所有句法元素(变换系数、运动矢量)的概率模型。为了提高算术编码的效率,通过内容建模的过程,使基本概率模型能适应随视频帧而改变的统计特性。内容建模提供了编码符号的条件概率估计,利用合适的内容模型,存在于符号间的相关性可以通过选择要编码符号邻近的已编码符号的相应概率模型来去除,不同的句法元素通常保持不同的模型。编码H.264的目标应用涵盖了大部分的视频服务,如有线电视远程监控、交互媒体、数字电视、视频会议、视频点播、流媒体服务等。标准的整体框架H.264为解决不同应用中的网络传输的差异。定义了两层:视频编码层(VCL:Video Coding Layer)负责高效的视频内容表示,网络提取层(NAL:Network AbstractionLayer)负责以网络所要求的恰当的方式对数据进行打包和传送(如图所示: 标准的整体框架)。基本层次(Baseline Profile):该层次使用了H.264的除了B-Slices,CABAC以及交织编码模式外所有的特性。该层次主要使用于低时延的实时应用场合。主要层次(Main Profile):包含Baseline profile的所有特性,并包括了B-slices,CABAC以及交织编码模式。它主要针对对时延要求不高,当压缩率和质量要求较高的场合。扩展层次(Profile X):支持所有Baseline profile的特性,但不支持CABAC以及基于宏块的自适应帧场编码。该层次主要针对的时各种网络视频流传输方面的应用。1.分层设计H.264的算法在概念上可以分为两层:视频编码层负责高效的视频内容表示,网络提取层(NAL:Network Abstraction Layer)负责以网络所要求的恰当的方式对数据进行打包和传送。在VCL和NAL之间定义了一个基于分组方式的接口,打包和相应的信令属于NAL的一部分。这样,高编码效率和网络友好性的任务分别由VCL和NAL来完成。VCL层包括基于块的运动补偿混合编码和一些新特性。与前面的视频编码标准一样,H.264没有把前处理和后处理等功能包括在草案中,这样可以增加标准的灵活性。NAL负责使用下层网络的分段格式来封装数据,包括组帧、逻辑信道的信令、定时信息的利用或序列结束信号等。例如,NAL支持视频在电路交换信道上的传输格式,支持视频在Internet上利用RTP/UDP/IP传输的格式。NAL包括自己的头部信息、段结构信息和实际载荷信息,即上层的VCL数据。(如果采用数据分割技术,数据可能由几个部分组成)。2.高精度、多模式运动估计H.264支持1/4或1/8像素精度的运动矢量。在1/4像素精度时可使用6抽头滤波器来减少高频噪声,对于1/8像素精度的运动矢量,可使用更为复杂的8抽头的滤波器。在进行运动估计时,编码器还可选择"增强"内插滤波器来提高预测的效果。在H.264的运动预测中,一个宏块(MB)可以按图2被分为不同的子块,形成7种不同模式的块尺寸。这种多模式的灵活和细致的划分,更切合图像中实际运动物体的形状,大大提高了运动估计的精确程度。在这种方式下,在每个宏块中可以包含有1、2、4、8或16个运动矢量。在H.264中,允许编码器使用多于一帧的先前帧用于运动估计,这就是所谓的多帧参考技术。例如2帧或3帧刚刚编码好的参考帧,编码器将选择对每个目标宏块能给出更好的预测帧,并为每一宏块指示是哪一帧被用于预测。3.4×4块的整数变换H.264与先前的标准相似,对残差采用基于块的变换编码,但变换是整数操作而不是实数运算,其过程和DCT基本相似。这种方法的优点在于:在编码器中和解码器中允许精度相同的变换和反变换,便于使用简单的定点运算方式。也就是说,这里没有"反变换误差"。变换的单位是4×4块,而不是以往常用的8×8块。由于用于变换块的尺寸缩小,运动物体的划分更精确,这样,不但变换计算量比较小,而且在运动物体边缘处的衔接误差也大为减小。为了使小尺寸块的变换方式对图像中较大面积的平滑区域不产生块之间的灰度差异,可对帧内宏块亮度数据的16个4×4块的DC系数(每个小块一个,共16个)进行第二次4×4块的变换,对色度数据的4个4×4块的DC系数(每个小块一个,共4个)进行2×2块的变换。H.264为了提高码率控制的能力,量化步长的变化的幅度控制在12.5%左右,而不是以不变的增幅变化。变换系数幅度的归一化被放在反量化过程中处理以减少计算的复杂性。为了强调彩色的逼真性,对色度系数采用了较小量化步长。4.统一的VLCH.264中熵编码有两种方法,一种是对所有的待编码的符号采用统一的VLC(UVLC :Universal VLC),另一种是采用内容自适应的二进制算术编码(CABAC:Context-Adaptive Binary Arithmetic Coding)。CABAC是可选项,其编码性能比UVLC稍好,但计算复杂度也高。UVLC使用一个长度无限的码字集,设计结构非常有规则,用相同的码表可以对不同的对象进行编码。这种方法很容易产生一个码字,而解码器也很容易地识别码字的前缀,UVLC在发生比特错误时能快速获得重同步。5.帧内预测在先前的H.26x系列和MPEG-x系列标准中,都是采用的帧间预测的方式。在H.264中,当编码Intra图像时可用帧内预测。对于每个4×4块(除了边缘块特别处置以外),每个像素都可用17个最接近的先前已编码的像素的不同加权和(有的权值可为0)来预测,即此像素所在块的左上角的17个像素。显然,这种帧内预测不是在时间上,而是在空间域上进行的预测编码算法,可以除去相邻块之间的空间冗馀度,取得更为有效的压缩。按照所选取的预测参考的点不同,亮度共有9类不同的模式,但色度的帧内预测只有1类模式。6.面向IP和无线环境H.264 草案中包含了用于差错消除的工具,便于压缩视频在误码、丢包多发环境中传输,如移动信道或IP信道中传输的健壮性。为了抵御传输差错,H.264视频流中的时间同步可以通过采用帧内图像刷新来完成,空间同步由条结构编码(slice structured coding)来支持。同时为了便于误码以后的再同步,在一幅图像的视频数据中还提供了一定的重同步点。另外,帧内宏块刷新和多参考宏块允许编码器在决定宏块模式的时候不仅可以考虑编码效率,还可以考虑传输信道的特性。除了利用量化步长的改变来适应信道码率外,在H.264中,还常利用数据分割的方法来应对信道码率的变化。从总体上说,数据分割的概念就是在编码器中生成具有不同优先级的视频数据以支持网络中的服务质量QoS。例如采用基于语法的数据分割(syntax-based data partitioning)方法,将每帧数据的按其重要性分为几部分,这样允许在缓冲区溢出时丢弃不太重要的信息。还可以采用类似的时间数据分割(temporal data partitioning)方法,通过在P帧和B帧中使用多个参考帧来完成。在无线通信的应用中可以通过改变每一帧的量化精度或空间/时间分辨率来支持无线信道的大比特率变化。可是,在多播的情况下,要求编码器对变化的各种比特率进行响应是不可能的。因此,不同于MPEG-4中采用的精细分级编码FGS(Fine Granular Scalability)的方法(效率比较低),H.264采用流切换的SP帧来代替分级编码。解码由于蓝光格式的统一,使得市面上绝大多数的高清视频均是采用H.264的格式编码,它又分为四个最主要步骤,分别是流处理,逆变换,动态补偿,去方块滤波,这四步也是资源消耗的主要四个部分。H.264解码的四个步骤中的第一步“CAVLC/CABAC解码”是最为消耗运算资源,这方面远高于其他三步(简单的说,CAVLC/CABAC是H.264编码规范中两种不同的算法,都是为了提高压缩比,其中CABAC比CAVLC压缩率更高,但解码时自然也要求更高)。如果所有四个步骤全采用处理器纯软件解码运算,当碰上HDDVD版本的高码率H.264视频,处理器的负载会非常巨大,即使能流畅播放高清视频,也会因为处理器压力过重而影响其他同时开启的应用程序的执行效率。如果让处理器解码“CAVLC/CABAC解码”和“反向转换(Inverse Transformation)”两部分,由显示核心承担“运动补偿”和“解码去块”功能,则可以在一定程度上降低处理器的压力。不过对于使用单核处理器或低端双核处理器的用户来说,这依然无法很好的应付这类视频;其次,碰上编码率更高的视频,依然会给处理器造成很大的处理难度,导致视频播放的不确定性,可能消费者会遇到某些视频可以流畅播放,但是有些视频却丢帧的情况。冗馀处理H.264与以前的国际标准如H.263和MPEG-4相比,为达到高效的压缩,充分利用了各种冗馀,统计冗馀和视觉生理冗馀。1.统计冗馀:频谱冗馀(指色彩分量之间的相关性),空间冗馀,还有时间冗馀。这是视频压缩区别于静止图像的根本点,视频压缩主要利用时间冗馀来实现大的压缩比。2.视觉生理冗馀视觉生理冗馀是由于人类的视觉系统(HVS)特性造成的,比如人眼对色彩分量的高频分量没有对亮度分量的高频分量敏感,对图像高频(即细节)处的噪声不敏感等。针对这些冗馀,视频压缩算法采用了不同的方法加以利用,但主要的考虑是集中在空间冗馀和时间冗馀上。H.264也采用混合(hybrid)结构,即对空间冗馀和时间冗馀分别进行处理。对空间冗馀,标准通过变换及量化达到消除的目的,这样编码的帧叫I帧;而时间冗馀则是通过帧间预测,即运动估计和补偿来去除,这样编码的帧叫P帧或B帧。与以前标准不同的是,H.264在编码I帧时,采用了帧内预测,然后对预测误差进行编码。这样就充分利用了空间相关性,提高了编码效率。H.264帧内预测以16x16的宏块为基本单位。首先,编码器将与当前宏块同一帧的邻近像素作为参考,产生对当前宏块的预测值,然后对预测残差进行变换与量化,再对变换与量化后的结果做熵编码。熵编码的结果就可以形成码流了。由于在解码器端能够得到的参考数据都是经过反变换与反量化后的重建图像,因此为了使编解码一致,编码器端用于预测的参考数据就和解码器端一样,也是经过反变换与反量化后的重建图像。
错误恢复/H264
错误恢复的工具随着视频压缩编码技术的提高在不断改进。旧的标准(H.261、H263、MPEG-2的第二部分)中,使用片和宏块组的划分、帧内编码宏 块、帧内编码片和帧内编码图像来防止错误的扩散。之后改进的标准(H.263+、MPEG-4)中,使用多帧参考和数据分割技术来恢复错误。H.264标准在以前的基础上提出了三种关键技术:(1)参数集合,(2) 灵活的宏块次序(FMO),(3)冗馀片(RS)来进行错误的恢复。帧内编码H.264中帧内编码的技术和以前标准一样,值得注意的是:(1)H.264中的帧内预测编码宏块的参考宏块可以是帧间编码宏块,帧内预测宏块并不像H.263中的帧内编码一样,而采用预测的帧内编码比非预测的帧 内编码有更好的编码效率,但减少了帧内编码的重同步性能,可以通过设置限制帧内预测标记来恢复这一性能。(2)只包含帧内宏块的片有两种,一种是帧内片(Islice),一种是立即刷新片(IDRslice),立即刷新片必存在于立即刷新图像 (IDRpicture)中。与短期参考图像相比,立即刷新图像有更强壮的重同步性能。在无线IP网络环境下,为了提高帧内图像的重同步性能,要采用率失真优化编码和设置限制帧内预测标记。图像分割H.264支持一幅图像划分成片,片中宏块的数目是任意的。在非FMO模式下,片中的宏块次序是同光栅扫描顺序,FMO模式下比较特殊。片的划分可以适配不同的MTU尺寸,也可以用来交织分组打包。参考图像选择参考图像数据选择,不论是基于宏块、基于片,还是基于帧,都是错误恢复的有效工具。对于有反馈的系统,编码器获得传输中丢失图像区域的信息后,参考图像可 以选择解码已经正确接收的图像对应的原图像区域作参考。在没有反馈的系统中,将会使用冗馀的编码来增加错误恢复性能。数据划分通常情况下,一个宏块的数据是存放在一起而组成片的,数据划分使得一个片中的宏块数据重新组合,把宏块语义相关的数据组成一个划分,由划分来组装片。在H.264中有三种不同的数据划分。头信息划分:包含片中宏块的类型,量化参数和运动矢量,是片中最重要的信息。帧内信息划分:包含帧内CBPs和帧内系数,帧内信息可以阻止错误的蔓延。帧间信息划分:包含帧间CBPs和帧间系数,通常比前两个划分要大得多。帧内信息划分结合头信息解出帧内宏块,帧间信息划分结合头信息解出帧间宏块。帧间信息划分的重要性最低,对重同步没有贡献。当使用数据划分时,片中的数据根据其类型被保存到不同的缓存,同时片的大小也要调整,使得片中最大的划分小于MTU尺寸。解码端若获得所有的划分,就可以完整重构片;解码端若发现帧内信息或帧间信息划分丢失,可用的头信息仍然有很好的错误恢复性能。这是因为宏块类型和宏块的运动矢量含有宏块的基本特征。使用参数集序列的参数集(SPS)包括了一个图像序列的所有信息,图像的参数集(PPS)包括了一个图像所有片的信息。多个不同的序列和图像参数集经排序存放在解码 器。编码器参考序列参数集设置图像参数集,依据每一个已编码片的片头的存储地址选择合适的图像参数集来使用。对序列的参数和图像的参数进行重点保护才能很 好地增强H.264错误恢复性能。在差错信道中使用参数集的关键是保证参数集及时、可靠地到达解码端。例如,在实时信道中,编码器用可靠控制协议及早将他们以带外传输的方式发送,使控制协 议能够在引用新参数的第一个片到达之前把它们发给解码器;另外一个办法就是使用应用层保护,重发多个备份文件,确保至少有一个备份数据到达解码端;第三个 办法就是在编解码器的硬件中固化参数集设置。宏块次序(FMO)灵活的宏块次序是H.264的一大特色,通过设置宏块次序映射表(MBAmap)来任意地指配宏块到不同的片组,FMO模式打乱了原宏块顺序,降低了编码 效率,增加了时延,但增强了抗误码性能。FMO模式划分图像的模式各种各样,重要的有棋盘模式、矩形模式等。当然FMO模式也可以使一帧中的宏块顺序分 割,使得分割后的片的大小小于无线网络的MTU尺寸。经过FMO模式分割后的图像数据分开进行传输,以棋盘模式为例,当一个片组的数据丢失时可用另一个片 组的数据(包含丢失宏块的相邻宏块信息)进行错误掩盖。实验数据显示,当丢失率为(视频会议应用时)10%时,经错误掩盖后的图像仍然有很高的质 量。冗馀片方法前边提到了当使用无反馈的系统时,就不能使用参考帧选择的方法来进行错误恢复,应该在编码时增加冗馀的片来增强抗误码性能。要注意的是这些冗馀片的编码参 数与非冗馀片的编码参数不同,也就是用一个模糊的冗馀片附加在一个清晰的片之后。在解码时先解清晰的片,如果其可用就丢弃冗馀片;否则使用冗馀模糊片来重 构图像。
1.低码率(Low Bit Rate):和MPEG2和MPEG4 ASP等压缩技术相比,在同等图像质量下,采用H.264技术压缩后的数据量只有MPEG2的1/8,MPEG4的1/3。2.高质量的图象:H.264能提供连续、流畅的高质量图象(DVD质量)。3.容错能力强:H.264提供了解决在不稳定网络环境下容易发生的丢包等错误的必要工具。4.网络适应性强:H.264提供了网络抽象层(Network Abstraction Layer),使得H.264的文件能容易地在不同网络上传输(例如互联网,CDMA,GPRS,WCDMA,CDMA2000等)。H.264最大的优势是具有很高的数据压缩比率,在同等图像质量的条件下,H.264的压缩比是MPEG-2的2倍以上,是MPEG-4的1.5~2倍。举个例子,原始文件的大小如果为88GB,采用MPEG-2压缩标准压缩后变成3.5GB,压缩比为25∶1,而采用H.264压缩标准压缩后变为879MB,从88GB到879MB,H.264的压缩比达到惊人的102∶1。低码率(Low Bit Rate)对H.264的高的压缩比起到了重要的作用,和MPEG-2和MPEG-4 ASP等压缩技术相比,H.264压缩技术将大大节省用户的下载时间和数据流量收费。尤其值得一提的是,H.264在具有高压缩比的同时还拥有高质量流畅的图像,正因为如此,经过H.264压缩的视频数据,在网络传输过程中所需要的带宽更少,也更加经济。H.264/AVC/MPEG-4 第 10 部分包含一些新功能,使它比旧标准更多有效地压缩视频,为各种网络环境中的应用提供更大的灵活性。尤其是,一些这类关键功能包括:多画面间图片预测包括以下功能: 以前使用图片作为编码引用更灵活的方式,比在过去的标准,允许达 16 参考帧 (或 32 引用字段,在交错编码的情况下),在某些情况下使用。这就是与先前的标准,不同地方限制通常之一 ;或常规"B 图片"(B-帧),两个。此特定功能通常允许适度的改进的比特率和质量在大多数场景中。但在某些类型的场面,例如那些与重复的动作或背部来回现场削减或被揭露的背景区域,它允许比特率显着减少,同时保持清晰。 可变块大小运动补偿(分块) 与大为 16 × 16 和 4 × 4,使精确的运动区域分割为小块大小。支持的 luma 预测块大小包括 16 × 16、 16 × 8、 8 × 16、 8 × 8、 8 × 4、 4 × 8 和 4 × 4,其中许多可以在单个宏块一起使用。色度预测块大小是根据色度抽样在使用相应地变小。 与最大值 32 在建造的 16 B 宏块的情况下使用每个宏块 (一个或两个每个分区) 的多个运动矢量的能力 4 × 4 分区。运动向量的每个 8 × 8 或更大的分区区域可以指向不同的参考图片。 在B 帧,包括宏-块,从而导致更多有效的编码使用 B 帧时使用任何宏块类型的能力。此功能尤其是漏掉了从MPEG-4 ASP. 六个水龙头筛选半 pel luma样本预测,更锋利的亚像素运动补偿的推导。季像素运动是由线性插值法的 halfpel 值,以节省电能,处理派生的。 季像素精度运动补偿,使移动领域的位移的精确描述。为色度分辨率通常是减半两个垂直和水平方向 (见4:2:0) 因此色度的运动补偿使用八分之一色度像素网格单位。 加权的预测,允许一个编码器,以执行运动补偿时, 指定缩放和偏移量的使用,并提供一个重要的好处,在特殊情况下的性能 — — 到黑色淡入淡出、 淡入和跨-淡入淡出的过渡等。这包括 B-帧,隐式加权的预测和显式加权预测为 P 帧。 空间预测从边缘的相邻块的"内部"编码,而不是在MPEG-2中找到的"直流"仅预测部分 2 和变换系数预测在H.263v2和 MPEG-4 部分 2 中找到。这包括 16 × 16、 8 × 8 和 4 × 4 (其中只有一种类型可以被用在每个宏块内的 luma 预测块大小). 无损的宏块编码功能,其中包括: 无损"PCM 宏块"的代表性模式直接代表视频数据样本,允许特定区域的完美代表和允许一个严格的限制,放在每个宏块的编码数据的数量。 增强无损宏块的代表性模式允许特定区域时通常使用比 PCM 模式极大地少量位完美地再现。 灵活的隔行扫描-扫描视频编码功能,其中包括: 宏块自适应帧-字段 (MBAFF) 编码、 编码为 16 × 16 宏块允许在域模式下 (与 MPEG-2,凡在被编码为一个帧的图片加工场模式结果在加工中 16 × 8 半宏块相比) 的帧的图片使用宏块的双结构。 图片自适应帧字段编码 (每或 PicAFF) 允许自由地选择的混合的图片编码在这两个字段组合在一起进行编码或作为个别单一字段要么作为完整的帧。 新变换设计功能,包括: 精确匹配整数 4 × 4 块空间变换,允许精确地放置的残馀信号很少的"响"经常发现与事先编解码器的设计。这种设计是在概念上类似于知名的离散馀弦变换 (DCT),介绍了在 1974 年由N.艾哈迈德、 T.Natarajan 和 K.R.Rao,这是引文 1 中的离散馀弦变换。然而,它是简化和作出提供确切地指定解码。 精确匹配整数 8 × 8 块空间变换,允许高度相关的地区要压缩更有效地比与 4 × 4 变换。这种设计是在概念上类似于知名离散馀弦变换,但简化并作出提供确切地指定解码。 自适应编码器选择之间的 4 × 4 和 8 × 8 的变换块大小的整数转换操作。 中学的阿达玛变换应用于色度 DC 系数 (和也luma中一种特殊情况),获取更多压缩在光滑的区域的主空间变换的"DC"系数上执行。 量化设计包括: 对数步大小控制更容易位率管理由编码器和简化逆量化缩放 缩放矩阵由基于感性的量化优化编码器选择自定义的频率量化 有助于防止对其他DCT常见的阻塞工件中循环去块效应滤波器-基于图像压缩技术,从而更好地视觉外观和压缩效率 熵编码设计包括: 上下文自适应二进制算术编码(算术) 算法对无损压缩的语法元素在视频流知道在给定的上下文中的语法元素的概率。算术比 CAVLC 更有效地压缩数据,但需要更多的处理进行解码。 上下文自适应可变长度编码(CAVLC),这是较低复杂性替代的算术编码量化的变换系数值。虽然比算术,CAVLC 更低的复杂性是更详细和更有效率比通常用于将代码系数在其他事先设计的方法。 一种常用简单和高度结构化变长编码(VLC) 技术为许多不通过算术或 CAVLC,称为指数-戈隆布编码(或哥伦布) 编码的语法元素。 损失复原功能包括: 允许相同的视频语法要在许多网络环境中使用的网络抽象层(宇) 定义。H.264 的一个非常基本的设计概念是以生成自包含的数据包,若要删除标题重复和 MPEG-4 头扩展代码 (港灯)。这被通过解耦信息有关的多个切片从媒体流。更高级别的参数的组合称为一个参数集。H.264 规格包括两种类型的参数设置: 序列参数设置 (SPS) 和图片参数设置 (PPS)。设置仍保持不变在编码的视频序列,整个活动序列参数和活动图片参数设置仍保持不变内编码的图片。序列和图像参数集的结构包含如图片大小,可选编码模式被雇用和宏块到切片组映射信息。 灵活宏块排序(FMO),也称为切片组和任意切片订购 (ASO),这是技术重组订购的基本地区 (块) 图片中的表示形式。通常被视为一个错误或损失的鲁棒性特点,鱼类统营处和麻生太郎还可用于其他目的。 数据分区 (DP),提供的能力,更重要的是并不太重要的语法元素分成不同的数据包的数据),使不等错误保护 (UEP) 的应用程序和其他类型的错误或损失的鲁棒性改进功能。 冗馀片 (RS),错误/丢失的鲁棒性功能,允许编码器发送额外所代表的图片 (通常在低保真) 地区,如果主要表示法是损坏或丢失,可以使用。 帧编号、 一种功能,允许创建"子序列",通过额外的照片等图片,检测和隐秘性的整个图片,网络数据包丢失或通道错误可能会导致损失之间可选列入启用世俗的可扩展性。 切换切片,称为 SP 和硅切片,允许一个编码器,以直接一个解码器,以跳到正在进行的视频流为这种目的作为视频流的位率切换和"欺骗模式"操作。当解码器跳进视频流使用 SP/SI 功能的中间时,它可以精确匹配解码的图片在那尽管作为引用在切换之前在所有使用不同的图片或没有图片视频流中的位置。 为防止意外仿真的启动代码,这是特殊序列的编码的数据,允许随机访问成位流中的位和字节对齐方式可以失去字节同步的系统中恢复一个简单的自动过程。 补充增强信息 (SEI) 和视频可用性信息 (VUI),是额外的信息,可以插入到位流以增强视频的应用,为多种目的。包含 3D 安排的 SEI FPA (帧包装安排) 消息: 0: 棋盘-像素或者是从 L 和 R 1: 按列交错列变更-L 和 R 2: 行交替-L 和 R 按行隔行扫描 3: 并排的-L 是在左边,右边 R 4: 上下-L 是在上面,R 的底部 5: 帧交替-每个框架的一个视图 辅助图片,可以用于这种目的作为alpha 合成. 支持单色 (4:0:0) 4:2:0、 4:2:2 和 4:4:4色度抽样(根据所选的配置文件)。 示例支持位深度精度从 8 到 14 位每个样品 (根据所选的配置文件)。 对个别颜色进行编码的能力的飞机作为他们自己的独特图片切片结构,宏块模式、 运动矢量等,允许编码器以一种简单的并行结构设计 (支持仅在三个 4:4:4 能够配置文件)。 图片顺序计数、 可以使保持的图片和隔绝计时信息,允许进行的计时信息的解码图片中的样本值排序的功能和控制/改变了单独的系统而不会影响已解码的图片内容。这些技术,以及其他几个帮助 H.264 要执行明显优于任何事先的标准在各式各样的各式各样的应用程序环境的情况下。H.264 可以经常执行从根本上比 MPEG-2 视频 — — 通常获得相同质量的比特率的一半或更少,尤其是对高比特率和高分辨率的情况。像其他的 ISO/IEC MPEG 视频标准,H.264/AVC 有一个参考软件实现,可免费下载。它的主要目的是给的 H.264/AVC 的功能,而不是有用的应用程序是示例。也正在一些参考硬件设计工作,在运动图像专家组。上述完成 H.264/AVC 涵盖 H.264 的所有配置文件的功能。编解码器的配置文件是一组的功能的确定,以满足特定集规格的预期应用该编解码器。这意味着许多人列出的功能不受支持的某些配置文件。下一节中讨论了各种配置文件的 H.264/AVC。
配置文件/H264
该标准定义了 21 套的能力,被称为,针对特定的应用程序的类。非可缩放 2D 视频应用程序的配置文件包括以下内容:受约束的基准配置文件 (CBP) 主要为低成本的应用程序,此配置文件是最通常用于视频会议和移动应用程序。它对应的是共同的基线、 主和高配置文件之间的功能子集。 基线配置文件 (BP) 主要是为需要额外的数据损失鲁棒性的低成本应用程序,此配置文件用于在一些视频会议和移动应用程序。此配置文件包括中约束的基准配置文件,支持的所有功能加上的鲁棒性的损失 (或作其它用途例如低延迟多点视频流合成) 可以使用的三个附加功能。此配置文件的重要性已褪色有些自定义的约束的基线配置文件的 2009 年。所有约束的基准配置文件码也被看作是码的基准配置文件,这些两个配置文件共享相同的配置文件标识符代码值。 扩展配置文件 (XP) 作为流媒体视频配置文件,此配置文件有相对较高的抗压能力和鲁棒性的数据损失和服务器流切换到一些额外技巧。 主配置文件 (MP) 此配置文件用于定义,在 DVB 标准中使用的 MPEG-4 格式的标准清晰度数字电视广播。它是不,不过,用于高清晰度电视广播节目,作为高配置文件在 2004 年为该应用程序开发时褪色此配置文件的重要性。 高配置文件 (HiP) 广播和光盘的存储应用程序,尤其是对高清晰度电视的应用程序的主配置文件 (例如,这是通过蓝光光盘的存储格式和数字电视高清晰度电视广播服务的配置文件)。 逐步高调 (抑制) 类似于高配置文件,但没有字段编码功能的支持。 受约束的高配置文件 类似于逐步高配置文件中,但无 B (bi 预测) 切片的支持。 高 10 配置文件 (Hi10P) 此配置文件超越了典型的主流消费者的产品能力,在高配置文件,生成添加支持为每个样本的解码的图像精度达 10 位。 高 4:2:2 的配置文件 (Hi422P) 我主要针对专业使用的应用程序的隔行扫描的视频,此配置文件生成上高 10 配置文件中,添加支持为 4:2:2色度抽样格式同时使用每个样本的达 10 位解码图片精度。 高 4:4:4 预测配置文件 (Hi444PP) 此配置文件生成上高 4:2:2 的配置文件,支持最多 4:4:4 色度采样,每个样品,达 14 位和另外支持高效无损地区编码和编码的每一幅图片作为单独的颜色的三个平面。便携式摄像机、 编辑和专业的应用程序,标准包含四个附加帧内-仅配置文件,它们被定义为相应的其他配置文件的简单子集。这些是主要为专业人员 (例如摄像机和编辑系统) 的应用程序:高 10 内配置文件 高 10 配置文件限制所有内部使用。 高 4:2:2 内部配置文件 高 4:2:2 的配置文件限制为所有内部使用。 高 4:4:4 内部配置文件 高 4:4:4 的配置文件限制为所有内部使用。 CAVLC 4:4:4 的内部配置文件 高 4:4:4 的配置文件限制为所有内部使用和 CAVLC 熵编码 (即,不支持算术)。由于该的可伸缩视频编码(SVC) 的扩展,标准包含五个额外,它们被定义为 (由第二个单词中的可扩展的配置文件名称标识) 的基底图层的 H.264/AVC 配置文件组合和实现可伸缩扩展的工具:可扩展的基准配置文件 主要针对视频会议、 移动和监视应用程序,此配置文件生成的基底图层 (的位流的一个子集) 必须符合该约束的基线配置文件上。对于可伸缩性工具,启用的可用工具的一个子集。 可扩展约束的基准配置文件 可扩展的基准配置文件的一个子集主要供实时通信的应用程序。 可扩展的高配置文件 主要是针对广播和流媒体应用程序,此配置文件生成的基底图层必须符合 H.264/AVC 高配置文件上。 可扩展约束的高配置文件 子集的可扩展的高配置文件主要用于实时通信的应用程序。 可扩展高内部配置文件 主要针对生产应用程序,此配置文件是约束为所有内部使用的可扩展高配置文件。由于该多视图视频编码(MVC) 的扩展,标准包含了两个:立体声高配置文件 此配置文件的目标是两个视图立体3D 视频和 MVC 扩展的间查看预测能力的高配置文件的工具结合在一起。 多视角高配置文件 此配置文件支持使用间图片 (世俗) 和 MVC 视图间预测,两个或多个视图,但不支持字段图片和宏块自适应帧字段编码。 多视角深度高配置文件
位深度 (每个样本)
4:2:0 / 4:2:2
4:2:0 / 4:2:2 / 4:4:4
灵活宏块排序 (FMO)
Arbitrary slice ordering (ASO)
冗余片 (RS)
SI 和 SP 切片
交错的编码 (PicAFF,MBAFF)
算术熵编码
4: 0: 0 (单色)
与 4 × 4 8 × 8 变换的适应性
量化缩放矩阵
单独的颜色平面编码
预测的无损编码
AVC 标准的版本包括以下完成修改、 更正和修正 (日期是最后批准日期在国际电信联盟-T,虽然最后"国际标准"批准日期在 ISO/IEC 是有些不同的稍晚在大多数情况下)。每个版本代表的集成到文本的下一个较低版本的更改。加粗面临版本是版本,其中包括相对较重大技术改进。版本 1:(2003 年 5 月 30 日)第一次批准的包含基准,主要是和扩展配置文件的 H.264/AVC 版本。 版本 2: (2004 年 5 月 7 日) 包含各种次要更正更正。 版本 3:(3 月 1,2005 年)H.264/AVC 包含提供包含高,高 10、 (FRExt)的保真度范围扩展的第一修正案增添主要高 4:2:2,和高 4:4:4配置文件。 版本 4: (2005 年 9 月 13 日) 更正包含各种次要更正和添加三个纵横比的指标。 版本 5: (2006 年 6 月 13 日) 组成的事先去除的修订高 4:4:4 (作为在 ISO/IEC 的更正处理) 的配置文件。 版本 6: (2006 年 6 月 13 日) 修订组成的次要扩展喜欢扩展色域的颜色空间支持(与上述纵横比指标在 ISO/IEC 捆绑)。 版本 7: (2007 年 4 月 6 日) 修订包含另外的高 4: 4: 4 预测和四个内唯一配置文件 (高 10 内,高 4: 2: 2 内,高 4:4:4 内,和CAVLC 4: 4: 4 内)。 版本 8:(11 月 22,2007 年)H.264/AVC 包含的可伸缩视频编码(SVC) 修正案,包含可扩展的基线、可扩展性高,和可扩展的高帧内的配置文件项重大补充。 版本 9: (2009 年 1 月 13 日) 包含一些小的修改更正。 版本 10: (2009 年 3 月 16 日) 修订包含新的配置文件 (约束的基线配置文件) 与只有共同以前支持的各种功能的子集定义指定的配置文件。 版本 11:(3 月 16,2009 年)H.264/AVC 含有多视图视频编码(MVC) 的扩展,包括多视图高配置文件修订重大补充。 12 版: (2010 年 3 月 9 日) 修订包含新 MVC 的配置文件 (立体声高配置文件) 定义的两个视图视频编码与交错编码工具和指定额外的 SEI 消息 (帧包装安排 SEI 消息) 的支持。 13 版: (2010 年 3 月 9 日) 包含一些小的修改更正。 第 14 版: (2011 年 6 月 29 日) 指定一个新的水平 (水平 5.2) 支持更高处理速率在每秒和一个新的配置文件 (逐步高配置文件) 支持只编码工具以前指定的高配置文件的帧最大宏块的修订。 版本 15: (2011 年 6 月 29 日) 包含一些小的修改更正。 版本 16: (2012 年 1 月 13 日) 包含的三个新的配置文件主要用于实时通信的应用程序定义的修订:约束高、可扩展约束的基线,和可扩展约束高配置文件。 版本 17: (2013 年 4 月 13 日) 与其他 SEI 消息指标修订。 版本 18: (2013 年 4 月 13 日) 修订以指定的深度映射数据的 3D 立体视频,包括一个多视图深度高配置文件的编码。 版本 19: (2013 年 4 月 13 日) 更正更正为多视图视频子码流提取过程中的错误。 20 版: (2013 年 4 月 13 日) 指定额外的颜色空间标识符 (包括支持ITU-R 建议 BT.2020 UHDTV) 和其他的修正模型中的色调映射信息 SEI 消息的类型。
基于硬件的编码和解码/H264
请参见:列表的照相机与板载视频流编码因为 H.264 编码和解码要求大量的计算能力在特定类型的算术运算,在通用 Cpu 运行的软件实现高效率通常较少力量。不过,最新的四核通用 x 86 Cpu 有足够的计算能力来执行实时标清及高清编码。压缩效率取决于视频的算法实现,不在是否使用硬件或软件来实现。因此,硬件和软件基于的执行更是电源效率、 灵活性和成本之间的差异。为提高电源效率和减少硬件形式因素,可能雇用专用硬件,为完整的编码或解码过程中,或在 CPU 控制的环境内加速援助。基于 CPU 的解决办法是已知是灵活得多,尤其是编码必须进行时同时多格式、 多比特率和各项决议 (多屏幕视频) 和可能用上的容器格式支持的附加功能,先进综合的广告功能等。基于 CPU 的软件解决方案通常使得更容易在相同的 CPU 内的多个并发编码会话进行负载平衡。介绍了在 2011 年 1 月 CES (消费电子展) 的第 2 代英特尔"桑迪桥"酷睿 i3/i5/i7处理器提供称为英特尔快速同步视频上芯片硬件全面高清 H.264 编码器。硬件 H.264 编码器可以是ASIC或FPGA。FPGA 是一个一般的可编程芯片。要使用 FPGA 作为硬件编码器,H.264 编码器设计需要自定义应用程序的芯片。完整的高清 H.264 编码器可以在一个单一的低成本 FPGA 芯片上运行 2009 年 (高配置文件、 水平 4.1,1080p,30 帧/秒)。ASIC 编码器与 H.264 编码器功能,可从许多不同的半导体公司,但在 ASIC 中使用的核心设计通常由芯片及媒体, On2 (原 Hantro,由谷歌收购),想象力的技术,NGCodec 等几个公司的一个授权。一些公司已提供的 FPGA 和 ASIC 产品。德州仪器生产一线的胳膊 + 执行 DSP H264 BP 的 DSP 内核编码 1080p 30 帧每秒。这允许 (其中,作为高度优化的 DSP 代码实现) 的编解码器的灵活性时正在比通用 CPU 上的软件效率更高。
&|&相关影像
互动百科的词条(含所附图片)系由网友上传,如果涉嫌侵权,请与客服联系,我们将按照法律之相关规定及时进行处理。未经许可,禁止商业网站等复制、抓取本站内容;合理使用者,请注明来源于。
登录后使用互动百科的服务,将会得到个性化的提示和帮助,还有机会和专业认证智愿者沟通。
此词条还可添加&
编辑次数:7次
参与编辑人数:7位
最近更新时间: 07:21:40
贡献光荣榜}

我要回帖

更多关于 安卓 h.264解码 的文章

更多推荐

版权声明:文章内容来源于网络,版权归原作者所有,如有侵权请点击这里与我们联系,我们将及时删除。

点击添加站长微信