摘 要: Linux系統(tǒng)因開(kāi)源而被更多的企業(yè)所采用,H.264編解碼因具有高壓縮比、良好的網(wǎng)絡(luò)適應(yīng)性成為視頻編解碼技術(shù)的研究熱點(diǎn)。怎樣將H.264編解碼器移植到Linux系統(tǒng)上,以完成效率更高、壓縮比更高視頻編解碼技術(shù),是突破編解碼技術(shù)的關(guān)鍵。本文經(jīng)過(guò)分析H.264編解碼算法,將H.264編解碼器移植到Linux系統(tǒng)中,實(shí)現(xiàn)了H.264對(duì)視頻文件的編解碼,為嵌入式系統(tǒng)的移植奠定了基礎(chǔ)。
關(guān)鍵詞:Linux H.264編解碼 嵌入式
中圖分類號(hào):TP368 文獻(xiàn)標(biāo)識(shí)碼:A 文章編號(hào):1672-3791(2015)04(a)-0000-00
作者簡(jiǎn)介:馬敬奇(1980-) ,男,河南安陽(yáng),碩士,控制科學(xué)與工程 廣東工業(yè)大學(xué)。
一 Linux系統(tǒng)介紹
Linux極大的繼承了UNIX操作系統(tǒng),Minix系統(tǒng)、GNU計(jì)劃、POSIX標(biāo)準(zhǔn)和Internet網(wǎng)絡(luò)的發(fā)展也極大的推動(dòng)其發(fā)展。Linux系統(tǒng)內(nèi)核由進(jìn)程調(diào)度,文件管理,內(nèi)存管理,網(wǎng)絡(luò)接口,進(jìn)程間通信組成。在Linux系統(tǒng)采取的一種樹(shù)結(jié)構(gòu)實(shí)現(xiàn)文件的管理,所有文件都是從“根”(用“/”代表)開(kāi)始的,這種樹(shù)結(jié)構(gòu)具有比磁盤分區(qū)更大的靈活性。
二 H.264標(biāo)準(zhǔn)
1.H.264編碼器
H.264編碼器[1]以幀為單位進(jìn)行,編碼從 開(kāi)始。 為當(dāng)前幀的前一幀, 即為當(dāng)前幀,與編碼預(yù)測(cè)值P相減得到帶編碼的幀差 。其中的預(yù)測(cè)值P有兩種方法獲得1)幀間預(yù)測(cè)[2]模式下通過(guò) 運(yùn)動(dòng)補(bǔ)償?shù)玫剑?)在幀內(nèi)模式下由當(dāng) 中已完成編碼并且重建的宏塊[3]預(yù)測(cè)得到。幀差 經(jīng)由T(DCT變換)變換器得到的數(shù)據(jù)再經(jīng)由Q(量化器)變化得到量化系數(shù)X。最后量化系數(shù)X經(jīng)由重排序、熵編碼得到完整的.264編碼流[4]。
是通過(guò)量化系數(shù)X經(jīng)過(guò)一系列變換得到的,目的是編碼后面的宏塊并且重建編碼幀,首先量化系數(shù)X經(jīng)過(guò)Q-1和T-1,得到反變換恢復(fù)值 ; 與P相加得到原始幀 , 經(jīng)過(guò)濾波獲得重建幀 。
2. H.264解碼器
從理論上講H.264的解碼是編碼的逆變換,在圖2所示的逆變換過(guò)程中,首先接受經(jīng)過(guò)H.264編碼的流文件;其次,編碼的流文件經(jīng)由熵編碼接著對(duì)熵編碼進(jìn)行重排序,此時(shí)可以獲得經(jīng)過(guò)量化的數(shù)據(jù)流X(也稱作量化系數(shù));接著,逆變換還體現(xiàn)在下面的過(guò)程將得到的X進(jìn)行Q-1(反量化算法)和T-1(逆DCT變換),得到反變換恢復(fù)值 ;在獲得恢復(fù)值 進(jìn)入加法器之前,解碼器已從文件頭信息中變換出在編碼器端的預(yù)測(cè)值P,兩者相加得到原始幀 ,最終 經(jīng)過(guò)濾波器得到解碼幀 。
三 H.264的編譯與移植
1.H.264編碼器移植
本文選擇X264為編碼器、FFMPEG作為解碼器。通過(guò)編譯移植的x264產(chǎn)生可執(zhí)行文件壓縮源視頻文件,輸出.264文件;得到的編碼文件經(jīng)過(guò)ffmpeg解碼器還原出視頻文件。
在編譯x264之前,為了提升H.264的編碼性能,需要優(yōu)化MMX、SSE,因此首先編譯安裝yasm。
./configure –prefix=/usr/local/bin/
make
make install
編譯X264:
cd X264
./configure
修改config.mak的一些選項(xiàng),如cc=linux-gcc、arch=linux,然后
make
make install
得到X264二進(jìn)制可執(zhí)行文件。
ffmpeg的編譯需要一些庫(kù)文件的支持,在進(jìn)行編譯之前要移植這些庫(kù)文件,例如SDL庫(kù)。
解壓縮軟件包
配置,生成Makefile
./configure --enable-shared --disable-yasm --prefix=/usr/local/ffmpeg
編譯完成后輸入make 命令進(jìn)行下一步,接著輸入make install命令進(jìn)行編譯,最終可編譯得到ffmpeg可執(zhí)行文件,得到的可執(zhí)行文件對(duì) H.264文件解碼。
四 實(shí)驗(yàn)結(jié)果
在Linux系統(tǒng)下進(jìn)行實(shí)驗(yàn),本文所用系統(tǒng)為Ubuntu,視頻文件格式y(tǒng)uv。將test.yuv視頻文件放在可執(zhí)行文件./H.264相同的文件夾下,運(yùn)行./H.264命令過(guò)程如“ test.yuv 編碼過(guò)程”所示,輸出文件compress.264。
接著將得到的文件compress.264放到解碼文件夾下,并執(zhí)行./ffmpeg命令,解碼過(guò)程如“compress.264解碼過(guò)程”所示,得到解碼文件decode.yuv。
最后通過(guò)播放器查看原視頻文件和經(jīng)過(guò)編碼、解碼得到的視頻文件,并進(jìn)行對(duì)比,如圖4所示。發(fā)現(xiàn)經(jīng)過(guò)編解碼的視頻文件信息保持完好,清晰度、視頻播放的流暢性都與原視頻相差不多,基本滿足需要。
五 結(jié)論
隨著網(wǎng)路時(shí)代的進(jìn)一步成熟,如何將視頻文件在網(wǎng)絡(luò)環(huán)境下穩(wěn)定、快速的傳輸是突出的問(wèn)題,H.264編碼方法為視頻壓縮提供了一種新方法,實(shí)驗(yàn)驗(yàn)證該算法能夠完好的編碼源視頻數(shù)據(jù),并通過(guò)ffmpeg解碼,經(jīng)過(guò)解碼的視頻文件保持良好的完整性,適合視頻編碼。
參考文獻(xiàn)
[1] 韓守謙,裴海龍,王清陽(yáng).基于Xenomai的實(shí)時(shí)嵌入式Linux操作系統(tǒng)的構(gòu)建[J].計(jì)算機(jī)工程與設(shè)計(jì),2011,1(32):96-99.
[2] 楊春玲,孫亞明.H.264幀內(nèi)編碼和JPEG2000對(duì)靜止圖像進(jìn)行編碼的性能比較[J].中國(guó)圖像圖形學(xué)報(bào),2006,11(3):425-429.
[3] 曹睿學(xué),張保平,溫偉娟.基于ARM9的H.264視頻實(shí)時(shí)解碼器研究與實(shí)現(xiàn)[J].計(jì)算機(jī)測(cè)量與控制,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.