H.264开源解码器评测分析

H.264开源解码器评测分析

H.264开源解码器评测

Peter Lee 2006.05.07 videosky.9126.com

20035月,当H.264编码标准草案发布时,很多人都觉得H.264太复杂,不宜实用。眨眼间3年过去了,以往的论断、疑惑被如今的现实冲洗的干干净净。随着硬件性能的提高和视频编码工作者对H.264的不断优化,如今的H.264已完全实用,最新的达芬奇芯片上能实现D1分辨率(720*480)视频的实时编码,而对于解码,普通的PC机就能实现x264编码的DVDrip电影的流畅播放。纵观过去的三年,有多少人对H.264倾注了热情和汗水才换来今天的成绩,而那些H.264的开源项目以及参与这些项目的开发者自然是功不可没。

本文评测的是作者接触过的H.264开源解码器,包括:JM decoder, T264 decoder, x264 decoder, ffmpeg libavcodec, Intel IPP simple player。评测的内容有:对H.264特性的支持、解码速度以及二次开发难易程度。

一、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.142005-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特性的支持

1JM86 decoder

support baseline, extended, main profile

2T264 decoder

baseline

3x264 decodeer

baseline

4ffmpeg libavcodec

support baseline, main profile, high profile except the feature: paff, mbaff…

5Intel IPP simple player

support baseline and main profile

三、评测条件

1、所用测试序列

1 所用测试序列

 

分辨率

序列名称

特点

编码帧数

QCIF

foreman

纹理复杂度一般

运动剧烈:画面人物和镜头均运动,还有场景的切换

300

CIF

foreman

同上

300

mthr_dotr

背景简单

画面人物运动幅度不大

100

mobile

纹理复杂度极高

运动形式丰富——画面有多个运动物体,但各运动物体运动方向规则且平缓,镜头也在移动

200

D1(720*480)

soccer2

镜头有移动,画面的足球运动员的运动也很剧烈

300

puppy

镜头无运动,画面中的玩具小狗也只有简单的运动

100

H.264开源解码器评测分析

(a) soccer2

H.264开源解码器评测分析

(b) puppy

2、编码参数

编码程序:x264 svn check out 2006.05.06

参数设置示例:x264enc --frames 300 --no-cabac --qp 26 -o test.264 foreman.cif 352x288(相当于baseline

量化步长:2636

2、环境

CPU: Pentium4 2.4GHz, RAM: DDR 512M

OS: windows2000 professional+sp4

3、解码器程序编译环境

JM86 decoder: vc71 release

T264 decoder: vc71 release

x264 decodeer: vc71 release

ffmpeg libavcodec: MinGW

Intel IPP simple player: vc71 release + directX 9.0c sdk

4、解码参数设置

不保存重建序列(note: 是否保存重建序列对于解码速度的影响很大)

四、解码速度比较结果

待补充完整。。。

2 解码速度比较(单位:fps

<td style="BORDER-RIGHT: windowtext 0.5pt solid; PADDING-RIGHT: 5.4pt; PADDING-LEFT: 5.4pt; BORDER-LEFT-COLOR: #d4d0c8; PADDING-BOTTOM: 0pt; BORDER-TOP-COLOR: #d4d0c8; PADDING-TOP: 0pt; BORDER-BOTTOM: windowtext 0.5pt solid; BACKGROUND-COLOR: transparent; mso-border-left-alt

分辨率

序列名称

量化步长

JM86 decoder

x264 decodeer

ffmpeg libavcodec

QCIF

foreman

26

50fps左右

684.93

1196

36

874.64

1916.67

CIF

foreman

26

15fps左右

168.44

303.86

36

190.11

503.37

mthr_dotr

26