现在的位置: 首页 > 综合 > 正文

H264 概述

2013年05月24日 ⁄ 综合 ⁄ 共 3058字 ⁄ 字号 评论关闭
文章目录

来源:http://www.vcodex.com/files/H.264_technical_introduction.pdf

广播电视和家庭娱乐已经通过即将到来的数字tv和dvd视频掀起了新的革命。

这些应用以及其他更多的应用由于视频压缩技术标准变得可能了。下一个标准是mpeg系列,mpeg4开始了新一代基于互联网的视频应用,虽然ITU-T h.263视频压缩标准当前正广泛应用在视频会议领域。mpeg4和h.263标注基于来自circa1995的视频压缩技术。负责这些标准的组织, 动态图像专家组,视频编码专家组,处于开发新标准的最终阶段,新标准承诺比MPEG4,H.263更强大,提供更好的视频图像压缩,另外还提供一些列的特性支持高质量,低比特率的流视频。新标准”高级视频编码“的历史回顾起来至少又7年了。

在1995年,为了视频电话完成了原始的h.263标准以后,itu-t视频编码专家组开始2个更长远的开发领域的工作:一个短期的努力是添加额外的特性到h.263(这导致了这个标准的版本2), 一个长期的努力是开发一个新标准来实现低比特率视频通信。这个长期的努力导致h.26L标准的起草, 相对于itu之前的标准,提供显著改善的视频压缩。在2001年,iso的动态图像专家组, 认识到h.26L的潜在影响,并且联合视频团队(jvt)成立了, 它包括了来自mpge和cveg的专家。jvt的主要工作是开发h.26L草稿,使之成为一个完整的国际标准。事实上,结果是2个一样的标准:iso
mpge5 par10 of mpeg4 已经 itu-t的 h.264。 这个标准的”官方“的头衔是”高级视频编码“; 但是, 最为广泛认知的还是它在itu的文档号码, h.264。

2 h.264编码

和早期的标准(比如,mpeg1, mpeg2 and mpeg4)一样,h.264标准不是显示的定义了一个编解码器。而是这样的,这个标准定义了一个已经编码好的视频bit流的语义,以及解码这些比特流的方法。实际当中,一个兼容的编码器和解码器可能需要包含如图2-1和图2-2的功能单元。虽然图上显示的这些功能对于兼容性来说是必须的,编解码器结构中的相当大的一些变化也是存在的。基本的功能单元(预测,变形,量化,熵编码)和之前的标准(mpeg1,mpeg2,mpeg4,h.261, h.263)相差很小。h.264重要的变化体现在每一个功能单元的细节中。

图2-1的编码器,包含2个数据流,一个转发路径(从左到右,蓝色显示),一个”重构“路径(从右到左,品红色显示)。图2-2中,解码器的数据流从右到左显示,这样更容易表明编码和解码的相似性。

2.1 编码器前进路径

一个帧fFn就绪,将被编码。帧被处理成许多单元的宏块(对应原始图像中的16x16像素块),每一个宏块用”帧内“和”帧间“模式编码。在每一个情形下,一个预测宏块P基于重构帧被构造。

在”帧内“模式下, P从当前帧n的采样来构造,这个帧n之前已经编码,解码和重构过。

在”帧间“模式下,P通过从一个或者多个参考帧的运动补偿预测来构造。

预测块P减去当前的块,产生一个余数或者一个不同的块Dn,这个块通过块变形被变形,然后被量化,得到给定一个量化变形系数集合X。这些系数被重新排序和熵编码。被用来解码块熵编码系数和面信息构成了压缩的比特数据流。

2.2 编码器重构路径

量化的块系数X被解码用来重构一个帧,这个帧是为了编码更多的块。系数X被反量化,和反变形来产生一个不同的块Dn‘,Dn' != Dn; 量化的过程引入了失真。Dn’是Dn的扭曲版本。

预测块P添加到Dn‘产生一个重构的块uFn’(一个原始块的扭曲版本),重构的参考帧从一系列的块F'n来构造。

2.3 解码器

解码器接收来自NAL(网络抽象层)的数据, 熵解码和重新排序得到量化系数X,反量化和反变形得到Dn‘,这个Dn’和编码器重构路径中的Dn‘不一样,使用头信息,解码器创建预测块P,和编码器中的原始预测块P是一样的。P加上Dn’产生uF‘n,然后过滤产生块F’n。

补充:

效果对比

 (转自http://blog.csdn.net/sunshine1314/article/details/712401)

H.264开源解码器介绍

1JM decoder

JM decoderH.264的官方源码,通常也称为校验模型。其特点是支持特性好,实用性差。本文选用的程序是JM86,不支持high
profile
,因为本文不对high profile部分进行实验比较。

NOTE: JM一直没有做实用化方面的努力,所以其解码速度代表的是2003年的水平。

 

2T264 decoder

T264是国内的开源项目,T264 decoder的程序做过汇编优化,速度还可以,但只能解T264本身的码流。作者对T264
decoder version 0.14
2005-3-29)作了修改,支持baseline的解码。

 

3x264 decoder

x264本没有decoder,但其包含decoder的部分函数雏形,猜想作者在一开始时是准备实现decoder,后来可能是因为有了ffmpeg,就放弃了这个想法(纯粹属于猜测,呵呵)。

本文的x264 decoder是作者在x264 svn check out 2005.12.26的基础上实现的,支持baseline的解码。

 

4ffmpeg libavcodec

ffmpeg是一个大项目,它包含各种音视频标准的codec,还支持各类file format.avi,
.mp4, .mkv and etc
)的parsing。所以,很多开源项目都有直接或间接地采用了ffmpeg,如mplayer播放器就是直接采用了ffmpeg,而mpc播放器则是先采用了ffdshow
filter
,而ffdshow又采用了ffmpegffmpeg是一个非常棒的音视频编解码库,支持的标准非常全,而且编解码速度也很快。

本文实验采用的是cvs check out 2006.02.20的版本,作者对其中的apiexample demo进行了简单的修改,用于解码h.264码流

 

5Intel IPP simple player

IntelIPP库,全称为Integrated Performance Primitives,在Intel的各种处理器平台(IA-32,
Itanium, xscale and etc
)上实现了信号处理常用算法、常用数学运算及音视频编解码算法等等。IPP给我的第一感觉是,在Intel的处理器平台上,它实现的各种算法应该是最快的,至于实际结果如何,待等到实验比较后见分晓。

本文采用的IPP库版本为IA32 5.1.017 评估版

Intel IPP simple player是用于播放各种音视频文件的简单播放器,用c++实用,具体算法调用IPP库来实现。本文采用的simple
player
版本是5.0.017

h.264的特性(第五页)

来自 http://www.jdl.ac.cn/rencai/lunwen/zhangpeng090209.pdf

h.264的码流结构

来自 http://oddy.blog.hexun.com/51703741_d.html

三种配置

1) 基线配置,2)主配置,3)扩展配置,对应的码流要求是不一样的。

h.263的4层数据封装

1)图像,2)组块,3)宏块,4)块,h.264的封装分为2层(图像层VCL video coding layer,网络抽象层 NAL net abstract layer)。

抱歉!评论已关闭.