Xilinx FPGA,“加速”视频质量提升
Photo by?Chris Peeters?from?Pexels
本文內(nèi)容來自Xilinx 張吉帥在LiveVideoStackCon2019深圳站上的精彩分享,他將重點(diǎn)討論異構(gòu)計(jì)算中非常具有潛力的一部分 —— FPGA,并詳細(xì)介紹賽靈思以及其技術(shù)生態(tài)合作伙伴在有關(guān)視頻加速,圖片轉(zhuǎn)碼等方面的解決方案。
?
文 / 張吉帥
整理 / LiveVideoStack
1. FPGA的優(yōu)勢
大家好,我是來自Xilinx的張吉帥,隨著視頻內(nèi)容的火爆,其在網(wǎng)絡(luò)上的傳輸量越來越大,對視頻編解碼算力也有了更高的需求;此外,視頻壓縮的標(biāo)準(zhǔn)也在不斷提升,對于H.264視頻編碼壓縮,CPU基本可以勉強(qiáng)支持,但對于H.265、VP9、AV1等更高的視頻編碼標(biāo)準(zhǔn)來說則難以勝任。根據(jù)實(shí)際數(shù)據(jù)顯示,相較于CPU與GPU在BASE LAN加速卡上的表現(xiàn),基于FPGA可以實(shí)現(xiàn)對H.265 1080P 120幀/秒的視頻編碼壓縮,并且在壓縮率、壓縮質(zhì)量以及功耗上都具有更大的優(yōu)勢。除此之外,與ASIC相比,其性價(jià)比會高于FPGA。FPGA還占有相當(dāng)大一部分市場份額的原因主要是因?yàn)镕PGA從方案設(shè)計(jì)開發(fā)到實(shí)際應(yīng)用,整體流程周期非常短。
?
?
具體地說,賽靈思所提供的各種硬件加速解決方案,架構(gòu)通常為FPGA+CPU的異構(gòu)方式。從開發(fā)者或者應(yīng)用的角度,實(shí)際CPU端包含一個(gè)應(yīng)用程序,FPGA端則包含一段二進(jìn)制的FPGA邏輯代碼。而從使用的角度來看,只需要考慮圖中橫線以上部分的使用,與傳統(tǒng)軟件類似,使用起來相對簡單。
?
?
在實(shí)際應(yīng)用中,FPGA部分實(shí)現(xiàn)的是編碼相關(guān)的功能,CPU部分則是通過框架加插件的方式實(shí)現(xiàn)FFmpeg的應(yīng)用,并且插件部分已經(jīng)集成,無需開發(fā),用戶只要簡單調(diào)用FFmpeg,即可使用賽靈思高性能的H.264編碼器。
?
?
圖為賽靈思H.264、HEVC、VP9、AV1等FPGA相關(guān)IP產(chǎn)品。FPGA異構(gòu)計(jì)算的靈活性體現(xiàn)在我們可以將多種不同IP放入同一芯片,完成多種不同工作。例如GPU或ASIC可以實(shí)現(xiàn)編碼相關(guān)工作,而對于賽靈思FPGA,我們可以在芯片中加入HEVC和ABRScaler的IP,從而實(shí)現(xiàn)多種不同碼率視頻流的生成。除此之外,還有低延遲等更多特性。
?
2. Xilinx Media Accelerator(XMA)
賽靈思提供了一整套的API,即Xilinx Media Accelerator(XMA),用戶可以基于API完成一系列的開發(fā)。從CPU通過PCIE到賽靈思芯片,0拷貝的XMA,可以支持多線程、多進(jìn)程,當(dāng)然還包括剛才提到的到FFmpeg框架的接口API。
?
2.1 FPGA接入VP9編碼器
與ASIC不同的是,賽靈思FPGA芯片可用于不同工作。例如接入的是VP9編碼器,圖中淺藍(lán)色部分為CPU進(jìn)行的工作,紅色部分為FPGA芯片進(jìn)行的工作。數(shù)據(jù)進(jìn)入芯片,通過CPU完成解碼,進(jìn)行音頻和視頻的解碼調(diào)試,將解碼出的視頻發(fā)送至ABR的IP,再將結(jié)果傳遞給VP9編碼器,最終與音頻進(jìn)行調(diào)制,生成VP9編碼的音視頻媒體流。
?
2.2 HEVC+VP9編碼視頻流生成
在上述方案的基礎(chǔ)上,只需要加載HEVC的IP,即可在同一芯片中實(shí)現(xiàn)VP9編碼視頻流以及生成HEVC編碼視頻流。
?
2.3 人臉識別
?
除此之外,如果我們希望實(shí)現(xiàn)視頻中人臉識別的功能,還可以在其中加入Machine Learning的IP。
2.4?同一芯片中可接入多個(gè)IP
上述內(nèi)容中所提到的ABR的IP,H.264的IP,在同一芯片中可以接入多個(gè),并通過CPU進(jìn)程進(jìn)行調(diào)度。
編碼器多路視頻流輸入、輸出的應(yīng)用
?
3. 賽靈思實(shí)時(shí)視頻轉(zhuǎn)碼架構(gòu)
如上架構(gòu)圖所示,賽靈思實(shí)時(shí)視頻轉(zhuǎn)碼包含兩種不同的途徑,XMA和OpenCL。按照層次結(jié)構(gòu),向下劃分為HAL硬件抽象層,驅(qū)動(dòng)以及最底層的數(shù)據(jù)通道和管理通道。
?
實(shí)現(xiàn)編碼器編程所需要了解的XMA的相關(guān)API
?
上述XMA相關(guān)API事實(shí)上是對編碼、解碼等行為的抽象,因此我們可以看到基本上都是初始化的過程,即發(fā)送數(shù)據(jù)到Lower Edge,再到Video Kernel。
?
Video Kernel與芯片中相關(guān)IP接入時(shí)的代碼
?
文末給出的參考鏈接,github中的代碼可以直接運(yùn)行
?
如果不需要通過FPGA開發(fā)新的功能,只是簡單的使用編碼器,如圖左所示為傳統(tǒng)的FFmpeg框架,如圖右所示為賽靈思編碼器中FFmpeg的調(diào)用。
?
點(diǎn)擊【閱讀原文】訪問購票頁面
總結(jié)
以上是生活随笔為你收集整理的Xilinx FPGA,“加速”视频质量提升的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 腾讯视频P2P带宽节省率持续提升之路
- 下一篇: 音视频技术开发周刊 | 137