论文部分内容阅读
摘 要: Linux系统因开源而被更多的企业所采用,H.264编解码因具有高压缩比、良好的网络适应性成为视频编解码技术的研究热点。怎样将H.264编解码器移植到Linux系统上,以完成效率更高、压缩比更高视频编解码技术,是突破编解码技术的关键。本文经过分析H.264编解码算法,将H.264编解码器移植到Linux系统中,实现了H.264对视频文件的编解码,为嵌入式系统的移植奠定了基础。
关键词:Linux H.264编解码 嵌入式
中图分类号:TP368 文献标识码:A 文章编号:1672-3791(2015)04(a)-0000-00
作者简介:马敬奇(1980-) ,男,河南安阳,硕士,控制科学与工程 广东工业大学。
一 Linux系统介绍
Linux极大的继承了UNIX操作系统,Minix系统、GNU计划、POSIX标准和Internet网络的发展也极大的推动其发展。Linux系统内核由进程调度,文件管理,内存管理,网络接口,进程间通信组成。在Linux系统采取的一种树结构实现文件的管理,所有文件都是从“根”(用“/”代表)开始的,这种树结构具有比磁盘分区更大的灵活性。
二 H.264标准
1.H.264编码器
H.264编码器[1]以帧为单位进行,编码从 开始。 为当前帧的前一帧, 即为当前帧,与编码预测值P相减得到带编码的帧差 。其中的预测值P有两种方法获得1)帧间预测[2]模式下通过 运动补偿得到;2)在帧内模式下由当 中已完成编码并且重建的宏块[3]预测得到。帧差 经由T(DCT变换)变换器得到的数据再经由Q(量化器)变化得到量化系数X。最后量化系数X经由重排序、熵编码得到完整的.264编码流[4]。
是通过量化系数X经过一系列变换得到的,目的是编码后面的宏块并且重建编码帧,首先量化系数X经过Q-1和T-1,得到反变换恢复值 ; 与P相加得到原始帧 , 经过滤波获得重建帧 。
2. H.264解码器
从理论上讲H.264的解码是编码的逆变换,在图2所示的逆变换过程中,首先接受经过H.264编码的流文件;其次,编码的流文件经由熵编码接着对熵编码进行重排序,此时可以获得经过量化的数据流X(也称作量化系数);接着,逆变换还体现在下面的过程将得到的X进行Q-1(反量化算法)和T-1(逆DCT变换),得到反变换恢复值 ;在获得恢复值 进入加法器之前,解码器已从文件头信息中变换出在编码器端的预测值P,两者相加得到原始帧 ,最终 经过滤波器得到解码帧 。
三 H.264的编译与移植
1. H.264编码器移植
本文选择X264为编码器、FFMPEG作为解码器。通过编译移植的x264产生可执行文件压缩源视频文件,输出.264文件;得到的编码文件经过ffmpeg解码器还原出视频文件。
在编译x264之前,为了提升H.264的编码性能,需要优化MMX、SSE,因此首先编译安装yasm。
./configure –prefix=/usr/local/bin/
make
make install
编译X264:
cd X264
./configure
修改config.mak的一些选项,如cc=linux-gcc、arch=linux,然后
make
make install
得到X264二进制可执行文件。
ffmpeg的编译需要一些库文件的支持,在进行编译之前要移植这些库文件,例如SDL库。
解压缩软件包
配置,生成Makefile
./configure --enable-shared --disable-yasm --prefix=/usr/local/ffmpeg
编译完成后输入make 命令进行下一步,接着输入make install命令进行编译,最终可编译得到ffmpeg可执行文件,得到的可执行文件对 H.264文件解码。
四 实验结果
在Linux系统下进行实验,本文所用系统为Ubuntu,视频文件格式yuv。将test.yuv视频文件放在可执行文件./H.264相同的文件夹下,运行./H.264命令过程如“ test.yuv 编码过程”所示,输出文件compress.264。
接着将得到的文件compress.264放到解码文件夹下,并执行./ffmpeg命令,解码过程如“compress.264解码过程”所示,得到解码文件decode.yuv。
最后通过播放器查看原视频文件和经过编码、解码得到的视频文件,并进行对比,如图4所示。发现经过编解码的视频文件信息保持完好,清晰度、视频播放的流畅性都与原视频相差不多,基本满足需要。
五 结论
随着网路时代的进一步成熟,如何将视频文件在网络环境下稳定、快速的传输是突出的问题,H.264编码方法为视频压缩提供了一种新方法,实验验证该算法能够完好的编码源视频数据,并通过ffmpeg解码,经过解码的视频文件保持良好的完整性,适合视频编码。
参考文献
[1] 韩守谦,裴海龙,王清阳.基于Xenomai的实时嵌入式Linux操作系统的构建[J].计算机工程与设计,2011,1(32):96-99.
[2] 杨春玲,孙亚明.H.264帧内编码和JPEG2000对静止图像进行编码的性能比较[J].中国图像图形学报,2006,11(3):425-429.
[3] 曹睿学,张保平,温伟娟.基于ARM9的H.264视频实时解码器研究与实现[J].计算机测量与控制,2010,18(5):1118-1121.
[4] Yinyuan Wang,An Improved Image Edge Detection Algorithm Based on H.264 Intra Prediction [J].Intelligence Science and Information Engineering,2011:450-453.
关键词:Linux H.264编解码 嵌入式
中图分类号:TP368 文献标识码:A 文章编号:1672-3791(2015)04(a)-0000-00
作者简介:马敬奇(1980-) ,男,河南安阳,硕士,控制科学与工程 广东工业大学。
一 Linux系统介绍
Linux极大的继承了UNIX操作系统,Minix系统、GNU计划、POSIX标准和Internet网络的发展也极大的推动其发展。Linux系统内核由进程调度,文件管理,内存管理,网络接口,进程间通信组成。在Linux系统采取的一种树结构实现文件的管理,所有文件都是从“根”(用“/”代表)开始的,这种树结构具有比磁盘分区更大的灵活性。
二 H.264标准
1.H.264编码器
H.264编码器[1]以帧为单位进行,编码从 开始。 为当前帧的前一帧, 即为当前帧,与编码预测值P相减得到带编码的帧差 。其中的预测值P有两种方法获得1)帧间预测[2]模式下通过 运动补偿得到;2)在帧内模式下由当 中已完成编码并且重建的宏块[3]预测得到。帧差 经由T(DCT变换)变换器得到的数据再经由Q(量化器)变化得到量化系数X。最后量化系数X经由重排序、熵编码得到完整的.264编码流[4]。
是通过量化系数X经过一系列变换得到的,目的是编码后面的宏块并且重建编码帧,首先量化系数X经过Q-1和T-1,得到反变换恢复值 ; 与P相加得到原始帧 , 经过滤波获得重建帧 。
2. H.264解码器
从理论上讲H.264的解码是编码的逆变换,在图2所示的逆变换过程中,首先接受经过H.264编码的流文件;其次,编码的流文件经由熵编码接着对熵编码进行重排序,此时可以获得经过量化的数据流X(也称作量化系数);接着,逆变换还体现在下面的过程将得到的X进行Q-1(反量化算法)和T-1(逆DCT变换),得到反变换恢复值 ;在获得恢复值 进入加法器之前,解码器已从文件头信息中变换出在编码器端的预测值P,两者相加得到原始帧 ,最终 经过滤波器得到解码帧 。
三 H.264的编译与移植
1. H.264编码器移植
本文选择X264为编码器、FFMPEG作为解码器。通过编译移植的x264产生可执行文件压缩源视频文件,输出.264文件;得到的编码文件经过ffmpeg解码器还原出视频文件。
在编译x264之前,为了提升H.264的编码性能,需要优化MMX、SSE,因此首先编译安装yasm。
./configure –prefix=/usr/local/bin/
make
make install
编译X264:
cd X264
./configure
修改config.mak的一些选项,如cc=linux-gcc、arch=linux,然后
make
make install
得到X264二进制可执行文件。
ffmpeg的编译需要一些库文件的支持,在进行编译之前要移植这些库文件,例如SDL库。
解压缩软件包
配置,生成Makefile
./configure --enable-shared --disable-yasm --prefix=/usr/local/ffmpeg
编译完成后输入make 命令进行下一步,接着输入make install命令进行编译,最终可编译得到ffmpeg可执行文件,得到的可执行文件对 H.264文件解码。
四 实验结果
在Linux系统下进行实验,本文所用系统为Ubuntu,视频文件格式yuv。将test.yuv视频文件放在可执行文件./H.264相同的文件夹下,运行./H.264命令过程如“ test.yuv 编码过程”所示,输出文件compress.264。
接着将得到的文件compress.264放到解码文件夹下,并执行./ffmpeg命令,解码过程如“compress.264解码过程”所示,得到解码文件decode.yuv。
最后通过播放器查看原视频文件和经过编码、解码得到的视频文件,并进行对比,如图4所示。发现经过编解码的视频文件信息保持完好,清晰度、视频播放的流畅性都与原视频相差不多,基本满足需要。
五 结论
随着网路时代的进一步成熟,如何将视频文件在网络环境下稳定、快速的传输是突出的问题,H.264编码方法为视频压缩提供了一种新方法,实验验证该算法能够完好的编码源视频数据,并通过ffmpeg解码,经过解码的视频文件保持良好的完整性,适合视频编码。
参考文献
[1] 韩守谦,裴海龙,王清阳.基于Xenomai的实时嵌入式Linux操作系统的构建[J].计算机工程与设计,2011,1(32):96-99.
[2] 杨春玲,孙亚明.H.264帧内编码和JPEG2000对静止图像进行编码的性能比较[J].中国图像图形学报,2006,11(3):425-429.
[3] 曹睿学,张保平,温伟娟.基于ARM9的H.264视频实时解码器研究与实现[J].计算机测量与控制,2010,18(5):1118-1121.
[4] Yinyuan Wang,An Improved Image Edge Detection Algorithm Based on H.264 Intra Prediction [J].Intelligence Science and Information Engineering,2011:450-453.