徐 寧 孟凡榮 孫 洋
(海軍七〇四工廠 青島 266109)
近年來,多媒體技術(shù)迅猛發(fā)展,視頻編解碼技術(shù)越來越多的應(yīng)用到網(wǎng)絡(luò)傳輸中,如電視電話會(huì)議,遠(yuǎn)程監(jiān)控等。但由于受信道傳輸帶寬的限制,多媒體技術(shù)的各項(xiàng)應(yīng)用都離不開高效視頻圖像壓縮算法。以往采用的H.261標(biāo)準(zhǔn)的視頻編解碼器,壓縮率較低,支持的圖像成像質(zhì)量不高,特別是當(dāng)圖像放大到后方指揮所作戰(zhàn)大廳的大屏幕,圖像較模糊,視覺效果不是很好,影響了指揮機(jī)關(guān)對(duì)現(xiàn)場(chǎng)態(tài)勢(shì)的判斷。新一代標(biāo)準(zhǔn)H.264視頻壓縮標(biāo)準(zhǔn)在同等視頻質(zhì)量的條件下,它的壓縮率比更為先進(jìn)的 H.263(Baseline)或MPEG-4(SP)高50%左右,也就是說在同樣的碼率下,信噪比大幅提高,同時(shí)還具有良好的網(wǎng)絡(luò)親和性(適應(yīng)性)。這就使得該標(biāo)準(zhǔn)在視頻領(lǐng)域諸如實(shí)時(shí)視頻通信和網(wǎng)絡(luò)流媒體具有很大的應(yīng)用潛力。但是由于H.264中引入了多種新的編碼技術(shù),使得編碼器的計(jì)算量急劇增加,因此,硬件選型上,采用以TMS320DM6467T作為主處理器,實(shí)現(xiàn)視頻的多路H.264的編碼及解碼。DM6467T由于具備兩個(gè)獨(dú)立的VICP視頻編碼協(xié)處理單元,能很大程度上提高編碼實(shí)現(xiàn)的效率,使之能適應(yīng)高清圖像或多路標(biāo)清圖像的處理。
H.264標(biāo)準(zhǔn)是ITU-T的VCEG(視頻編碼專家組)和ISO/IEC(國(guó)際標(biāo)準(zhǔn)化組織/國(guó)際電工委員會(huì))的 MPEG(活動(dòng)圖像專家組)聯(lián)合開發(fā)的一種高效的視頻編碼壓縮標(biāo)準(zhǔn)。它既是ITU-T的H.264,又是ISO/IEC的MPEG-4高級(jí)視頻編碼(Advanced Video Coding,AVC),為 MPEG-4標(biāo)準(zhǔn)的第10部分。H.264集中了以往標(biāo)準(zhǔn)的優(yōu)點(diǎn),并吸收了標(biāo)準(zhǔn)制定中積累的經(jīng)驗(yàn)[1]。
H.264的提出是為了滿足各種應(yīng)用(如:視頻會(huì)議、數(shù)字存儲(chǔ)媒體、視頻點(diǎn)播)中對(duì)視頻壓縮的需要。H.264能使編碼的視頻以靈活的方式應(yīng)用于多樣化的網(wǎng)絡(luò)環(huán)境中,并且極大地降低發(fā)送視頻所需的帶寬。該標(biāo)準(zhǔn)的主要目標(biāo)如下[2]:
1)提高壓縮編碼效率。在相同視頻圖像質(zhì)量下,H.264比H.263節(jié)省50%左右的碼率,也就是僅用一半的編碼量就能得到同樣質(zhì)量的畫面。它采用了“回歸基本”的簡(jiǎn)潔設(shè)計(jì),不用眾多的選項(xiàng),就能獲得比H.263好得多的性能。
2)增強(qiáng)網(wǎng)絡(luò)適應(yīng)能力。標(biāo)準(zhǔn)中引入了網(wǎng)絡(luò)適應(yīng)層NAL(Network Abstraction Layer),使得 H.264文件易于在不同網(wǎng)絡(luò)上傳輸(例如互聯(lián)網(wǎng)、CDMA、GPRS、WCDMA等)。其碼流結(jié)構(gòu)增強(qiáng)了差錯(cuò)恢復(fù)能力,能很好地適應(yīng)IP和無線網(wǎng)絡(luò)的應(yīng)用,具有更好的網(wǎng)絡(luò)友好性。H.264也加強(qiáng)了對(duì)誤碼和丟包的處理,提高了抗誤碼能力。
H.264標(biāo)準(zhǔn)有三個(gè)框架(profile),分別是Baseline profile、Main profile和Extend profile,每個(gè)profile有相應(yīng)的算法組成和語法結(jié)構(gòu)[3]。
1)基本層次(Baseline Profile):該層次使用了 H.264的除了B-Slices,CABAC以及交織編碼模式外所有的特性。該層次主要使用于低時(shí)延的實(shí)時(shí)應(yīng)用場(chǎng)合。
2)主要層次(Main Profile):包含Baseline profile的所有特性,并包括了B-slices,CABAC以及交織編碼模式。它主要針對(duì)時(shí)延要求不高,但壓縮率和質(zhì)量要求較高的場(chǎng)合。
3)擴(kuò)展層次(Profile X):支持所有Baseline profile的特性,但不支持CABAC以及基于宏塊的自適應(yīng)幀場(chǎng)編碼。該層次主要針對(duì)的是各種網(wǎng)絡(luò)視頻流傳輸方面的應(yīng)用。
H.264在算法上分為兩層:視頻編碼層(VCL:Video Coding Layer)和網(wǎng)絡(luò)提取層(NAL:Network Abstraction Layer),如圖1所示。視頻編碼層負(fù)責(zé)高效的視頻內(nèi)容處理;網(wǎng)絡(luò)提取層負(fù)責(zé)網(wǎng)絡(luò)的分段格式封裝數(shù)據(jù),包括組幀、邏輯信道的指令、定時(shí)信息的利用或序列結(jié)束信號(hào)等。其碼流結(jié)構(gòu)的網(wǎng)絡(luò)適應(yīng)性強(qiáng),容錯(cuò)性好,對(duì)誤碼和丟包處理能力強(qiáng)。VCL和NAL之間定義了基于分組方式的接口,高效編碼和良好的網(wǎng)絡(luò)適應(yīng)性分別由VCL和NAL完成[4]。
圖1 H.264標(biāo)準(zhǔn)的整體框架
1)幀內(nèi)預(yù)測(cè)編碼
為了提高H.264幀內(nèi)編碼的效率,在給定幀中充分利用相鄰宏塊的空間相關(guān)性,相鄰的宏塊通常含有相似的屬性。因此,在對(duì)一給定宏塊編碼時(shí),首先可以根據(jù)周圍的宏塊預(yù)測(cè)(典型的是根據(jù)左上角的宏塊,因?yàn)榇撕陦K已經(jīng)被編碼處理),然后對(duì)預(yù)測(cè)值與實(shí)際值的差值進(jìn)行編碼,這樣,相對(duì)于直接對(duì)該幀編碼而言,可以大大減小碼率。
H.264提供6種模式進(jìn)行4×4像素宏塊預(yù)測(cè),包括1種直流預(yù)測(cè)和5種方向預(yù)測(cè),相鄰塊的A~I(xiàn)共9個(gè)像素均已經(jīng)被編碼,可以被用以預(yù)測(cè),如果我們選擇模式4,那么,a、b、c、d4個(gè)像素被預(yù)測(cè)為與E相等的值,e、f、g、h4個(gè)像素被預(yù)測(cè)為與F相等的值,對(duì)于圖像中含有很少空間信息的平坦區(qū),H.264也支持16×16的幀內(nèi)編碼。
2)幀間預(yù)測(cè)編碼
幀間預(yù)測(cè)編碼利用連續(xù)幀中的時(shí)間冗余來進(jìn)行運(yùn)動(dòng)估計(jì)和補(bǔ)償。H.264的運(yùn)動(dòng)補(bǔ)償支持以往的視頻編碼標(biāo)準(zhǔn)中的大部分關(guān)鍵特性,而且靈活地添加了更多的功能,除了支持P幀、B幀外,H.264還支持一種新的流間傳送幀—SP幀。碼流中包含SP幀后,能在有類似內(nèi)容但有不同碼率的碼流之間快速切換,同時(shí)支持隨機(jī)接入和快速回放模式。
3)整數(shù)變換
在變換方面,H.264使用了基于4×4像素塊的類似于DCT的變換,但使用的是以整數(shù)為基礎(chǔ)的空間變換,不存在反變換,因?yàn)槿∩岫嬖谡`差的問題。與浮點(diǎn)運(yùn)算相比,整數(shù)DCT變換會(huì)引起一些額外的誤差,但因?yàn)镈CT變換后的量化也存在量化誤差,與之相比,整數(shù)DCT變換引起的量化誤差影響并不大。此外,整數(shù)DCT變換還具有減少運(yùn)算量和復(fù)雜度,有利于向定點(diǎn)DSP移植的優(yōu)點(diǎn)。
4)量化
H.264中可選32種不同的量化步長(zhǎng),這與H.263中有31個(gè)量化步長(zhǎng)很相似,但是在H.264中,步長(zhǎng)是以12.5%的復(fù)合率遞進(jìn)的,而不是一個(gè)固定常數(shù)。
在H.264中,變換系數(shù)的讀出方式也有兩種:之字形(Zigzag)掃描和雙掃描。大多數(shù)情況下使用簡(jiǎn)單的之字形掃描;雙掃描僅用于使用較小量化級(jí)的塊內(nèi),有助于提高編碼效率。
5)熵編碼
視頻編碼處理的最后一步就是熵編碼,在H.264中采用了兩種不同的熵編碼方法:通用可變長(zhǎng)編碼(UVLC)和基于文本的自適應(yīng)二進(jìn)制算術(shù)編碼(CABAC)。
因此,H.264中還提供了可選的CABAC方法。算術(shù)編碼使編碼和解碼兩邊都能使用所有句法元素(變換系數(shù)、運(yùn)動(dòng)矢量)的概率模型。為了提高算術(shù)編碼的效率,通過內(nèi)容建模的過程,使基本概率模型能適應(yīng)隨視頻幀而改變的統(tǒng)計(jì)特性。內(nèi)容建模提供了編碼符號(hào)的條件概率估計(jì),利用合適的內(nèi)容模型,存在于符號(hào)間的相關(guān)性可以通過選擇目前要編碼符號(hào)鄰近的已編碼符號(hào)的相應(yīng)概率模型來去除,不同的句法元素通常保持不同的模型。
達(dá)芬奇(DaVinci)技術(shù)是TI推出的最新的針對(duì)數(shù)字多媒體應(yīng)用而定制的基于DSP的系統(tǒng)解決方案組件的集合,為多媒體設(shè)備提供商簡(jiǎn)化設(shè)計(jì)并加速產(chǎn)品創(chuàng)新提供集成的處理器、軟件與工具。
達(dá)芬奇技術(shù)提供的開放式開發(fā)平臺(tái)同時(shí)也擴(kuò)展了應(yīng)用程序。達(dá)芬奇軟件初始支持Linux,Linux支持下的內(nèi)容包括外設(shè)驅(qū)動(dòng)器、實(shí)時(shí)應(yīng)用管理、應(yīng)用級(jí)API以及隨時(shí)投產(chǎn)的代碼。針對(duì)視頻而精心優(yōu)化的、基于集成的DSP、專用型開發(fā)工具、調(diào)諧驅(qū)動(dòng)器、CODEC以及系統(tǒng)級(jí)應(yīng)用代碼的整體組合使開發(fā)人員能夠?qū)崿F(xiàn)完整而復(fù)雜的數(shù)字視頻系統(tǒng),僅需少量函數(shù)調(diào)用即可提供編解碼功能[5]。
TMS320DM6467是基于Davinci技術(shù)的最先進(jìn)的媒體處理器,內(nèi)部集成了297MHz的 ARM926EJ-S內(nèi)核與594MHz的C64x+DSP內(nèi)核,并采用高清視頻/影像協(xié)處理器(HD-VICP,Video Image Co-Processor)和視頻數(shù)據(jù)轉(zhuǎn)換引擎(VDCE),在執(zhí)行 H.264HP@L4(1080i60fps、720p 60fps)的同步多格式高清編碼、解碼與轉(zhuǎn)碼方面,比前代處理器性能大大提高,堪稱DaVinci處理器中性能最高者。
無線視頻傳輸中,尤其是遠(yuǎn)距離的傳輸,衛(wèi)星分配的帶寬有限,上行帶寬一般不超過2Mbit/s,即通常采用E1接口來傳輸。下文詳細(xì)描述了TMS320DM6467在低于2Mbit/s的帶寬下能夠傳輸D1格式圖像的設(shè)計(jì)與實(shí)現(xiàn)。
TI的達(dá)芬奇(Davinci)數(shù)字媒體技術(shù)平臺(tái)包括四大部分:芯片(處理器)、開發(fā)工具或開發(fā)套件、軟件及技術(shù)支持。其中軟件開發(fā)涉及到操作系統(tǒng)、音視頻解碼算法及ARM和DSP之間的分工協(xié)作,相對(duì)比較復(fù)雜。
為此TI推出了一系列軟件模塊和工具來建立DaVinci軟件開發(fā)的框架,方便在此基礎(chǔ)上快速地開發(fā)自己的產(chǎn)品。這些軟件模塊和工具包含在TI的基于達(dá)芬奇技術(shù)的DM6467的軟件開發(fā)包中。在視頻應(yīng)用系統(tǒng)中,DaVinci的ARM負(fù)責(zé)操作系統(tǒng)應(yīng)用,DSP負(fù)責(zé)運(yùn)行音視頻編解碼算法處理,ARM通過TI的CodecEngine機(jī)制調(diào)用DSP側(cè)的編解碼codec。
由DaVinci系統(tǒng)的軟件框架可知,應(yīng)用層通過Codec Engine提供的VISA(Video Image Speech Audio)API來調(diào)用DSP側(cè)的算法,并通過EPSI(Easy Peripheral Software Interface)API來訪問和操作外設(shè),這兩個(gè)部分的存在大大簡(jiǎn)化了集成工作的復(fù)雜程度[6]。
如圖2所示,DaVinci的軟件開發(fā)通常需要四個(gè)步驟:
圖2 Davinci的軟件開發(fā)流程
第一步,工程師需要基于DSP利用CCS開發(fā)自己的音視頻編解碼算法,編譯生成一個(gè)編解碼算法的庫(kù)文件木.1ib(等同于Linux環(huán)境下的宰.a64P,直接在Linux環(huán)境下修改文件后綴名即可)。
第二步,生成一個(gè)在DSP上運(yùn)行的可執(zhí)行程序..x64P(P-,P.out文件),也就是DSP Server。
第三步,根據(jù)DSP Server的名字及其中包含的具體的音視頻編解碼算法創(chuàng)建Codec Engine的配置文件*.cfg。這個(gè)文件定義Engine的不同配置,包括Engine的名字、每個(gè)Engine里包括的codecs及每個(gè)codec運(yùn)行在ARM還是DSP側(cè)等等。
第四步,應(yīng)用工程師收到不同的codec包、DSP Server和Engine配置文件*.cfg,把自己的應(yīng)用程序通過編譯、鏈接,最終生成ARM側(cè)可執(zhí)行文件。
DM6467視頻接口可以顯示和捕獲數(shù)字視頻碼流,其特點(diǎn)是:兩個(gè)輸入捕獲通道(Channel 0和Channel 1):其中Channel0和Channell具有相同的結(jié)構(gòu),Chmtnel2和Channel3具有相同的結(jié)構(gòu)。視頻接口框圖如圖3所示。
圖3 VPIF結(jié)構(gòu)框圖
VPIF采集/顯示模塊驅(qū)動(dòng)是基于 V4L2(video for Linux-2)驅(qū)動(dòng)開發(fā)的,V4L2驅(qū)動(dòng)可以實(shí)現(xiàn)視頻的采集和輸出,其對(duì)流水線有很好的支持,并支持多種緩沖區(qū)格式,此外還擁有相應(yīng)的緩沖區(qū)管理機(jī)制。V4L2驅(qū)動(dòng)是Video for Linux的第二版,其解決了V4L中存在的一些問題,并且提高了硬件性能。V4L2驅(qū)動(dòng)是被插入到“videodev”這一核心模塊中的,為L(zhǎng)inux下的視頻設(shè)備提供了一套API和相關(guān)的標(biāo)準(zhǔn),按照V4L2規(guī)定的接口訪問方式控制和讀寫設(shè)備,即可完成視頻的采集和輸出。V4L2驅(qū)動(dòng)利用統(tǒng)一的接口注冊(cè)了一個(gè)主設(shè)備號(hào)為81的字符設(shè)備,次設(shè)備號(hào)可以是0-255,次設(shè)備號(hào)主要是解決同類設(shè)備之間可能的沖突。同時(shí)注冊(cè)了一個(gè)設(shè)備文件操作結(jié)構(gòu),這個(gè)統(tǒng)一的設(shè)備操作結(jié)構(gòu)里的驅(qū)動(dòng)接口函數(shù)根據(jù)被打開特殊設(shè)備文件的次設(shè)備號(hào),來定位該設(shè)備文件對(duì)應(yīng)的struct video device,從而實(shí)現(xiàn)對(duì)特定設(shè)備的控制。為了實(shí)現(xiàn)這種定位,V4L2定義了一個(gè)靜態(tài)數(shù)組static struct video device*video_device[256],每個(gè)特定的設(shè)備都在該數(shù)組里占據(jù)一項(xiàng)。設(shè)計(jì)具體驅(qū)動(dòng)程序時(shí),需通過V4L2提供的設(shè)備注冊(cè)函數(shù)video_register_device將每個(gè)所要控制的硬件設(shè)備數(shù)據(jù)結(jié)構(gòu)填充到該靜態(tài)數(shù)組中。
VPIF顯示驅(qū)動(dòng)主要是對(duì)VPIF接口和編碼器進(jìn)行配置。其中VPIF Display Driver與具體硬件相關(guān),主要實(shí)現(xiàn)的是video device結(jié)構(gòu)體,Encoder Manager負(fù)責(zé)管理系統(tǒng)中的編碼器驅(qū)動(dòng),與具體的硬件無關(guān),向上層的應(yīng)用屏蔽了具體的硬件操作,而與編碼器相關(guān)的硬件操作是通過Encoder實(shí)現(xiàn)的。
VPIF顯示驅(qū)動(dòng)模塊初始化時(shí)首先為兩個(gè)顯示通道分配顯示內(nèi)存,然后通過video_registerdeviceO V4L2驅(qū)動(dòng)模塊注冊(cè)相應(yīng)的struct video—device結(jié)構(gòu),從設(shè)備號(hào)為2和3,并 創(chuàng) 建 相 應(yīng) 的 顯 示 設(shè) 備 節(jié) 點(diǎn) “/dev/video2”和 “/dev/video3”,這兩個(gè)節(jié)點(diǎn)分別對(duì)應(yīng)channel2和channel3。VPIF輸出顯示的所有功能都是由struct video_device實(shí)現(xiàn)的,其結(jié)構(gòu)如下所示。
視頻顯示/采集的基本流程如圖4所示。
圖4 視頻顯示/采集的流程圖
在Linux系統(tǒng)下,通過指令終端進(jìn)入編解碼主程序所在文件夾,然后在終端下編譯(make),然后在下一級(jí)Linux文件夾下生成主程序的執(zhí)行文件,并把文件重命名為encode或decode,將開發(fā)平臺(tái)掛載到Linux下某一目錄,然后把執(zhí)行文件通過該目錄傳入開發(fā)平臺(tái),并建立一個(gè)腳本文件(后綴名為.sh),將對(duì)應(yīng)的子程序與主程序的執(zhí)行文件相鏈接,然后運(yùn)行腳本文件即可實(shí)現(xiàn)編解碼功能。
視頻傳輸降低數(shù)據(jù)量的方式一般有兩種:減少每秒發(fā)送幀數(shù)和降低傳輸比特率。由于算法的封裝,導(dǎo)致接口不透明性,無法修改發(fā)送幀數(shù)。因此,采用降低傳輸比特率的方式,結(jié)果發(fā)現(xiàn),傳輸圖像有明顯的跳線,即數(shù)據(jù)丟失較大,還原不好。具體實(shí)現(xiàn)見流程圖5。
圖5 視頻編解碼采集傳輸流程圖
試驗(yàn)表明:E1線路2M帶寬的模擬衛(wèi)通環(huán)境下,4CIF格式視頻圖像的傳輸,得到了較滿意的效果。較現(xiàn)有的衛(wèi)通CIF(352×288)格式,提高了4倍清晰度D1的效果。傳輸截圖如圖6所示。
圖6 D1格式下的視頻播放
實(shí)踐證明,上述基于TMS320DM6467TDSP平臺(tái)視頻編解碼器的技術(shù)改進(jìn),實(shí)現(xiàn)了H.264的編解碼要求,在提高圖像壓縮率的同時(shí)大大提高了圖像質(zhì)量,尤其在低碼率2MHzbps以下,所恢復(fù)出的圖像質(zhì)量是H.261壓縮標(biāo)準(zhǔn)所無法比擬的。實(shí)現(xiàn)了在2M帶寬的模擬衛(wèi)通傳輸環(huán)境下4CIF格式視頻圖像的傳輸,得到了較滿意的視頻效果。較現(xiàn)有的衛(wèi)通CIF(352×288)格式,提高了4倍清晰度,為更高質(zhì)量衛(wèi)通視頻傳輸提供了可能。
[1]ITU-T Rec.H.264|ISO/IEC 11496-10AVC[S].Document JVT-G050,7th Meeting:Pattaya,Thailand,2003-03.
[2]畢厚杰.新一代視頻壓縮編碼標(biāo)準(zhǔn)—H.264/AVC[M].北京:人民郵電出版社,2005.
[3]Iain E.G.Richardson,The Robert Gordon University,Aberdeen,UK.H.264and MPEG-4Video Compression-Video Coding for Next-generation Multimedia[M/OL].http://nmlab.zju.edu.cn/~mm/book/H.264.And.MPEG-4.Video.Compre-ssion.Video.Coding.For.Next.Generation.Multimedia.pdf.
[4]孫同倫.基于H.264標(biāo)準(zhǔn)的視頻編解碼器的實(shí)現(xiàn)、性能研究與優(yōu)化[D].合肥:中國(guó)科學(xué)技術(shù)大學(xué)碩士學(xué)位論文,2006.
[5]彭啟琮.達(dá)芬奇技術(shù)—數(shù)字圖像/視頻信號(hào)處理新平臺(tái)[M].北京:電子工業(yè)出社,2008.
[6]高平.基于TMS320DM6467的多功能多媒體處理平臺(tái)的軟件設(shè)計(jì)與實(shí)現(xiàn)[D].天津:天津大學(xué)碩士學(xué)位論文,2009.
[7]德州儀器.TMS320PM646XDMSoC Video Port Interface(VPIF)使用向?qū)?版本號(hào):SPRUER90.2009:12-20.
[8]宋磊,方向忠.達(dá)芬奇技術(shù)視頻應(yīng)用分析[J].電視技術(shù),2006:31-33.
[9]Texas Instruments.DVEVM Getting Started Guide,2007:45-58.
[10]文武,吳勇,張杰.基于TM320DM6467的視頻采集系統(tǒng)設(shè)計(jì)[J].電視技術(shù),2011:62-63.