H.264开源解码器评测

Peter Lee 2006.05.07 videosky.9126.com

2003年5月,当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开源解码器介绍

1、JM decoder

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

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

2、T264 decoder

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

3、x264 decoder

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

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

4、ffmpeg libavcodec

ffmpeg是一个大项目,它包含各种音视频标准的codec,还支持各类file format(.avi, .mp4, .mkv and etc)的parsing。所以,很多开源项目都有直接或间接地采用了ffmpeg,如mplayer播放器就是直接采用了ffmpeg,而mpc播放器则是先采用了ffdshow filter,而

ffdshow又采用了ffmpeg。ffmpeg是一个非常棒的音视频编解码库,支持的标准非常全,而且编解码速度也很快。

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

5、Intel IPP simple player

Intel的IPP库,全称为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特性的支持

1、JM86 decoder

support baseline, extended, main profile

2、T264 decoder

baseline

3、x264 decodeer

baseline

4、ffmpeg libavcodec

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

5、Intel 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

2、编码参数

编码程序:x264 svn check out 2006.05.06

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

量化步长:26和36

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

分辨率

序列名称

量化步长

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

182.82

421.28

36

200

634.62

mobile

26

129.28

190.07

36

173.01

353.46

D1(720*480)

soccer2

26

5fps左右

53.04

105.17

36

60.19

158.12

puppy

26

61.54

【note】

t264的解码程序能解jm baseline的码流,但无法解上面x264生成的码流,故无法给出实验结果。但通过对自身t264 fast mode码流的解码速度进行统计,t264 decoder和x264 decoder,解码速度降低40%左右

Intel IPP simple player在我的电脑上编译未成功,在其它成功编译的电脑(xp系统,directx, vs.net, IPP均安装于C盘)上进行简单测试,其解码速度和ffmpeg的解码速度相比,降低10%左右

【简单结论】

解码速度:ffmpeg > IPP simple player > x264 decoder > t264 decoder > jm86 decoder

以ffmpeg的编码速度为基准,假设为100fps,则:

IPP simple player:90fps

x264 decoder:50fps

t264 decoder:30fps

jm86 decoder:3fps

五、程序开发上的比较

我估计阅读本文的大部分读者都是搞开发的,因此,阅读过程中自然会思考如何在程序开发上借鉴或者采用以上开源的H.264解码器,下面就针对程序开发上的难易、适用场合等作个比较。

1、JM86 decoder

适合写paper群体

2、T264 decoder

3、x264 decodeer

两者代码非常相似,所以就合在一起讲了。这两个源码的程序结构都比较清晰,支持vc和gcc的编译环境,但对H.264的特性支持不好,解码速度和ffmpeg相比,还有差距。

4、ffmpeg libavcodec

程序结构比较差,

H.264解码的代码基本上在h264.c一个文件中,这个文件有8000多行,不利于阅读。

编译环境为gcc或MinGW,移植到vc下比较难(我尝试过)。

解码速度快(BTW: 通过doom9论坛了解到,目前最快的h.264解码器是CoreAVC decoder,比ffmpeg快50%左右)。

对于H.264特性的支持好。

5、Intel IPP simple player

分两个方面讲:

(a)IPP库

我觉得是非常棒的,但实现的是H.264解码(IPP中也有H.264编码)的一些关键函数,如deblock,dct,插值补偿等,不能直接拿来用。

其它的缺点:IPP库是商业软件,要money的,而且只支持Intel平台

(b)simple player

开源,用c++写的,而且是directshow编程,也就是说只支持windows平台。

其解码速度比ffmpeg慢10%左右,我觉得原因不在于IPP库,而是simple player的代码不够完善。

谨以本文对所有参与过H.264开源项目的开发者致以滔滔江水连绵不绝的敬意之情。

H.264开源解码器评测相关推荐

  1. H.264开源解码器评测(转发)

    H.264开源解码器评测(转发) 2003年5月,当H.264编码标准草案发布时,很多人都觉得H.264太复杂,不宜实用.眨眼间3年过去了,以往的论断.疑惑被如今的现实冲洗的干干净净.随着硬件性能的提 ...

  2. H.264软件解码器在PXA270平台上的优化

    罗 嵘,何 苦 时间:2009年04月24日 摘 要: 研究了嵌入式系统中H.264 Baseline软件解码器设计和优化的问题,提出了四种有效的优化方法,并在PXA270平台上进行了测试.测试结果显 ...

  3. h.264 视频解码的一点小经验(ffmpeg)

    最近做视频文件264解码,由于对这个领域不是很熟悉,感觉困难重重.不过经过不懈的努力,已经取得一些进展,心里感觉特别庆幸. 刚开始做这个的时候,由于不熟悉,就在网上搜寻资料,网络上的资料虽然多,但是却 ...

  4. h.264 视频解码的一点小经验

    最近做视频文件264解码,由于对这个领域不是很熟悉,感觉困难重重.不过经过不懈的努力,已经取得一些进展,心里感觉特别庆幸. 刚开始做这个的时候,由于不熟悉,就在网上搜寻资料,网络上的资料虽然多,但是却 ...

  5. H.264官方软件JM源代码简单分析-解码器ldecod

    ===================================================== H.264/H.265 官方源代码分析文章: H.264官方软件JM源代码简单分析-编码器l ...

  6. H.264官方软件JM源代码简单分析-解码器ldecod(转载)

    转载自 雷霄骅 大神博客 https://blog.csdn.net/leixiaohua1020 ================================================== ...

  7. NVDKC6416平台H.264算法优化

    本文转载自:http://blog.csdn.net/embedesign/archive/2009/09/15/4556486.aspx,版权归原作者,编辑:小乙哥 多媒体通信终端设备具有广泛的应用 ...

  8. ITU-T H.264/MPEG-4 AVC编解码原理介绍

    本文档适合基本了解数字图像处理的初学者,仅用于研究交流,由于资料来源较多,只能尽量在相关章节注明出处. 转载本文请注明出处http://blog.csdn.net/chinadragon76/arti ...

  9. 十三、熵编码算法(4):H.264使用CAVLC解析宏块的残差数据

    GitHub代码地址:点击这里 1. H.264的CAVLC解析宏块残差数据的流程 在H.264的解码器在解析宏块的残差数据时,其流程类似于上文提到的CAVLC编码的逆过程.在解析一个宏块残差的时候, ...

  10. 四. 常见H.264视频编解码器(X264和JM)及参考软件JM的下载与编解码

    常见H.264视频编解码器(X264和JM)及参考软件JM的下载与编解码 我们已经知道,H.264是一种视频压缩标准,其只规定了符合标准的码流的格式,以及码流中各个语法元素的解析方法.H.264标准并 ...

最新文章

  1. 纪念逝去的岁月——C/C++选择排序
  2. msm8916 dt选用规则
  3. Web网站架构设计(转)
  4. C/C++初学者快速提升?
  5. c语言程序中必不可少的,C语言程序设计(第3章程序控制语句)2
  6. 无法搜索到电脑模拟热点的可以尝试一下(adhoc补丁)
  7. Python下面向对象的三大实例
  8. 峰Redis学习(6)Redis 数据结构(sorted-set的操作)
  9. C/C++深度分析(二)
  10. DEL: Restore Boxes after VirtualBox Upgrade
  11. 【SpringBoot_ANNOTATIONS】AOP 01 AOP功能测试
  12. 用Nginx禁止指定IP、国外IP访问我的网站
  13. 手机号正则表达式(含大陆港澳台)
  14. 华为这次是给所有企业挡了子弹
  15. i7z – 用来查看CPU状况
  16. Zigbee 设置信道,PANID,发射功率
  17. 古代玻璃制品的化学成分分析与鉴别
  18. 002 fidder中 Customize Rules打不开却无法下载问题
  19. java JDBC连接MySQL数据库调用存储过程进行查询
  20. 厦门雅迅网络 Telematics(汽车远程信息服务)的中国期待

热门文章

  1. 联想电脑无法进入计算机,联想电脑进不去主界面怎么办
  2. 极限思想之阿基里斯和乌龟赛跑
  3. c语言调用even函数,定义一个判断奇偶数的函数even(int n),当n为偶数时返回1,否则返回0,并实现对其调用。...
  4. 仿苹果 底部弹窗 选择列表
  5. centos异常断电重启后,无法进入系统
  6. 蓝桥杯校赛第十二届第二期模拟赛 c语言
  7. 英国开创自我修复城市概念,利用无人机和机器人自动检测道路裂缝并进行修复
  8. HDU 4699 对顶栈
  9. DNF的SPK文件解析笔记
  10. 国内首款PCB资料分析软件,华秋DFM使用介绍