本文來(lái)自英特爾資深軟件工程師李忠,張華在LiveVideoStackCon 2018大會(huì)上的分享,由LiveVideoStack整理而成。分享中兩位老師重點(diǎn)介紹了基于FFmpeg的運(yùn)動(dòng)視頻分析技術(shù)架構(gòu),以及英特爾視頻分析的軟硬件解決方案。
大家好,我是來(lái)自英特爾開(kāi)源技術(shù)中心的李忠,致力于對(duì)FFmpeg硬件加速的研究開(kāi)發(fā)。今天我將與來(lái)自英特爾Data Center Group的張華老師一起,與大家分享我們對(duì)基于FFmpeg的運(yùn)動(dòng)視頻分析解決方案的技術(shù)實(shí)踐與探索。
首先我會(huì)為大家介紹視頻分析的市場(chǎng)前景與基于FFmpeg的運(yùn)動(dòng)視頻分析解決方案的主體架構(gòu)。而張華老師會(huì)為大家分享英特爾運(yùn)動(dòng)視頻分析的典型案例,希望可以為大家?guī)?lái)幫助。
1.視頻分析的市場(chǎng)前景
可以說(shuō),視頻分析是一片潛力巨大的新興市場(chǎng),目前全球視頻分析市場(chǎng)規(guī)模已超過(guò)145億美元,資本對(duì)視頻內(nèi)容的總投入逐年增加并會(huì)在未來(lái)保持繼續(xù)增長(zhǎng)的態(tài)勢(shì)。目前的網(wǎng)絡(luò)帶寬中視頻流占總體數(shù)據(jù)流的80%,如果我們能夠在這樣一個(gè)規(guī)模龐大的市場(chǎng)借助視頻分析的力量為用戶帶來(lái)更優(yōu)秀的產(chǎn)品體驗(yàn),無(wú)疑是對(duì)整個(gè)音視頻行業(yè)的一次有利的促進(jìn)。
2.視頻行業(yè)的技術(shù)趨勢(shì)
從技術(shù)趨勢(shì)上看,視頻分析與當(dāng)下多種高新技術(shù)緊密結(jié)合。根據(jù)專業(yè)咨詢公司給出的2018年技術(shù)趨勢(shì)報(bào)告,視頻分析與AI Foundation(可提供多種能夠幫助用戶進(jìn)行視頻分析的AI基礎(chǔ)組件如Framework、Analyse等)、智能APP與智能分析(完善的智能分析解決方案)、沉浸式體驗(yàn)(VR、AR、MR等)。我們希望視頻分析技術(shù)能夠在市場(chǎng)中大放異彩,為客戶帶來(lái)理想的收益與價(jià)值。
3.基于FFmpeg的運(yùn)動(dòng)視頻分析
3.1 視頻分析流程
那么落實(shí)到技術(shù)當(dāng)中,接下來(lái)我將介紹視頻分析的詳細(xì)流程。視頻分析不單單包括對(duì)視頻數(shù)據(jù)的計(jì)算,而是由多個(gè)協(xié)同工作的組建構(gòu)建起的一套完整架構(gòu)并集成在一條符合邏輯的處理流程當(dāng)中。上圖展示的是比較典型的視頻分析流程。首先,傳輸進(jìn)來(lái)的視頻源數(shù)據(jù)會(huì)被解碼、縮放與視頻顏色空間轉(zhuǎn)換從而便于后續(xù)的分析;而后視頻數(shù)據(jù)會(huì)被具體分析如人臉檢測(cè)、入侵檢測(cè)、視頻特征提取、車輛識(shí)別與檢測(cè)等;完成分析后傳輸?shù)慕Y(jié)果可能是從視頻中提取的目標(biāo)信息,也可能是經(jīng)過(guò)轉(zhuǎn)碼生成的視頻流;整套視頻分析流程需要強(qiáng)大的服務(wù)器支撐如Video Storage Server、Video Streaming Server與Video Application Server等服務(wù)器;最底層則是HW Platform,用戶可根據(jù)自身需求通過(guò)HW Platform調(diào)用CPU、GPU等硬件。
3.2 視頻分析架構(gòu)
我們需要一個(gè)能夠完美支持上述視頻分析流程的優(yōu)秀架構(gòu),也就是將FFmpeg的架構(gòu)與視頻分析流程緊密結(jié)合。上圖展示的是一個(gè)完整的FFmpeg架構(gòu),有著對(duì)Streaming、Decoding、Encoding、Mux、Demux等功能的良好支持,且能夠?qū)⒔?jīng)過(guò)Demux/Splitter處理的數(shù)據(jù)流分解成Video流與Audio流以便于后續(xù)進(jìn)行對(duì)音視頻的分析處理如傳統(tǒng)的去抖動(dòng)、顏色空間轉(zhuǎn)換、FRC等操作。(FFmpeg有兩個(gè)典型輸出:輸出Video Renderer與或再進(jìn)行一次編碼后與音視頻流復(fù)合輸出,通過(guò)流媒體傳輸上載到端設(shè)備處。)
大家可以看到FFmpeg的架構(gòu)和視頻分析的流程非常相似,F(xiàn)Fmpeg的優(yōu)勢(shì)之一是對(duì)流媒體、編解碼、Mux/Demux等功能的良好支持,其次FFmpeg也支持多種視頻Filter如Scaling、CSC、Denoise、Tone-Mapping等。至于硬件解決方案,F(xiàn)Fmpeg同樣支持Hardware Upload/Download等Filter,用于CPU和GPU存儲(chǔ)之間的數(shù)據(jù)交換。當(dāng)然,F(xiàn)Fmpeg對(duì)英特爾硬件加速轉(zhuǎn)碼的Filter如DXVA、VA-API、QSV、OpenCL等的支持同樣優(yōu)異。雖然FFmpeg擅長(zhǎng)處理視頻相關(guān)復(fù)雜任務(wù),但其對(duì)AI相關(guān)功能的支持還停留在較為原始的階段,僅能勝任一些簡(jiǎn)單AI處理任務(wù)如超分辨率等。除此之外,擅長(zhǎng)視頻轉(zhuǎn)碼的FFmpeg并不擅長(zhǎng)視頻分析,如果我們需要將其用于視頻分析則需要把FFmpeg與一些CV Libaries或AI Libaries相結(jié)合。
3.3 FFmpeg 英特爾硬件加速解決方案
我們知道,對(duì)一條視頻流進(jìn)行分析需經(jīng)過(guò)編碼、解碼、處理、分析等流程,其背后的計(jì)算過(guò)程之復(fù)雜,數(shù)據(jù)量之大超乎想象,如何保證性能的持續(xù)高效輸出便成了擺在我們面前的關(guān)鍵性命題。如果僅基于CPU實(shí)現(xiàn)這樣一套計(jì)算量巨大流程復(fù)雜的實(shí)時(shí)處理效果顯然是不現(xiàn)實(shí)的,單純地堆砌CPU也會(huì)為企業(yè)帶來(lái)巨大的成本壓力。那么我們能否選擇現(xiàn)有的硬件加速解決方案來(lái)優(yōu)化處理流程使其實(shí)現(xiàn)硬件的充分利用?
在轉(zhuǎn)碼領(lǐng)域,F(xiàn)Fmpeg已對(duì)英特爾硬件加速有了較為優(yōu)異的支持。在Linux環(huán)境下,F(xiàn)Fmpeg包含三個(gè)plugins:VA-API Plugins、QSV Plugins、Compute Plugins。VA-API Plugins可直接調(diào)度LibVA的Interface并通過(guò)Intel Video Driver實(shí)現(xiàn)硬件加速;QSV Plugins則需要調(diào)用MSDK,再通過(guò)MSDK調(diào)用LibVA從而通過(guò)Intel Video Driver實(shí)現(xiàn)硬件加速;而Compute Plugins則主要通過(guò)調(diào)用OpenCL或即將被支持的Vulkan來(lái)進(jìn)行計(jì)算,利用GPU強(qiáng)大的通用計(jì)算能力提供更多的擴(kuò)展功能。
英特爾GPU支持的Codec范圍十分廣泛,除了HEVC,還有H.264、VP8、VP9、MPEG2等;基于VAAPI的Filter有dnoise、color space convertion,以及scaling等,而基于QSV的Filter功能上也是很類似的。無(wú)論是VAAPI還是Media SDK都對(duì)Intel Video Driver、Intel HW Fix Function有良好支持。有時(shí)我們需要一種更為靈活的方案,那么可以用到Compute Pugins,主要包括OpenCL與Vulkan。開(kāi)發(fā)者可通過(guò)此Filter利用英特爾GPU的通用計(jì)算能力實(shí)現(xiàn)強(qiáng)大功能,并且目前Compute Plugins對(duì)Overlay /ToneMapping等都有良好支持。也許有人會(huì)提出疑問(wèn):為什么需要三個(gè)Plugins?從平臺(tái)限制角度來(lái)看,Compute Plugins可以不局限于Fix funtion而提供更為靈活的解決方案。而VA-API Plugins則是FFmpeg的一條更為本地化(Native)的pipeline,并不依賴Media SDK;但VA-API Plugins的局限在于僅支持Linux而不支持Windows,而QSV Plugins 流程下的Media SDK卻可提供跨平臺(tái)支持,比如Media SDK可在Windows上進(jìn)行Encode的原因;其次VAAPI更多是基于FFmpeg實(shí)現(xiàn)諸多功能,這對(duì)熟悉FFmpeg的開(kāi)發(fā)者而言上手難度較低,方便基于VAAPI實(shí)現(xiàn)二次開(kāi)發(fā),而Media SDK更多由英特爾主導(dǎo)。另外,一些針對(duì)英特爾硬件平臺(tái)做的高復(fù)雜度所做的功能或優(yōu)化,并不適合在FFmpeg這層實(shí)現(xiàn),比較適合由MSDK處理,比如MFE等。
對(duì)轉(zhuǎn)碼流程而言最重要的三項(xiàng)Encoder指標(biāo):質(zhì)量、性能表現(xiàn)、配置靈活度。為了提升Encoder質(zhì)量,我們加入了look ahead碼率控制、動(dòng)態(tài)GOP判斷、自適應(yīng)(IPB)劃分等為Encoder質(zhì)量帶來(lái)顯著提升。
為了提升性能表現(xiàn),我們針對(duì)以下兩種轉(zhuǎn)碼場(chǎng)景進(jìn)行了優(yōu)化調(diào)整——一對(duì)一轉(zhuǎn)碼和一對(duì)多轉(zhuǎn)碼。我們?cè)谝粚?duì)一轉(zhuǎn)碼中引入了異步機(jī)制,較為復(fù)雜的視頻圖像任務(wù)交給GPU硬件加速完成,而音頻編解碼處理、Mux/Demux等工程量較小的任務(wù)則交給CPU完成。科學(xué)分配CPU與GPU所要承擔(dān)的任務(wù)并通過(guò)異步機(jī)制使二者默契配合。統(tǒng)流程中,當(dāng)CPU完成給定任務(wù)后產(chǎn)生的等待間隙會(huì)對(duì)性能造成損失;而引入異步操作后,當(dāng)CPU完成給定工作后會(huì)將這部分工作直接傳遞至GPU中而自己去處理其他一些亟待完成的任務(wù),接下來(lái)GPU再將處理完的任務(wù)傳回CPU,這種異步操作可極大改善轉(zhuǎn)碼的性能表現(xiàn)。而針對(duì)一對(duì)多或多對(duì)多轉(zhuǎn)碼,我們使用一種被稱為MFE (multiple frame encoding)的方式優(yōu)化轉(zhuǎn)碼流程。視頻編碼可被簡(jiǎn)單理解為對(duì)一幀幀單獨(dú)編碼,而英特爾對(duì)轉(zhuǎn)碼的性能利用率要求很高,如果單純地一幀幀轉(zhuǎn)碼就會(huì)出現(xiàn)GPU利用率不高的問(wèn)題,造成利用率不高問(wèn)題的主要原因之一是流水并行的啟動(dòng)和終止。我們知道,視頻編碼流程可看作是基于宏塊(macroblock)的流水線作業(yè),流水線的并行需要啟動(dòng)與終止時(shí)間;對(duì)于那些小分辨率視頻來(lái)說(shuō)流水線的啟動(dòng)與終止時(shí)間較長(zhǎng),整條線程還未完全排布滿工程這一幀就已結(jié)束,導(dǎo)致流水并行度的不足,硬件性能利用率不高;除此之外,還有像GPU hardware context switch問(wèn)題也能造成GPU性能使用效率較低的情況。如何提高一對(duì)多或多對(duì)多轉(zhuǎn)碼的性能表現(xiàn)?MFE可以將多幀進(jìn)行整合從而讓GPU編碼并輸出使得轉(zhuǎn)碼效率獲得顯著提升。
配置靈活性是除了編碼質(zhì)量外影響GPU使用的另一重要因素,可使用Filter的數(shù)量與配置Encode的靈活便捷程度直接影響我們開(kāi)發(fā)相關(guān)功能的成本。如X264包括許多非常方便的配置,并且也提供了很多Preset。我們希望盡可能簡(jiǎn)化開(kāi)發(fā)流程降低開(kāi)發(fā)門檻,精簡(jiǎn)用戶需要確定的輸入?yún)?shù)并提供一些簡(jiǎn)單的Preset。這樣對(duì)于一般用戶而言不需要在運(yùn)動(dòng)搜索多少幀與范圍上花太多精力,只需設(shè)置好Preset就可在硬件加速的質(zhì)量與性能表現(xiàn)二者之間取得平衡。
上圖展示的三條pipeline各有其優(yōu)勢(shì),且適用場(chǎng)景也不盡相同。在FFmpeg中我們可以靈活的選擇,如單純使用VAAPI進(jìn)行轉(zhuǎn)碼、Scaling或CSC;或者通過(guò)QSV的Transcoding pipeline進(jìn)行視頻編解碼和視頻處理;除此之外,還支持兩者間的混合使用,以達(dá)到優(yōu)勢(shì)互補(bǔ)的效果。如選擇VAAPI decode + QSV encode的方式,構(gòu)建成的pipeline適用性更強(qiáng),可以極大程度上拓展用戶開(kāi)發(fā)相關(guān)功能的范圍。
3.4 Intel AI Portfolio
盡管FFmpeg對(duì)AI的支持較為欠缺,但英特爾對(duì)AI Portfolio的支持可以說(shuō)是相當(dāng)完整,提供了一套從底層到中間層覆蓋完善的成熟AI工具集,無(wú)論是靈活性還是選擇范圍都非常優(yōu)秀,開(kāi)發(fā)者可根據(jù)具體應(yīng)用場(chǎng)景來(lái)選擇使用什么樣的硬件與架構(gòu)。
接下來(lái)有關(guān)英特爾運(yùn)動(dòng)視頻分析案例的解析部分,由來(lái)自英特爾DCG的張華老師為大家分享。
4.英特爾運(yùn)動(dòng)視頻分析案例解析
大家好,緊接著李老師的分享,我將會(huì)為大家介紹英特爾借助FFmpeg硬件加速實(shí)現(xiàn)運(yùn)動(dòng)視頻分析的典型案例,我們主要會(huì)將此功能用于大型體育賽事的回放與模擬,涉及在線視頻編解碼,對(duì)球和球員的識(shí)別,3D場(chǎng)景重建等功能從而實(shí)現(xiàn)沉浸式觀看體驗(yàn)。
4.1 基于5G FlexRAN的2.5k體育直播畫(huà)面的虛擬分析
例如圖中展示的5G網(wǎng)絡(luò)下的足球比賽場(chǎng)景分析,包含多路視頻輸出。每路視頻都會(huì)進(jìn)行球員的識(shí)別和跟蹤,球的識(shí)別和跟蹤,最終借助得到信息和視頻還原的整個(gè)球場(chǎng)的狀態(tài)。體育場(chǎng)上方會(huì)布置12臺(tái)不同角度用于圖像捕捉的攝像頭,由這些攝像頭捕捉并處理完成的數(shù)據(jù)首先會(huì)被以2.5k AVC@30fps的格式參數(shù)傳輸至集成了VCA卡的視頻處理服務(wù)器,視頻處理服務(wù)器處理完成后的視頻數(shù)據(jù)會(huì)被轉(zhuǎn)碼壓縮并傳輸至5G FlexRAN——這是英特爾一個(gè)基于5G網(wǎng)絡(luò)搭建的數(shù)據(jù)處理平臺(tái),其功能類似于CDN,將處理完成的視頻數(shù)據(jù)傳輸分發(fā)至每一位場(chǎng)外觀眾的移動(dòng)終端上。需要強(qiáng)調(diào)的是,這些攝像頭的位置都需要進(jìn)行預(yù)先設(shè)置和標(biāo)定,并且每路視頻會(huì)被獨(dú)立處理。
4.2 解決方案詳述
如果想達(dá)到符合要求的重建效果,我們需要什么條件?除了剛才介紹到的12個(gè)負(fù)責(zé)采集、轉(zhuǎn)碼、視頻分析、三維重建的攝像機(jī)位,還需要可靠的網(wǎng)絡(luò)傳輸也就是5G FlexRAN;在功能上,我們需要將視頻以12x AVC 2.5k@30fps的編碼形式在整條流程上傳輸,而視頻分析、編解碼等操作都是在邊緣服務(wù)器上完成。為了滿足這樣的編解碼與視頻分析需求,我們需要24張VCA卡(每路視頻兩張)用于分析球與球員的運(yùn)動(dòng)情況,包括球與球員的監(jiān)測(cè)與跟蹤、融合、分析結(jié)束后的轉(zhuǎn)碼等等。我們會(huì)根據(jù)終端的支持情況調(diào)整視頻輸出的格式參數(shù)。
4.3 關(guān)鍵特性
對(duì)于運(yùn)動(dòng)場(chǎng)景的視頻分析,關(guān)鍵在于球和球員的detection與tracking,結(jié)合球與球員運(yùn)動(dòng)軌跡分析二者精準(zhǔn)位置與運(yùn)動(dòng)情況。這里需要強(qiáng)調(diào)的是,我們采取不同的流程處理球與球員。主要是因?yàn)閷?duì)于2.5K分辨率的視頻進(jìn)行監(jiān)測(cè)與分析,球在畫(huà)面中只是一個(gè)很小的元素,單純的掃描無(wú)法準(zhǔn)確判斷球的運(yùn)動(dòng)軌跡,所以系統(tǒng)只能將2.5k的視頻源畫(huà)面分割成若干個(gè)分辨率為160×160的小畫(huà)面并且使得畫(huà)面與畫(huà)面之間一定存在重合,這樣每幀原始視頻需要在計(jì)算大約兩百幅畫(huà)面后才能完成detection;而球員相對(duì)球而言在畫(huà)面中要更佳明顯,這樣需要計(jì)算的小畫(huà)面數(shù)量就會(huì)降低,如此龐大的數(shù)據(jù)量需要強(qiáng)大的計(jì)算能力;但球或球員的運(yùn)動(dòng)是有連續(xù)漸變的,這就使得我們不需要對(duì)每幀視頻進(jìn)行detection;通過(guò)對(duì)球員的跟蹤大致預(yù)測(cè)球員的前進(jìn)軌跡從而推測(cè)出下一幀球出現(xiàn)的位置,從而通過(guò)tracking加速分析過(guò)程。在此基礎(chǔ)上,一些功能就可以實(shí)現(xiàn):“Freeze Moment”的功能,也就是定格比賽并以三維場(chǎng)景呈現(xiàn)賽場(chǎng)瞬間定格; “精彩瞬間”的功能,主要也是通過(guò)三維場(chǎng)景重建還原比賽的精彩瞬間。但三維重建等流程還未達(dá)到實(shí)時(shí)處理的要求,后續(xù)還需在算法上進(jìn)一步優(yōu)化。
4.4 處理流程
上圖展示的是每一路視頻的處理流程。此流程基于FFmpeg 充分利用Intel GPU的硬件pipeline,達(dá)到處理的最高效率,AI部分的處理工作是由GPU完成,數(shù)據(jù)也是在GPU的顯存中存儲(chǔ),中間的主要處理流程包括球與球員的監(jiān)測(cè)與跟蹤;detection是fine-tune后的Yolo-v2算法,tracking的算法是MDP。隨后系統(tǒng)會(huì)融合球與球員,也就是將攝像機(jī)坐標(biāo)映射至球場(chǎng)坐標(biāo),根據(jù)物體的特點(diǎn)不同,融合的方法一不一樣,球是3D融合,球員是2D融合。12個(gè)機(jī)位代表有12路上述處理流程與數(shù)據(jù),每一個(gè)機(jī)位之間都是聯(lián)動(dòng)關(guān)系,這就需要一套可靠的任務(wù)分發(fā)機(jī)制保證每個(gè)機(jī)位的正常工作。
4.5 FFmpeg 英特爾硬件加速解決方案的實(shí)踐
英特爾硬件加速解決方案包括以下四個(gè)部分:FFmpeg Decoder Plugins 支持純硬件的視頻解碼,可充分利用英特爾GPU相關(guān)功能;FFmpeg Video Processing Plugins負(fù)責(zé)借助硬件加速優(yōu)化YUV和ARGB 間的轉(zhuǎn)換等視頻處理;FFmpeg + OpenGL 3D Overlay用于整合解碼視頻與媒體分析這兩種輸出;FFmpeg Encoder plugin則利用英特爾GPU對(duì)由多路視頻分析輸出組成并以三維圖形呈現(xiàn)的幀進(jìn)行編碼。
4.6 強(qiáng)調(diào):并行計(jì)算
為什么采用并行策略?一場(chǎng)體育比賽需要的12個(gè)機(jī)位且機(jī)位之間是相互依賴的,系統(tǒng)只有等待12路數(shù)據(jù)全部處理完之后才能得出整個(gè)球場(chǎng)的實(shí)時(shí)動(dòng)態(tài)。如果考慮時(shí)間軸上每一幀球場(chǎng)的動(dòng)態(tài)變化則更為復(fù)雜,整套系統(tǒng)必須有一個(gè)高效的任務(wù)調(diào)度過(guò)程來(lái)處理多路視頻,實(shí)現(xiàn)同步。
-
英特爾
+關(guān)注
關(guān)注
61文章
10120瀏覽量
173444 -
視頻
+關(guān)注
關(guān)注
6文章
1966瀏覽量
73527 -
ffmpeg
+關(guān)注
關(guān)注
0文章
46瀏覽量
7540
原文標(biāo)題:基于FFmpeg的運(yùn)動(dòng)視頻分析
文章出處:【微信號(hào):livevideostack,微信公眾號(hào):LiveVideoStack】歡迎添加關(guān)注!文章轉(zhuǎn)載請(qǐng)注明出處。
發(fā)布評(píng)論請(qǐng)先 登錄
相關(guān)推薦
評(píng)論