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