如何使用FPGA實(shí)現(xiàn)高清低碼流視頻編碼?
3G網(wǎng)絡(luò)和智能手機(jī)的迅速普及推動(dòng)了移動(dòng)互聯(lián)網(wǎng)的發(fā)展,為安防網(wǎng)絡(luò)從局域網(wǎng)擴(kuò)展到移動(dòng)互聯(lián)網(wǎng)提供了條件。通過(guò)對(duì)移動(dòng)互聯(lián)網(wǎng)的上行帶寬和下行帶寬的實(shí)測(cè)可以知 道,512 Kbps是一個(gè)有效而且可靠的帶寬值,如果能夠在這個(gè)帶寬值限制條件下實(shí)現(xiàn)高清視頻的傳輸,必將可以推動(dòng)移動(dòng)監(jiān)控應(yīng)用的普及。本文介紹了FPGA在實(shí)現(xiàn)高清低碼流視頻編碼中的作用以及如何具體實(shí)現(xiàn)。
本文引用地址:http://cafeforensic.com/article/221569.htm概述
安防攝像機(jī)的分辨率和碼流是正關(guān)聯(lián)的,進(jìn)入高清時(shí)代后,碼流就在2Mbps以上,比以前D1時(shí)代要高3倍以上,這么大的碼流在 100M/1000M的局部網(wǎng)絡(luò)傳輸是沒(méi)有任何問(wèn)題的,硬盤(pán)存儲(chǔ)的代價(jià)也可以接受;但是如果想在互連網(wǎng)和3G網(wǎng)絡(luò)上傳輸高清視頻,低碼流的要求就凸現(xiàn)出來(lái)了。
首先是高清視頻上傳到互聯(lián)網(wǎng)的問(wèn)題,目前最普及最便宜的上傳技術(shù)是ADSL,上傳速度為512Kbps,用3G也能上傳,CDMA2000的上傳速度為1.8 Mbps,由于無(wú)線傳輸?shù)睦碚摲逯岛蛯?shí)際連續(xù)平均值有相當(dāng)?shù)牟罹?,所以可以估算在幾百Kbps之內(nèi);其次是高清視頻從互聯(lián)網(wǎng)下載到顯示終端的問(wèn)題,ADSL的下載速度一般可以在4 Mbps以上,在家里用3G從網(wǎng)上下載1個(gè)幾十MB的文件,TD-SCDMA的下載速度大約為430 Kbps,CDMA2000的下載速度大約為720Kbps,WCDMA的下載速度大約為1120 Kbps。
綜上所述,高清視頻如果想方便而又經(jīng)濟(jì)地在互聯(lián)網(wǎng)和3G網(wǎng)絡(luò)得到應(yīng)用,512Kbps的平均碼流是合適的。高清視頻在互聯(lián)網(wǎng)和3G網(wǎng)絡(luò)的應(yīng)用中還有一個(gè)問(wèn)題,就是網(wǎng)絡(luò)實(shí)時(shí)帶寬的波動(dòng)比較大, 在這種環(huán)境下傳輸?shù)囊曨l其平均碼流越低,視頻的質(zhì)量就越有保證。
目前現(xiàn)狀是高清視頻720p的碼流一般在2Mbps以上,1080p的碼流在4Mbps以上,要大幅度降低碼流,需要從幾個(gè)方面考慮。
H.264編碼器與FPGA
視頻壓縮編碼是最有效降低碼流的方法,目前H.264是編碼器的首選標(biāo)準(zhǔn)。H.264編碼算法很復(fù)雜,采用了很多方法來(lái)降低編碼碼流。一般來(lái)說(shuō),視頻由連續(xù)的幀組成,編碼后的幀主要有I幀、P幀和B幀。I幀的編碼不依賴其他幀,只利用幀內(nèi)的像素進(jìn)行各種預(yù)測(cè)來(lái)降低編碼碼流;P幀利用當(dāng)前幀和以前的幀做參考,利用幀內(nèi)的像素和幀間的像素進(jìn)行各種預(yù)測(cè)來(lái)降低編碼碼流;B幀利用當(dāng)前、以前和后面的幀做參考,利用幀內(nèi)的像素和幀間的像素進(jìn)行各種預(yù)測(cè)來(lái)降低編碼碼流。
從實(shí)用角度講,P幀和B幀對(duì)降低編碼碼流的貢獻(xiàn)最大,因?yàn)樵诒O(jiān)控應(yīng)用中,P幀和B幀相對(duì)I幀的比例可以很大;而其中B幀作用更加明顯:不僅可以利用前后參考幀來(lái)增加預(yù)測(cè)的準(zhǔn)確性,而且B幀的解碼結(jié)果還可以不作為參考幀,這樣又可以通過(guò)適當(dāng)降低B幀編碼質(zhì)量來(lái)降低編碼碼流,于是B幀的碼流又可以比P幀少很多。B幀除了比P幀多了后向參考幀可以用外,所采用的預(yù)測(cè)方法和P幀是一樣的,所以后面我們只考慮I幀和P幀,分別討論FPGA在預(yù)測(cè)和變換結(jié)果的量化環(huán)節(jié)所起的作用。
預(yù)測(cè)—FPGA在并行處理上的優(yōu)勢(shì)
I幀所采用的預(yù)測(cè)方法是相對(duì)簡(jiǎn)單的,而且在P幀和B幀都可以采用,所以I幀的所有預(yù)測(cè)方法都應(yīng)該全部實(shí)現(xiàn);P幀的預(yù)測(cè)方法非常復(fù)雜,H.264 編碼器的大部分工作量都在這里。P幀的預(yù)測(cè)目的就是找到當(dāng)前宏塊在參考幀的位置(可以將宏塊分成幾部分來(lái)匹配),而且匹配精度是1/4像素,準(zhǔn)確的匹配可以最大限度減少編碼。
為了減少工作量,一般是先進(jìn)行整數(shù)像素的搜索匹配,然后才是1/2和1/4像素的最后匹配,要想提高搜索匹配的成功率,參考幀數(shù)量、搜索范圍和匹配次數(shù)都是很關(guān)鍵的。一般來(lái)說(shuō),參考幀多或者搜索范圍大都需要比較多的匹配次數(shù)。
由于硬件實(shí)時(shí)性和流水線的要求,P幀的預(yù)測(cè)都要在固定的單位時(shí)間內(nèi)完成,在很短的時(shí)間內(nèi)要想實(shí)現(xiàn)盡可能多的匹配次數(shù),并行處理是唯一的選擇,F(xiàn)PGA在并行處理上體現(xiàn)了優(yōu)越性,可以實(shí)現(xiàn)同時(shí)多個(gè)位置的匹配,像一些小菱形的4點(diǎn)或者3點(diǎn)匹配,就可以同時(shí)計(jì)算出3~4點(diǎn)的SAD,比逐點(diǎn)計(jì)算快 3~4倍。另外,多個(gè)參考幀也可以并行處理,同時(shí)得到不同參考幀的最小SAD;并行處理是可以大大提高匹配次數(shù),但是也需要大量的內(nèi)部存儲(chǔ)器和邏輯資源,需要從整個(gè)設(shè)計(jì)的總體資源來(lái)考慮。
變換結(jié)果量化—FPGA的QP控制
I幀是一個(gè)視頻序列的第1幀,所以一般變換量化后的質(zhì)量都比P幀和B幀高,采用的量化參數(shù)QP也要比P幀和B幀所采用的QP要小。但是對(duì)于一些運(yùn)動(dòng)物體少的區(qū)域可以考慮用較大的QP來(lái)降低編碼,就是說(shuō)I幀的不同區(qū)域可以有不同的QP。
P幀一般只對(duì)運(yùn)動(dòng)宏塊有變換量化后的結(jié)果,所采用的量化參數(shù)QP要比I幀大,至于大多少可以根據(jù)運(yùn)動(dòng)速度來(lái)定,速度慢的話量化參數(shù)QP要比I幀 大1~2,速度快的話量化參數(shù)QP要比I幀大3~4,因?yàn)檫\(yùn)動(dòng)速度快時(shí)人眼看的就有點(diǎn)模糊,所以圖像質(zhì)量損失大點(diǎn)也感覺(jué)不明顯。
B幀的結(jié)果可以不作為參考幀,所以B幀的量化參數(shù)QP要比P幀大,以獲得更少的碼流。
從上面的分析可以知道,不僅3種幀的QP大小不同,QP也會(huì)根據(jù)運(yùn)動(dòng)情況而變化,這樣的QP控制很復(fù)雜,而且ASIC的H.264編碼器也不一定有這樣的控制功能,F(xiàn)PGA正好可以實(shí)現(xiàn)這樣的控制。
ISP—FPGA的濾波器和銳化器功能
ISP是編碼前的視頻圖像處理,其中濾波強(qiáng)度和銳化強(qiáng)度對(duì)碼流的影響也很大,濾波算法有很多,其中既能濾波又能保留邊緣的濾波算法是很復(fù)雜的,用FPGA可以方便地實(shí)現(xiàn)不同算法和不同強(qiáng)度的濾波器和銳化器。
智能分析—FPGA的智能分析功能
智能分析主要有兩個(gè)功能,圖像分析和運(yùn)動(dòng)分析。運(yùn)動(dòng)分析是為了獲得視頻中的運(yùn)動(dòng)物體,如人和車(chē)輛等;圖像分析是為了獲得運(yùn)動(dòng)區(qū)域和靜止區(qū)域的分布,可以減少靜止區(qū)域的碼流。一般ASIC的智能分析功能只有運(yùn)動(dòng)分析,F(xiàn)PGA可以同時(shí)實(shí)現(xiàn)這兩個(gè)功能。
FPGA在智能自適應(yīng)中的應(yīng)用
影響碼流的因素主要包括:場(chǎng)景內(nèi)容的變化、視頻分辨率、視頻幀率、量化參數(shù)QP、視頻濾波強(qiáng)度、圖像銳化強(qiáng)度和圖像分析靈敏度等。當(dāng)場(chǎng)景內(nèi)容變 化時(shí),碼流會(huì)隨之發(fā)生變化,為了實(shí)現(xiàn)維持碼流的穩(wěn)定的目標(biāo),就需要同時(shí)調(diào)整其他參數(shù),這就是智能自適應(yīng)。智能自適應(yīng)需要比較復(fù)雜的控制策略來(lái)實(shí)現(xiàn),參與調(diào) 整的參數(shù)分布在ISP、智能分析、H.264編碼等多個(gè)環(huán)節(jié),對(duì)實(shí)時(shí)性要求比較高,很適合用FPGA來(lái)實(shí)現(xiàn)。
FPGA的選擇
H.264編碼以 宏塊為單位,在處理過(guò)程中必然會(huì)涉及到宏塊的輸入輸出和緩存。1個(gè)宏塊的數(shù)據(jù)為384字節(jié)(256字節(jié)亮度數(shù)據(jù)和128字節(jié)色度數(shù)據(jù)),如果考慮到輸入輸 出和處理的并行,必須設(shè)置雙份,即768字節(jié),所以使用1K字節(jié)的存儲(chǔ)塊剛好滿足要求。參考幀的存儲(chǔ)可能包括多個(gè)參考幀宏塊,需要用多個(gè)存儲(chǔ)塊。ISP中 經(jīng)常需要緩存1行像素,1080p每行有1920個(gè)像素,需要2K字節(jié)的存儲(chǔ)塊。
從上面的分析可以看出,適合H.264編碼和圖像處理的FPGA對(duì)內(nèi)部存儲(chǔ)器的要求是:存儲(chǔ)塊容量小(如1~2KB),并且存儲(chǔ)塊數(shù)量越多越好;另外,對(duì)乘法器的要求也是數(shù)量越多越好。
結(jié)語(yǔ)
從上面的論述中可以看出,降低視頻的編碼碼流是一個(gè)系統(tǒng)性的工程,涉及到很多環(huán)節(jié),尤其是H.264編碼器可以做的工作很多。目前我們用 CYCLONE IV的EP4CE115實(shí)現(xiàn)了1280×720×25fps的平均碼流小于512Kbps,H.264編碼檔次是main profile with cabac。隨著FPGA工藝的進(jìn)步,F(xiàn)PGA的資源越來(lái)越多,運(yùn)動(dòng)宏塊的預(yù)測(cè)可以做到越來(lái)越準(zhǔn)確,編碼碼流會(huì)越來(lái)越少,下一步我們準(zhǔn)備用CYCLONE V來(lái)實(shí)現(xiàn)1920×1080×25fps的平均碼流小于1024Kbps。
fpga相關(guān)文章:fpga是什么
評(píng)論