基於FPGA的高性能視頻硬件編碼器

基於高性能視頻編解碼技術的解決方案,能夠實現高清畫質更快的壓縮速度、更少的帶寬消耗,在知足用戶高清畫質要求的前提下有效下降運營成本。阿里巴巴達摩院XG實驗室,高級算法專家楊名遠在LiveVideoStack線上分享中詳細介紹了現有視頻編碼方案存在的挑戰,並對高性能視頻硬件編碼技術進行了詳細解析。算法

文 / 楊名遠服務器

整理 / LiveVideoStack網絡

視頻回放:https://www.livevideostack.cn/video/online0604-ymy/多線程

你們好,很是高興可以和你們分享咱們團隊這一年內所作的一些工做、研究和想法,本次分享的主題是高性能硬件視頻編碼。架構

視頻業務發展趨勢

FPGA的硬件編碼器在壓縮性能與處理能力間尋求平衡

 

大約是在2018年,咱們在考慮是否要面向視頻編碼方向作些研究,當時看到的一個趨勢是:互聯網視頻頭部內容如電商直播、遊戲直播等視頻內容質量愈來愈高,已經從標準尺寸轉換爲720P,甚至部分遊戲直播場景、網紅直播場景已經支持1080p/30fps、1080p/60fps,同時因爲5G信道帶寬的增長,AR/VR場景的應用出現復甦跡象。框架

從端側來說,手機屏幕的面積愈來愈大,目前已基本能夠支持720P或1080P。隨着柔性屏幕的擴展以及觀看視野的放大,視頻的體驗也許能夠從1080P擴展到4K、8K,高性能視頻端到端傳輸系統已經具有了從內容製做到傳輸到終端總體的技術支持。ide

FPGA的硬件編碼器在壓縮性能與處理能力間尋求平衡

 

如圖是一些調研報告,咱們能夠看到無線信道中的視頻流量佔有很大比重,預計到2024年比重可達到74%,同時用戶的使用行爲正在逐漸發生變化,從標清視頻開始向高清HD甚至是4K、8K超高清方向轉變。性能

所以,高質量視頻(high resolution/high framerate/HDR)將在明後年迎來大幅度的增加測試

FPGA的硬件編碼器在壓縮性能與處理能力間尋求平衡

 

如圖左邊是一個商業調研報告,以電商直播、在線教育等新的基於行業特色的視頻應用不斷涌現,到2020年,中國網絡視頻行業規模達2940億人民幣,其中大部分來自於泛娛樂直播,包括短視頻、在線視頻等。優化

如圖右邊是來自賽靈思的針對各大上市公司的財報調研報告,報告中顯示,廣泛帶寬成本在整年財政收入中所佔比重較大,特別以遊戲直播爲主的視頻網站,帶寬成本甚至可能有超過10%的佔比。因此,對於視頻網站來講,帶寬成本和存儲成本是很是大的。

2

現有視頻編碼方案存在的挑戰

FPGA的硬件編碼器在壓縮性能與處理能力間尋求平衡

 

現有視頻編碼方案主要分爲兩種,一種是軟件方案,例如較多應用於X86平臺上的軟件編碼器。另外一種就是硬件方案,例如NVDIA GPU中的硬核,FPGA方案以及ASIC SoC的解決方案。

軟件編碼器的特色是能夠進行復雜度配置的任意調整,例如x265,就有不少複雜度,不一樣的複雜度對應不一樣的壓縮效率和處理能力,例如x265 veryslow檔的帶寬節省比superfast檔高出40%的碼率,可是單位時間內處理幀率會低不少。隨着摩爾定律的失效,軟件編碼器在對時效性有要求的業務場景須要進行壓縮性能和處理能力的平衡。

右圖是對當前幾種不一樣硬件編碼器的水平進行的測試,從測試結果中能夠看到,現存業界較好的硬件實時高清硬件編碼方案的壓縮性能基本能夠達到x265 medium檔的水平。

3

硬件編碼技術

基於上述現有編碼技術背景的調研以及現有方案的分析,咱們發現,硬件編碼器可能須要一種產品形態,即在現有硬件編碼技術基礎上追求更高的壓縮性能,同時須要保證必定的實時性的處理能力,在壓縮性能與處理能力間尋找一種平衡,以更好的解決帶寬和存儲成本的問題。

FPGA的硬件編碼器在壓縮性能與處理能力間尋求平衡

 

所以,咱們團隊通過一年多的努力,成功研發了一款基於FPGA的硬件編碼器-XGH265,目前已經將該編碼器部署在阿里雲的異構服務平臺(阿里雲舜天平臺)。右側圖就是FPGA卡,能夠經過PCIE插在X86服務器上。圖中Host表明X86服務器,經過PCIE與FPGA板卡進行信息交互。

FPGA的硬件編碼器在壓縮性能與處理能力間尋求平衡

 

如上圖中架構圖所示,黃色區域表明X86服務器;藍色區域表明異構服務器平臺自己具有的硬件和架構,包括PCIE的驅動、傳輸等;綠色部分是咱們搭建的整套系統,包括嵌入式CPU、DMA交互、數據傳輸等;橙色部分也是咱們團隊研發的265編碼器,主要包括兩個模塊:預處理模塊、編碼模塊。

FPGA的硬件編碼器在壓縮性能與處理能力間尋求平衡

 

軟件方面,在X86服務器上採用的是較爲流行的FFmpeg軟件進行編碼調度、命令下發等工做,原始編碼碼流會經過FFmpeg解碼,將解碼後的YUV圖像經過PCIE傳到FPGA卡上,FPGA卡上的CPU/固件系統在接收到YUV圖像後進行編碼任務調度,控制FPGA HEVC Encoder編碼出265碼流,將編好的碼流回傳至主服務器, 再經過協議封裝成TS或MP4等格式進行推流。

X86服務器的FFmpeg支持多線程、多進程編碼、編碼參數等信息傳遞、以及對編碼器的監控和異常處理。

FPGA編碼器上的CPU和固件負責的工做有:編碼通道管理、不一樣通道的編碼器配置、預分析計算(包括場景檢測、幀類型決策等)、參考幀管理、碼率控制等。

FPGA的硬件編碼器在壓縮性能與處理能力間尋求平衡

 

如圖是硬件編碼器的編碼框架,以前的一些硬件編碼器設計中,MD模塊大可能是採用非RDO或者說是簡單RDO的決策,而咱們的設計目標是實現一款高壓縮性能的編碼器,所以在編碼器架構設計中採用了全RDO的決策模式,整個決策過程能夠獲得最真實的重構像素和CABAC狀態及時更新後的機率表,最大程度上保留了編碼過程的依賴性,同時對DPCM流水線處理作了極致優化保證MD可以全遍歷不一樣CU大小和更多的模式,從而得到了最好的壓縮性能。

可是全RDO的編碼架構設計會給硬件的高速實現帶來不少困難,如編碼模塊中會存在大量複雜的反饋信息。在硬件設計中,處理性能的更好實現主要是基於數據的流水和並行處理,所以反饋機制所要承擔的壓力就會比較大,若是在必定時間內反饋的數據沒有到達則流水處理就須要等待,因此說反饋機制的設計是編碼器設計實現中的一個難點。

咱們在流水線設計和算法設計上的優化解決了這些難題,好比經過對TU流水線的Cycle級精細化控制,頻域Distortion預估等架構和算法的設計既增長了流水線的吞吐量,又保持了各個模塊的信息獲取的依賴關係。相似的設計和算法優化還有不少,因爲篇幅的限制在此就不一一列舉了。

從視頻編碼的角度來講,如H.26五、H.266/VVC等,壓縮性能的提高很大程度上來自反饋機制或者模塊間的耦合。爲了儘量保證明現265比較高的壓縮性能,所以在設計架構時,對於反饋機制部分咱們投入了很大的精力進行設計與優化。

FPGA的硬件編碼器在壓縮性能與處理能力間尋求平衡

 

如圖是FPGA的物理版圖,由三個die組成,每一個die之間經過連線的方式進行數據傳遞,不一樣色彩的模塊表明不一樣的編碼模塊,資源的利用很是密集。實現了編碼器的三大特色:高資源利用率、高頻率(核心計算模塊的主頻已達到400M)、合理的多die設計,這三個特色保證了高性能壓縮的能力。

FPGA的硬件編碼器在壓縮性能與處理能力間尋求平衡

 

如下是咱們實現的硬件編碼器的一些主要特性:

l 全RDO架構保證了視頻中低碼率段的壓縮性能

l 支持CBR、CRF、CQP等各種碼控算法

l 場景檢測、幀類型決策、碼率控制等算法爲軟件算法,能夠支持隨時升級

l 支持延遲可配置,延遲從幾幀到幾十幀

l 支持高性能主管調節,提高主客觀性能,減小馬賽克效應的出現

l 支持Close GOP,OPEN GOP和自適應B幀

l 流媒體系統採用ffmpeg,便於與現有大部分系統對接

4

硬件編碼器性能

FPGA的硬件編碼器在壓縮性能與處理能力間尋求平衡

 

最後是XGH265與x265 veryslow檔 軟件加速比的一個測試比較。在阿里雲標準機型下,在同等成本下,XGH265達到近20倍速度的提高。在壓縮性能方面,同等質量下,XGH265節省帶寬最多。

相關文章
相關標籤/搜索