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