基于H.264的嵌入式视频解码研究

2013-09-19 10:18张正华胡方来龚晓亮
无线电工程 2013年1期
关键词:码流PC机解码器

张正华,胡方来,苏 波,吴 韬,龚晓亮

(1.扬州大学信息工程学院,江苏扬州225127;2.扬州国脉通信发展有限责任公司,江苏扬州225002;3.扬州市公安局交通巡逻警察支队,江苏扬州225007)

0 引言

H.264由于其编码的高复杂度从一开始就限制了它的应用,随着人们对编码算法的改进,去除了对编码效果有限但复杂度高的一些算法,使得H.264的视频编解码技术逐渐得到应用,现在使用得最多的编码器就是X264[1-3]。相对而言,解码器的速度要快得多,目前流行的 H.264解码器包括 JM Decoder、T264 Decoder、X264 Decoder、ffmpeg 和 Intel的IPP库。JM decoder是H.264的官方源码,也是校验模型,支持特性好但是实用性较差;T264是国内的开源项目,只能解T264本身的码流;X264本身没有decoder,但包含解码器的部分函数雏形;ffmpeg是包含各种音视频标准的codec,支持的标准全而且解码速度也很快;IPP用于在Intel的各种处理平台上实现信号处理常用算法以及音视频编解码算法,实现算法速度较快[4-6]。所有的解码器中,除了Intel的商用IPP库外,以ffmpeg的解码最快最稳定,ffmpeg集合了多种音、视频的编解码协议,可完成MPEG4和H.264等协议的解码。基于此并结合现有的图像传输研究现状,对视频图像在嵌入式终端上的解码方式进行了研究。

1 ffmpeg视频解码播放步骤

基于ffmpeg的视频解码播放流程如图1所示。

图1 ffmpeg视频解码流程

打开一个视频文件并从中得到流,首先就是初始化libavformat/libavcodec;接着调用 av_register_all()函数注册库中含有的所有可用的文件格式和编解码器,这样当打开文件时就能够自动选择相应的文件格式和编解码器;然后调av_open_input_file()函数读取文件头并将文件信息存储到pFormatCtx结构体中;调用av_find_stream_info()函数取出文件中的流信息;再调用 avcodec_find_decode r()函数用来寻找频流的解码器,并得到指向视频流的上下文的指针;最后调用avcodec_open()函数用来打开解码器。

经过评测发现,各种H.264解码器中,速度最快的是intel IPP,但是由于其是商用软件,而其他的各种解码器都属于开源项目,所以最适合的选择就是解码速度第二的ffmpeg,而且其速度完全可以满足实时播放的要求。

2 SDL、ffmpeg和 ffplay

由于ffplay是一个基于ffmpeg和开放源代码的跨平台多媒体开发库(Simple DirectMedia Layer,SDL)的播放器,因此,如果想在嵌入式平台上使用ffplay来播放视频文件,需要加入 SDL的支持[7,8]。下面首先交叉编译SDL,这里采用的版本为SDL-1.2.13,然后编译 ffplay 和 ffmpeg。

①下载SDL安装包,解压缩并进入SDL所在目录。

② 运行配置。键入“./configure--help”,由于ARM板资源有限,根据需要设置参数,看情况改变prefix目录和各种选项,配置中指定使用帧缓冲设备,使用arm-linux-gcc交叉编译。本文中,使用的编译选项如下:

③ make和 make install,make install之后便在prefix目录下生成所需的动态库和include头文件等。下面使用SDL自带的例程测试交叉编译的SDL是否可以在ARM上使用,运行成功后会生成二进制应用程序“testwin”,将交叉编译好的SDL库和例程通过nfs挂载到ARM板,运行屏幕上出现移动的“SDL”说明交叉编译成功。具体的测试选项如下:

④下载ffmpeg安装包,创建依赖环境,在编译ffmpeg之前可以根据需要安装相应的codec和依赖包,ffmpeg的支持库包括xvid、x264、mp3和3gp等,可以网上下载相应的源码进行安装。

⑤交叉编译。交叉编译完成后,将会在目标目录下生成目标平台处理器格式的二进制可执行文件ffplay和ffmpeg,将生成的ffplay和ffmpeg移植到开发板上,同时将生成的库文件移植到ARM上Linux系统的根目录lib下运行。具体的编译选项如下:

3 部分程序源码

以下为基于ffmpeg的H.264视频解码的部分代码:

4 测试结果

这里使用了 foreman、news、carphone和 highway四个视频序列,编码30帧,生成4个不同的H.264格式码流,将生成的码流分别在嵌入式平台上和PC机上进行了测试,测试结果的对比如表1和表2所示。

表1 解码后图像质量对比

表2 解码时间对比

表1反映了4个视频序列分别在嵌入式平台和PC机上解码后视频图像的质量对比,从表中数据可以看出,图像质量相差不大,嵌入式平台上的解码效果与PC机上解码效果相近。表2反映出2个平台对同一视频流解码速度的对比,从表中数据可以看出,PC机的解码速度稍快于嵌入式平台,单纯地从嵌入式平台的解码时间来看,其已经能够满足工程应用中的实时性要求。

为了能够更鲜明地说明目标板的解码效果,图2和图3给出了foraman视频序列解码前后的图像对比效果。图2是在目标板上用ffplay运行的带误码的码流效果,图3给出了经过ffmpeg解码带误码的码流后的物理效果图,从图中可以得出,在嵌入式终端平台上可以对视频流进行实时的解码处理,且能够比较真实地反映源图像的品质。

图2 运行带误码的码流

图3 解码后物理效果

5 结束语

在分析了各种解码器的性能后选用了ffmpeg对H.264进行解码。研究了ffmpeg的解码流程和实现以及ffmpeg解码 H.264的实现,最后实现了ffmpeg和ffplay在嵌入式平台上的移植并给出了实现图。从实验结果分析,研究是切实可行的。目前,智能交通行业的发展已经迎来了新浪潮,智能监控已成为智能交通行业车辆信息采集的主要方式[9],嵌入式系统在智能交通上的应用已成可能,随着技术的不断深入,交通智能化必定会在各领域的共同努力下成为不可逆转的趋势。从实际运用看,上述研究可以依托视频传感器采集的图像,利用现阶段路口大范围普及的视频摄像头,利用现有的资源获取极大的效益,无需增加额外的成本。

[1]毕厚杰.新一代视频压缩编码标准——H.264/AVC[M].北京:人民邮电出版社,2005:68-128.

[2]郭宝龙,倪 伟,闫允一.通信中的视频信号处理[M].北京:电子工业出版社,2007:30-55.

[3]马宇峰,魏 维,杨科利.视频通信中的错误隐藏技术[M].北京:国防工业出版社,2007:44-58.

[4]WIEGAND T,SULLIVAN G J.Overview of the H.264/AVC Video Coding Standard[J].IEEE Transactions on Circuits and Systems for Video Technology,2003,13(7):560-576.

[5]SULLIVAN G J,TOPIWALA P,LUTHRA A.The H.264/AVC Advanced Video Coding Standard:Overview and Introduction to the Fidelity Range Extensions[C]∥SPIE Conference on Applications of Digital Image Processing,2004:376-382.

[6]IAIN E,RICHARDSON G.H.264 and MPEG -4 Video Compression[M].The RobertGordon University,Aberdeen,UK,2004:159 -187.

[7]周立功.ARM嵌入式系统基础教程[M].北京:北京航空航天大学出版社,2005:415-449.

[8]何 勋,周 鹰,王亚非.基于S3C2440的H.264软编解码器实现[J].现代电子技术,2010,38(6):38-39.

[9]王静静.面向智能交通的视频车辆检测、跟踪和识别算法研究[D].山东:东北大学,2009:12-16.

猜你喜欢
码流PC机解码器
科学解码器(一)
数字电视TS码流协议简要分析
科学解码器(二)
科学解码器(三)
线圣AudioQuest 发布第三代Dragonfly Cobalt蓝蜻蜓解码器
高清网络摄像机图像延迟分析及解决方案
基于三菱FXPLC的感应淬火机床与PC机的串行通信实现
VC.NET下实现dsPIC单片机与PC机的通信
排除OLT设备登录故障
VIVID3彩色超声仪结构原理及维修