張宛怡,張 堯,周啟煒
(中國空間技術研究院西安分院,西安 710100)
近年來圖像處理是一個非常熱門的研究領域,而圖像視頻的存儲問題更是吸引了許多研究人員的注意。如何實現(xiàn)圖像視頻的壓縮以便高效存儲,實時傳輸是本文的主要研究內容。H.264編碼容錯性很高,圖像質量強,編碼率低等優(yōu)秀特性是傳統(tǒng)編碼所不能比擬的優(yōu)點,基于這些優(yōu)秀的特性,無論是遠距離還是近距離的網(wǎng)絡信號傳輸,都有著H.264編碼的用武之地。目前,H.264已經(jīng)成為了許多國家高清TV 或者網(wǎng)絡電視的視頻壓縮標準,因此了解H.264視頻壓縮標準的基本內容,設計一套基于此編碼標準的實時壓縮視頻系統(tǒng),是非常具有研究價值的[1]。
JVT(由ISO/IEC 協(xié)會聯(lián)合ITU-T 組織形成的視頻媒體機構)制定的H.264編碼是目前功能最強大,特點最突出的視頻壓縮編碼。起初,為了同傳統(tǒng)的編碼制相區(qū)別,H.264的功能模塊實現(xiàn)被劃分成了三個不同的檔次,劃分級別的依據(jù)通常是不同的設計需要,比如視頻壓縮的像素塊大小等等其它的功能實現(xiàn)細節(jié)。由于實際工作的不斷深入與細化,在2007年,JVT 結構又在原有的三個劃分級別上重新添加了一個級別,自此H.264編碼的檔次多了一個高級檔次,該級別相較于原有的檔次而言,主要優(yōu)點是增加了自適應塊變換量化矩陣,同時增加了4:2:2與4:4:4采樣兩種不同的格式,在此基礎是利用擴展像素大小只12bit 的方法追求更高的壓縮率[2]。
H.264編碼的特點還有很多,在具有很高壓縮率的同時,因為結合了多種參考幀模式預測、多模式運動估計、整數(shù)變換及量化、環(huán)路濾波和先進的熵編碼技術等高新技術的原因,H.264編碼的效率得到了很大的提升。以整數(shù)變換及量化舉例,編碼中選擇利用預測值與實際值計算兩者殘差,然后針對計算得到的殘差再做進一步的整數(shù)變換和量化操作,整理數(shù)據(jù),使得數(shù)據(jù)最大程度的簡潔化,并利用熵編碼消掉冗余部分,提高視頻壓縮的效率,節(jié)約儲存空間,減輕硬件成本。
H.264編碼的這些優(yōu)點都主要是英文其H.264編碼器利用的是內容較為簡單的CAVLC 熵編碼,而不是其他復雜的編碼形式[3]。
首先給出H.264編碼器的一般性結構框圖,如圖1所示。
圖1 H.264編碼器結構
根據(jù)上圖可以給出H.264編碼器編碼的過程描述:首先H.264編碼器依照率失真的計算結果可以對正在處理的數(shù)據(jù)包進行幀間亦或是幀內預測,如圖左上角所示,之后等待編碼模塊與預測結果兩者之間的運算結果,一般是兩者相減就能得到中間數(shù)據(jù)Dn,然后對該中間數(shù)據(jù)進行整數(shù)變換與歸一量化等一些列的數(shù)學處理操作,目的是為了得到一個由殘差系數(shù)構成的矩陣數(shù)據(jù)量,根據(jù)這個計算得到矩陣進行矩陣運算與換維計算,之后再進行熵編碼與反量化,注意要將熵編碼的結果及時的存儲到NAL 之中,根據(jù)反運算得到的結果來與預測模塊進行相加運算并濾波,就可以分別得到幀內預測與幀間預測的判斷參考數(shù)據(jù)。
本節(jié)介紹實時視頻壓縮系統(tǒng)硬件部分,實際上由于H.264編解碼系統(tǒng)比較直觀明了,大部分過程都是整數(shù)運算,計算難度低,因此實際上非常適合用硬件來承擔一部分的高效并行計算過程,減少整個計算過程的時間,增加系統(tǒng)的實時性。其實這也是H.264編碼的一個側面優(yōu)勢。
硬件系統(tǒng)最關鍵的部分是DM6467芯片,上位機是以基于Linux 操作系統(tǒng)的軟件開發(fā)平臺進行構建的[4][5]。系統(tǒng)的數(shù)據(jù)采集部分,選擇使用CCD 與TVP5150兩者的視頻攝像采集系統(tǒng),采集完所有的數(shù)據(jù)之后,利用H.264編碼對視頻數(shù)據(jù)進行編碼,并通過RTP 協(xié)議與上位機進行通信工作,完成數(shù)據(jù)的上傳,視頻數(shù)據(jù)上傳的同時,上位機采用視頻播放器就可以完成順利接收與播放工作。
上述的數(shù)據(jù)流傳輸過程實際上主要由信號采集與數(shù)據(jù)上傳兩部分組成。視頻采集過程中采用的數(shù)據(jù)格式一般選擇BT.656,BT.656是一種常用于模擬信號采集的信號傳輸標準,主要是因為該格式的視頻數(shù)據(jù)針對于高清或標清的視頻所設計,時鐘頻率一般為27MHz,采樣頻率灰度與色度分別是12.5MHz 與6.25MHz。另外,整個采樣過程的完成者主要包括CCD 攝像頭與解碼器。解碼器的作用是至關重要的,它負責將收集到的數(shù)據(jù)進行解碼,并通過DM6467的VPIF 視頻接口接收,之后將視頻數(shù)據(jù)存儲到數(shù)據(jù)緩存區(qū),為后續(xù)的進一傳輸工作做好準備。DM6467是一款視頻信號處理的專用主控芯片,它的功能十分強大,包含多個不同高主頻頻率的子系統(tǒng),常見的比如arm968EJ-S 子系統(tǒng)和DSP子系統(tǒng),具有處理高清數(shù)字媒體數(shù)據(jù)的能力,具有十分高效的傳輸速率。除了這些子系統(tǒng)之外,芯片好包括許多空間大小不同的存儲器,比如DDR2 存儲器、NAND Flash 存儲器、,同時還包含著前文提到過的TVP5150解碼器與CCD 攝像頭以及多功能的外圍接口。從功能上來看,不同的存儲器作用不同,舉例來說,F(xiàn)lash 存儲器的主要功能是啟動整個芯片系統(tǒng),相當于PC 機中的C 盤,該存儲器里存放的資源種類主要是比較重要的文件以及驅動程序與少數(shù)的應用程序。而DDR2存儲器的目的是為整個系統(tǒng)提供運行空間,充當視頻數(shù)據(jù)傳輸過程中的色彩與色度轉換的空間。
談到視頻壓縮編碼硬件結構設計,首當其沖的就是碼率控制莫魁岸,如何基于軟核Micro Blaze 來簡易準確高效的實現(xiàn)碼率控制,同時通過通信端口與外圍設備實現(xiàn)數(shù)據(jù)交流與通信,是這個模塊主要應該實現(xiàn)與滿足的功能??紤]到碼率控制模塊可以說是前后兩個編碼圖像之間碼率控制的橋梁,這就從側面決定的碼率控制模塊在整個硬件結構中所處的位置以及其春哥徐應該具備的被執(zhí)行順序,顯然意見,碼率控制模塊的編碼程序必須在前后兩幀連續(xù)的編碼圖像之中被執(zhí)行,這其實在一定程度上也是為了保證該模塊高效的運行速度,不會造成程序執(zhí)行阻塞,下面會具體的介紹碼率控制模塊硬件結構所實現(xiàn)的控制算法,具體可以分為三個步驟:
首先,在第一個步驟里需要參考碼率控制常用算法的類型以及各自的優(yōu)缺點,選擇一塊與本系統(tǒng)的硬件結構設計要求最相近的平均比特率模式算法,也就是常說的ABR 算法,該算法的主要計算原理是利用待編碼圖像的復雜度來調整其量化參數(shù),同時還需要通過已編碼圖像的真正比特數(shù)與一整個視頻圖像序列的目標比特數(shù)的比特因子來調節(jié)待編碼圖像的量化參數(shù),使得兩個值之間的差距盡可能的縮小從而達到控制的碼率的目的。
其次需要根據(jù)第一步中選擇的算法類型設計合適的Micro Blaze 軟核,對其IP 參數(shù)進行取舍,主要依據(jù)的是碼率控制計算過程的中計算類型與復雜程度以及編碼執(zhí)行的順序。通常而言,碼率控制計算會包含很多的浮點型數(shù)據(jù)計算以及冪指數(shù)計算,這就需要為該算法專門設計一個適合處理此類計算的軟核,盡可能的提高計算速度與運行效率,最大程度的優(yōu)化算法編譯環(huán)境。
完成步驟一與步驟二之后,最后需要在SDK 的編譯環(huán)境之下對算法進行結構優(yōu)化與參數(shù)修正,使得算法變得更加簡潔優(yōu)化,更加健壯。另外還需要注意的是算法程序要具有一定的安全性,注意信息安全的保護。
上面的步驟是根據(jù)經(jīng)驗總結的一般設計流程,具體的碼率控制模塊設計細節(jié)還需要在程序執(zhí)行的過程中去根據(jù)實際情況再具體修改,優(yōu)良的硬件系統(tǒng)能夠更好的實現(xiàn)算法的高效并行計算特性,極大地加快程序執(zhí)行速度,使得視頻壓縮系統(tǒng)的實時性更加高,更加可靠。
除了碼率控制模塊之外,H.264視頻壓縮標準決定了硬件系統(tǒng)的設計還應該要重點考慮到設計一個存儲空間專門用來處理前文提到的在宏塊操作前需要提前準備相鄰宏塊的參考信息,這些參考信息通常都包含著后面預測模塊所需要的預測參照數(shù)據(jù),其重要性肯定是不言而喻的。具體來說,其中的參考信息還包含著待編碼宏塊進行預測時的參考像素與重建像素,以及兩兩相鄰的宏塊亮度塊數(shù)據(jù)與色度塊的預測類型等等。而從系統(tǒng)實現(xiàn)功能的邏輯層面上來說,采用該宏塊參考信息加載與實時更新的模式雖然使得整個系統(tǒng)運行更加高效,邏輯實現(xiàn)更加的簡單,這是因為系統(tǒng)僅僅依據(jù)宏塊存儲空間的索引號就可以輕松的提取到相關的參數(shù)數(shù)據(jù)信息,但是這無疑就給硬件結構與硬件資源帶來了相當程度的壓力。為了解決該隱患,適當程度上的減輕硬件結構壓力,降低硬件設計的成本,如果每個編碼的宏塊只是需要考慮在它右方和在它下面的宏塊存儲空間,那么理論上來分析,不會超過兩行存儲宏塊的參考信息,這里所指的兩行參考信息其實際上也就是參考編碼宏塊的宏塊行與其上一宏塊行。綜上所述,考慮到前文中宏塊參考信息的加載方式與消耗的時間,以及更新實現(xiàn)方式存在的一些缺點,決定采用只存儲單行零一個的宏塊參考信息的實現(xiàn)方式實現(xiàn)節(jié)約硬件資源的目的。
實時視頻壓縮系統(tǒng)采集到的數(shù)據(jù)經(jīng)過信號傳輸通道傳到PC機這個過程實際上包括了信號電路的處理,在一定幀頻下的數(shù)據(jù)壓縮以及一定速率的以太網(wǎng)傳輸過程。系統(tǒng)核心主控芯片包含ARM 與 DSP 兩個處理器內核,其中兩個內核主要負責的功能有一定區(qū)別,概括來看,DSP 內核實現(xiàn)的功能主要跟信號處理有關,比如編解碼器控制、音頻處理以及視頻內容分析等等。而反觀ARM 內核,其主要負責的內容主要是運行Linux 等操作系統(tǒng)。本文設計的軟件系統(tǒng)就是基于Linux 操作系統(tǒng)。
在上位機中編寫視頻圖像壓縮的程序時,待處理的彩色圖像數(shù)據(jù)在不同的程序語句要求下進行各種不同形式的數(shù)據(jù)轉換。常見的一種模式轉換是Y 分量的圖像壓縮發(fā)送,該模式下需要從待處理視頻圖像中逐幀提取到Y 分量,并將其轉變成xDM 標準接口的數(shù)據(jù)格式,再創(chuàng)建Codec engine 對象,調用恰當?shù)乃惴▽σ曨l進行壓縮;還有一種常見的轉換模式就是直接在H.264編碼制的規(guī)定下利用Codec engine 調用xDM 程序對視頻數(shù)據(jù)進行壓縮,壓縮完成后對視頻數(shù)據(jù)進行封裝與打包,數(shù)據(jù)被上傳到上位機制指定空間后進行編碼與解壓縮,通過播放器進行視頻播放,完成視頻顯示操作。系統(tǒng)數(shù)據(jù)流程如圖2所示。
圖2 系統(tǒng)數(shù)據(jù)流程圖
H.264編碼的優(yōu)點十分明顯,例如前文所敘述的那些,不過由于為了追求高效性,其算法以及程序的復雜性導致開發(fā)設計的壓力就很大,必須在算法以及程序流程的設計上下一翻功夫,本節(jié)就是從這個角度出發(fā),來對軟件系統(tǒng)關鍵部分的設計深入研究。
4.2.1 編碼庫的調用與通信過程
H.264編碼庫源碼被下載解壓打開后需要先調用指定命令來對其進行初始化與配置更改,然后用指令語句對其進行編譯的操作,如果不能正常進行編譯,需要查看是否是編碼源庫下載不完整,亦或是編譯程序有問題導致過程沒有被全部執(zhí)行。如果編譯非常順利的話,就可以下一步操作,即對圖像數(shù)據(jù)輸入流進行幀的編碼工作。在這之中,值得注意的是需要在編譯文件目錄下找到一個.o 文件并將其刪除,此文件的存在極易引起編譯服務端程序出錯,使得程序變編譯不能得到正確的結果。
服務器程序的編寫工作并不是十分復雜,實際上類似于JAVA SE 中網(wǎng)絡編程的客戶端與服務端基本通信的過程。其中服務器編程所要調用類主要就是Socket 類,眾所周知Socket 編程的方式最常用的就是兩種,即TCP 與UDP 兩種,這兩種方式的區(qū)別主要在于套接字的形式不同,這里不做詳細的說明,本文選用的是UDP 網(wǎng)絡編程來實現(xiàn)軟件系統(tǒng)編碼過程的設計與通信功能。
4.2.2 接收圖像的播放器設計
設計接收端媒體播放器的出發(fā)點是要基于Linux 操作系統(tǒng),并且該播放器最好要能夠支持大多數(shù)的媒體視頻格式,要有很強的實時接收數(shù)據(jù)能力,本文擬采用的是Linux 操作系統(tǒng)下的DirectShow 流媒體框架,該該框架與Linux 系統(tǒng)高度契合,功能強大,適合用于作為本軟件系統(tǒng)播放器的開發(fā)框架。
系統(tǒng)的硬件系統(tǒng)與軟件系統(tǒng)設計完畢后,需要嘗試運行整個視頻壓縮系統(tǒng)。首先檢查所有的硬件部分,查看各設備是否連接正常,各模塊之間通信是否正常,嚴格杜絕丟包現(xiàn)象的發(fā)生,硬件部分初步檢查完畢后,需要利用短劍系統(tǒng)在仿真環(huán)境下安裝操作系統(tǒng),并且燒錄算法與程序文件到主控芯片中去。之后運行程序,觀察視頻傳輸與播放是否正確,為了評估視頻壓縮傳輸?shù)馁|量,需要將視頻按幀截圖進行分析,與采取H.264編碼壓縮傳輸之前的視頻采集圖像進行充分的比較分析。對比發(fā)現(xiàn)該實時視頻壓縮系統(tǒng)實時性滿足要求,延時時間較低,視頻壓縮的速度與質量很強。本次實驗視頻在數(shù)據(jù)采集方面花費的時間為3分鐘,采用的視頻輸入格式選擇的是常見的PAL 格式文件形式,幀率設置的是25幀/s,視頻圖像分辨率為720×576,記錄未壓縮視頻數(shù)據(jù)率是125Mb/s。編碼實現(xiàn)后視頻圖像數(shù)據(jù)信號的碼率設置成800 kb/s。依據(jù)碼率公式[碼率](kb/s)=[文件大小](字節(jié))X8/[時間](s)/1 000,計算壓縮后視頻數(shù)據(jù)量僅僅只有18Mbyte,綜上所述,視頻壓縮效果非常可靠,其中壓縮比為156.25,達到設計目標。
本文首先介紹了H.264編碼標準的基本概念以及其相較于其它視頻壓縮標準的優(yōu)點,并以DM6467為硬件核心,Linux 操作系統(tǒng)為軟件開發(fā)平臺依次從硬件、軟件兩個角度介紹了視頻壓縮系統(tǒng)平臺的構建及功能的實現(xiàn)。