0
  • 聊天消息
  • 系統(tǒng)消息
  • 評論與回復(fù)
登錄后你可以
  • 下載海量資料
  • 學(xué)習(xí)在線課程
  • 觀看技術(shù)視頻
  • 寫文章/發(fā)帖/加入社區(qū)
會員中心
創(chuàng)作中心

完善資料讓更多小伙伴認(rèn)識你,還能領(lǐng)取20積分哦,立即完善>

3天內(nèi)不再提示

縱覽FFmpeg硬件加速方案,涉及主流硬件和操作系統(tǒng)!

LiveVideoStack ? 來源:互聯(lián)網(wǎng) ? 作者:佚名 ? 2018-05-18 09:03 ? 次閱讀

被稱為“多媒體技術(shù)領(lǐng)域的瑞士軍刀”,F(xiàn)Fmpeg擁有廣泛的應(yīng)用基礎(chǔ)。不過,當(dāng)(實(shí)時(shí))處理海量視頻時(shí),需要借助各種方法提升效率。比如,短視頻平臺Revvel將視頻轉(zhuǎn)碼服務(wù)遷移到AWS Lambda和S3上,節(jié)省了大量費(fèi)用和運(yùn)維成本,并且將時(shí)長2小時(shí)的視頻轉(zhuǎn)碼從4-6小時(shí)縮短到不到10分鐘。本文將縱覽FFmpeg的硬件加速方案,涉及各主流硬件方案和操作系統(tǒng)。本文為此系列的下篇,上篇請?jiān)L問這里。感謝英特爾資深軟件開發(fā)工程師趙軍的投稿。

文 / 趙軍

Android: MediaCodec

MediaCodec是Google在Android API 16之后推出的用于音視頻編解碼的一套偏底層的API,可以直接利用硬件以加速視頻的編解碼處理。MediaCodec的概念中,一般而言,編解碼器處理輸入數(shù)據(jù)并生成輸出數(shù)據(jù)。它異步處理數(shù)據(jù)并使用一組輸入和輸出緩沖區(qū)。在簡單的層面上,需要請求(或接收)一個(gè)空輸入緩沖區(qū),填充數(shù)據(jù)并將其發(fā)送到編解碼器進(jìn)行處理。編解碼器使用數(shù)據(jù)并將其轉(zhuǎn)換為其空的輸出緩沖區(qū)之一。最后,你請求(或接收)一個(gè)填充的輸出緩沖區(qū),消耗其內(nèi)容并將其釋放回編解碼器。

MediaCodec可以處理的數(shù)據(jù)有以下三種類型:被壓縮的Buffer(Compressed Buffers)、原始音頻數(shù)據(jù)(Raw Audio Buffers)、原始視頻數(shù)據(jù)(Raw Video Buffers)。可以使用ByteBuffers處理所有三種數(shù)據(jù),但一般應(yīng)該使用Surface以提高編解碼器的性能。 Surface使用本地視頻緩沖區(qū),無需映射或復(fù)制到ByteBuffers; 因此,效率更高。 通常在使用Surface時(shí)無法訪問原始視頻數(shù)據(jù),但可以使用ImageReader類來訪問不安全的解碼(原始)視頻幀。 這可能比使用ByteBuffers更有效率,因?yàn)橐恍┍緳C(jī)緩沖區(qū)可能被直接映射到ByteBuffers。 當(dāng)使用ByteBuffer模式時(shí),也可以使用Image類和getInput / OutputImage(int)訪問原始視頻幀。FFmpeg自3.1版本加入了android MediaCodec硬件解碼支持,其實(shí)現(xiàn)Follow了FFmpeg的HWaccel接口,但直到現(xiàn)在為止,F(xiàn)Fmpeg都并未支持基于MediaCodec的硬件加速編碼。

1.基于Chip 廠商的私有方案

這里所提及的私有,并非是說代碼沒有Open,更多層面上是指所提供的相應(yīng)的API接口和實(shí)現(xiàn),是廠商所特定的,而非行業(yè)標(biāo)準(zhǔn)定義的API ,諸如OpenMAX或者OS層面剝離了硬件具體實(shí)現(xiàn)相關(guān)抽象的API。更進(jìn)一步說,是采用相關(guān)廠商私有方案之后,如果想要二次深度開發(fā),其困難度較大一些。實(shí)際上,從開放的角度而言,IntelAMD,Nvidia這3家GPU大廠所提供的方案的Open 程度不盡相同,總的說來,其開放程度是Intel好于AMD, 而AMD又好于Nvidia。

Intel: Media SDK:

Intel提供的Media SDK,本質(zhì)是一套跨平臺的加速方案,它在Windows/Linux上提供了相同的API,底層則分別使用了Windows上的DXVA2和Linux上的VAAPI接口,以Windows平臺上為例,它的基本結(jié)構(gòu)框圖如下:

而在FFmpeg的集成中,基本上是在Libavcode/Libavfilter內(nèi)提供了一個(gè)基本的wrapper去調(diào)用Media SDK的API來提供相應(yīng)的功能。下圖展示了Libavcodec集成MediaSDK的h264/hevc/mpeg2 Codec的狀態(tài),需要注意的是,F(xiàn)Fmpeg master開發(fā)分支上支持的FFmpeg QSV已經(jīng)支持了更多的Codec和相關(guān)VPP功能。

在Windows平臺,如果你想在Intel 平臺上執(zhí)行編碼相關(guān)的事務(wù), Media SDK基本上是唯一的選擇。當(dāng)然,如果你更偏向FFmpeg的API,可以使用FFmpeg QSV/Media SDK的方式;而在Linux平臺,F(xiàn)Fmpeg VA-API與FFmpeg QSV/Media SDK 接口大部分功能重合,更多的區(qū)別可能在于軟件靈活度和開放程度的考量。一般說來,F(xiàn)Fmpeg VA-API提供了更大的靈活度,對于有開發(fā)能力或者想二次定制的客戶更加的友好一些。從FFmpeg的角度看,這兩者在FFmpeg框架內(nèi)的最大不同點(diǎn)在于: FFmpeg VA-API是以Native CODEC的方式直接實(shí)現(xiàn)與FFmpeg內(nèi)部,而FFmpeg QSV集成Media SDK的方式,非嚴(yán)格的類比則類似于FFmpeg 集成libx264 這樣第三方庫的方式,需要依賴Media SDK,而FFmpeg VA-API則并不依賴第三方的庫,其CODEC的實(shí)現(xiàn)直接位于FFmpeg代碼庫自身。另外,需要提及的另外一件事情是,Media SDK開放了部分功能,其代碼Repo在:

https://github.com/Intel-Media-SDK/MediaSDK

Nvidia: CUDA/CUVID/NVENC

之前提及Nvidia的時(shí)候說過,Nvidia曾經(jīng)一度提出VDPAU與Intel 提出的VA-API在Linux上競爭,但最近的趨勢似乎是Nvidia走向了更為封閉的方式,最主要的傾向是,Nvidia似乎放緩了對VPDAU的支持,取而代之的是提供較為封閉的NVDEC與NVENC庫。另外,在FFmpeg中集成NVENC 與NVDEC的方式與FFmpeg QSV集成Intel Media SDK方式一致,也是以集成第三方庫的方式集成進(jìn)FFmpeg的。這帶來的弊端是,對NVENC/NVDEC的依賴較大,加上Nvidia并未開放NVENC/NVDEC的代碼,因此如果想做二次開發(fā)或者功能增強(qiáng)以及性能調(diào)整的時(shí)候,基本都得依賴Nvidia自身去改動(dòng)NVENC/NVDEC,這可能對部分開發(fā)者帶來一些影響。

下面是NVECN/NVDEC說支持的CODEC的一個(gè)圖示,基本上FFmpeg CUVID/NVECN/CUDA部分分別集成了硬件加速的解碼,編碼以及部分CUDA加速的諸如Scaling這樣的Filter。另外,CUVID部分,為了和NVENC統(tǒng)一,Nvidia已經(jīng)把它改稱為NVENC,但FFmpeg并沒有去做這個(gè)更新。

AMD: AMF

AMF SDK用于控制AMD媒體加速器,以進(jìn)行視頻編碼和解碼以及色彩空間轉(zhuǎn)換,現(xiàn)在開源出來的版本(https://github.com/GPUOpen-LibrariesAndSDKs/AMF),并未支持Linux,只能在Windows上進(jìn)行編碼,支持的Codec有AVC/HEVC。需要指出的是AMF的全稱是Advanced Media Framework,之前有時(shí)會被稱之為VCE(Video Coding Engine)

另外,VCE實(shí)際上支持兩種模式,一種模式是所謂的full fixed mode,這種模式之下,所有的編碼相關(guān)執(zhí)行使用的ASIC 方式,而另一種模式則是hybrid mode,主要是通過GPU中的3D引擎的計(jì)算單元執(zhí)行編碼相關(guān)動(dòng)作,而對應(yīng)的接口則是AMD's Accelerated Parallel Programming SDK 以及 OpenCL。

除了上述的一些方案以外,還有一些使用在嵌入式平臺的一些方案,能夠看到的有:

  • BRCM的MMAL

    http://www.jvcref.com/files/PI/documentation/html/

    https://github.com/techyian/MMALSharp/wiki/What-is-MMAL%3F

  • RockChipMPP

    http://opensource.rock-chips.com/wiki_Mpp

    http://opensource.rock-chips.com/images/f/fa/MPP_Development_Reference.pdf

  • TI DSP方案:

    http://www.ti.com/processors/dsp/applications.html

有興趣者,可以通過這些資源自行去獲取相關(guān)信息

2.獨(dú)立于平臺與Chip廠商的優(yōu)化方案

OpenCL與Vulkan:

Khronos在OpenGL的年代一戰(zhàn)成名,最近這些年,圍繞著高性能圖形圖像API提出了大量的標(biāo)準(zhǔn),其中有兩個(gè)較新的標(biāo)準(zhǔn)值得注意,一個(gè)是OpenCL,最初是Apple提出,現(xiàn)在則是異構(gòu)高性能并行計(jì)算的標(biāo)準(zhǔn),其出發(fā)點(diǎn)基本是以Nvidia的CUDA為對標(biāo);另一個(gè)則是OpenGL的后繼者Vulkan。最新的動(dòng)向是Khronos似乎打算把OpenCL標(biāo)準(zhǔn)整合進(jìn)Vulkan,所以很可能不久的將來,Vulkan會變成統(tǒng)一圖像與計(jì)算的API。由于OpenCL基本上是GPU上編程的唯一通用標(biāo)準(zhǔn)(另一個(gè)業(yè)內(nèi)使用范圍更廣泛的是Nvidia的CUDA),很自然的FFmpeg也打算用OpenCL去加速相應(yīng)的一些Codec或者AVfiter相關(guān)的任務(wù)。最初,x264嘗試用OpenCL優(yōu)化,但結(jié)果并不盡理想,主要原因估計(jì)是很多時(shí)候編碼器實(shí)現(xiàn)是一個(gè)反復(fù)迭代的過程,數(shù)據(jù)之間也會出現(xiàn)依賴,導(dǎo)致想完全并發(fā)利用OpenCL去加速,比較困難,所以最終x264只用OpenCL加速了部分功能,更多的信息可以參考

https://mailman.videolan.org/pipermail/x264-devel/2013-April/009996.html

FFmpeg并未嘗試用OpenCL去優(yōu)化Codec部分,但是卻優(yōu)化了AVFilter部分,主要用在硬件加速轉(zhuǎn)碼的場景下。其最大的好處是解碼,F(xiàn)ilter、編碼都在GPU內(nèi)部完成,避免了GPU與CPU之間的數(shù)據(jù)交換,而一般Codec輸出的數(shù)據(jù),需要與OpenCL實(shí)現(xiàn)所謂的Zero Copy,這一點(diǎn),需要OpenCL做一些擴(kuò)展以支持接收解碼器解碼的出來的數(shù)據(jù)格式,并輸出編碼器能接收的數(shù)據(jù)格式。這里典型的擴(kuò)展如Intel 提出的OpenCL與VA-API的Surface sharing:

https://www.khronos.org/registry/OpenCL/extensions/intel/cl_intel_va_api_media_sharing.txt:

最近,F(xiàn)Fmpeg社區(qū)的Rostislav Pehlivanov開始嘗試用Vulkan優(yōu)化AVFilter,已經(jīng)提交了Patch,正處于Review階段,從他FOSDEM的PPT https://pars.ee/slides/fosdem18_encoding.pdf 看,他似乎也想再次嘗試用Vulkan來優(yōu)化Codec,但初期只有針對AVFilter的優(yōu)化代碼出現(xiàn)。順帶說一句,Rostislav Pehlivanov的這份PPT中,回顧了各種CODEC上的各種嘗試,整個(gè)行業(yè)在CODEC上的努力,而其中大部分的CODEC,并未流行開來,但這些人的種種努力不該被完全忘記。

3.參考文獻(xiàn)

  • https://developer.nvidia.com/nvidia-video-codec-sdk 更多Nvidia video codec的信息,可以從這里獲取到

  • http://on-demand.gputechconf.com/gtc/2016/presentation/s6226-abhijit-patait-high-performance-video.pdf 這里對NVENC/NVDEC 給出了一些詳盡的說明

  • https://developer.android.com/reference/android/media/MediaCodec.html 使用MediaCodec時(shí)候,Android上的文檔基本上是必須要先讀的

  • https://elinux.org/images/9/9d/Android_media_framework--van-dam_and_kallere.pdf

  • https://static1.squarespace.com/static/4eb80772d09a941b5c45e0c0/t/541f2918e4b092469720191e/1411328280290/Video_DroidConNYC.pdf

  • https://www.khronos.org/ khronos 最近動(dòng)作不斷,一方面,看到各種新標(biāo)準(zhǔn)的提出,另一方面又擔(dān)心這些標(biāo)準(zhǔn)最終實(shí)施的狀況。

WebRTCon 2018

WebRTCon 2018將于5月19-20日在上海光大國際會展中心舉行,這是一次對過去幾年WebRTC技術(shù)實(shí)踐與應(yīng)用落地的總結(jié)。

大會組委會以行業(yè)難點(diǎn)為目標(biāo),設(shè)立了主題演講,WebRTC與前端,行業(yè)應(yīng)用專場,測試監(jiān)控和服務(wù)保障,娛樂多媒體開發(fā)應(yīng)用實(shí)踐,WebRTC深度開發(fā),解決方案專場,WebRTC服務(wù)端開發(fā),新技術(shù)跨界,WebRTC與Codec等多個(gè)專場。邀請30余位全球領(lǐng)先的WebRTC技術(shù)專家,為參會者帶來全球同步的技術(shù)實(shí)踐與趨勢解讀。

在主題演講環(huán)節(jié),Google軟件工程師Zoe Liu 、姜健,將分別向國內(nèi)的開發(fā)者分享AV1的最新進(jìn)展與技術(shù)探索、VP9的SVC優(yōu)化。此外,北京大學(xué)教授王榮剛、英特爾實(shí)時(shí)通信客戶端架構(gòu)師邱建林、Aupera傲睿智存 CTO周正寧將分別分享國產(chǎn)Codec AVS2的最新演進(jìn)、H.264的硬件編碼優(yōu)化,FPGA加速WebRTC服務(wù)端和轉(zhuǎn)碼。上海交通大學(xué)圖像通信與網(wǎng)絡(luò)工程研究所副所長宋利會分享學(xué)術(shù)界在Codec優(yōu)化的最新思路與嘗試,他會介紹AI、區(qū)塊鏈和大數(shù)據(jù)賦能的Codec。

聲明:本文內(nèi)容及配圖由入駐作者撰寫或者入駐合作網(wǎng)站授權(quán)轉(zhuǎn)載。文章觀點(diǎn)僅代表作者本人,不代表電子發(fā)燒友網(wǎng)立場。文章及其配圖僅供工程師學(xué)習(xí)之用,如有內(nèi)容侵權(quán)或者其他違規(guī)問題,請聯(lián)系本站處理。 舉報(bào)投訴
  • 嵌入式
    +關(guān)注

    關(guān)注

    5045

    文章

    18816

    瀏覽量

    298445
  • Android
    +關(guān)注

    關(guān)注

    12

    文章

    3903

    瀏覽量

    126606
  • intel
    +關(guān)注

    關(guān)注

    19

    文章

    3474

    瀏覽量

    185354

原文標(biāo)題:FFmpeg 硬件加速方案概覽 (下)

文章出處:【微信號:livevideostack,微信公眾號:LiveVideoStack】歡迎添加關(guān)注!文章轉(zhuǎn)載請注明出處。

收藏 人收藏

    評論

    相關(guān)推薦

    AM62A SoC通過硬件加速視覺處理改進(jìn)條形碼讀取器

    電子發(fā)燒友網(wǎng)站提供《AM62A SoC通過硬件加速視覺處理改進(jìn)條形碼讀取器.pdf》資料免費(fèi)下載
    發(fā)表于 09-04 09:52 ?0次下載
    AM62A SoC通過<b class='flag-5'>硬件加速</b>視覺處理改進(jìn)條形碼讀取器

    適用于數(shù)據(jù)中心應(yīng)用中的硬件加速器的直流/直流轉(zhuǎn)換器解決方案

    電子發(fā)燒友網(wǎng)站提供《適用于數(shù)據(jù)中心應(yīng)用中的硬件加速器的直流/直流轉(zhuǎn)換器解決方案.pdf》資料免費(fèi)下載
    發(fā)表于 08-26 09:38 ?0次下載
    適用于數(shù)據(jù)中心應(yīng)用中的<b class='flag-5'>硬件加速</b>器的直流/直流轉(zhuǎn)換器解決<b class='flag-5'>方案</b>

    圖形圖像硬件加速器卡設(shè)計(jì)原理圖:270-VC709E 基于FMC接口的Virtex7 XC7VX690T PCIeX8 接口卡

    擴(kuò)展。軟件支持windows,Linux操作系統(tǒng)。Net FPGA , XC7VX690T板卡 , 軟件無線電處理平臺 , 圖形圖像硬件加速
    的頭像 發(fā)表于 08-06 10:16 ?213次閱讀
    圖形圖像<b class='flag-5'>硬件加速</b>器卡設(shè)計(jì)原理圖:270-VC709E 基于FMC接口的Virtex7 XC7VX690T PCIeX8 接口卡

    PSoC 6 MCUBoot和mbedTLS是否支持加密硬件加速?

    (觀察結(jié)果)。 注:本代碼示例暫時(shí)不支持加密映像和硬件加密加速。 這意味著可以增加硬件加速,因?yàn)?b class='flag-5'>硬件加速會有明顯改善。 是否有如何操作的說明
    發(fā)表于 05-29 08:17

    新思科技硬件加速解決方案技術(shù)日在成都和西安站成功舉辦

    近日,【新思科技技術(shù)日】硬件加速驗(yàn)證解決方案專場成都站和西安站順利舉行,來自國內(nèi)領(lǐng)先的系統(tǒng)級公司、芯片設(shè)計(jì)公司以及高校的250多名開發(fā)者們積極參與。
    的頭像 發(fā)表于 04-19 17:35 ?351次閱讀

    Elektrobit利用其首創(chuàng)的硬件加速軟件優(yōu)化汽車通信網(wǎng)絡(luò)的性能

    Elektrobit今日宣布推出 EB zoneo GatewayCore——首款支持、配置和集成現(xiàn)代微控制器新一代硬件加速器的軟件產(chǎn)品,可應(yīng)用于先進(jìn)的汽車電子/電氣架構(gòu)(基于被廣泛采用
    的頭像 發(fā)表于 04-17 09:51 ?263次閱讀

    用DE1-SOC進(jìn)行硬件加速的2D N-Body重力模擬器設(shè)計(jì)

    該項(xiàng)目的目標(biāo)是創(chuàng)建一個(gè)用DE1-SOC進(jìn)行硬件加速的2D N-Body重力模擬器。
    的頭像 發(fā)表于 04-09 11:08 ?400次閱讀
    用DE1-SOC進(jìn)行<b class='flag-5'>硬件加速</b>的2D N-Body重力模擬器設(shè)計(jì)

    【國產(chǎn)FPGA+OMAPL138開發(fā)板體驗(yàn)】(原創(chuàng))7.硬件加速Sora文生視頻源代碼

    基于具體的文本到視頻生成模型Sora(如Transformer等)進(jìn)行設(shè)計(jì),并將其優(yōu)化成適合FPGA并行計(jì)算的形式,其中涉及大量的矩陣運(yùn)算、注意力機(jī)制、卷積操作硬件加速模塊的設(shè)計(jì)與整合。FPGA
    發(fā)表于 02-22 09:49

    音視頻解碼器硬件加速:實(shí)現(xiàn)更流暢的播放效果

    隨著多媒體內(nèi)容的日益豐富和高清化,傳統(tǒng)的軟件解碼已經(jīng)難以滿足人們對流暢播放體驗(yàn)的需求。因此,音視頻解碼器硬件加速技術(shù)的出現(xiàn),為提升播放效果帶來了革命性的改變。 硬件加速的原理 硬件加速的核心
    的頭像 發(fā)表于 02-21 14:40 ?722次閱讀
    音視頻解碼器<b class='flag-5'>硬件加速</b>:實(shí)現(xiàn)更流暢的播放效果

    深度解析全球操作系統(tǒng)格局

    操作系統(tǒng)是負(fù)責(zé)協(xié)調(diào)、管理和控制計(jì)算機(jī)硬件與軟件資源的程序,是整個(gè)計(jì)算機(jī)的核心系統(tǒng)軟件。 按照操作系統(tǒng)面向的設(shè)備類型,通用操作系統(tǒng)主要包括桌面
    的頭像 發(fā)表于 01-18 15:00 ?710次閱讀
    深度解析全球<b class='flag-5'>操作系統(tǒng)</b>格局

    LabVIEW在不同操作系統(tǒng)上使VI、可執(zhí)行文件或安裝程序

    操作系統(tǒng)的兼容性可能有所不同,用戶在選擇LabVIEW版本時(shí)應(yīng)查看相關(guān)的系統(tǒng)要求。此外,LabVIEW支持的硬件設(shè)備和模塊也可能對跨平臺使用產(chǎn)生影響,用戶在設(shè)計(jì)系統(tǒng)時(shí)需要考慮
    發(fā)表于 12-02 21:47

    在Sigma 300里面使用硬件加速器slew,slew mode為RC type時(shí)不同的time constant的值有什么用?

    請問下在Sigma 300里面使用硬件加速器slew,slew mode為RC type時(shí),對應(yīng)的time constant 與數(shù)據(jù)從當(dāng)前值到目標(biāo)值得時(shí)間有什么關(guān)系,或者說不同的time constant的值有什么用? 謝謝, 中 J Jj
    發(fā)表于 11-29 07:25

    嵌入式多媒體系統(tǒng)硬件加速技術(shù)的應(yīng)用

    電子發(fā)燒友網(wǎng)站提供《嵌入式多媒體系統(tǒng)硬件加速技術(shù)的應(yīng)用.pdf》資料免費(fèi)下載
    發(fā)表于 10-26 09:33 ?0次下載
    嵌入式多媒體<b class='flag-5'>系統(tǒng)</b>中<b class='flag-5'>硬件加速</b>技術(shù)的應(yīng)用

    【KV260視覺入門套件試用體驗(yàn)】 硬件加速之—使用PL加速FFT運(yùn)算(Vivado)

    硬件加速的效果。 該系統(tǒng)的架構(gòu)圖如下: 該系統(tǒng)是一個(gè)基于KV260的FFT加速器,它可以對輸入的時(shí)域信號進(jìn)行快速傅里葉變換,從而得到信號的頻域表示。 這個(gè)
    發(fā)表于 10-02 22:03

    STM32嵌入式操作系統(tǒng)介紹

    嵌入式操作系統(tǒng)的特點(diǎn)? 嵌入式操作系統(tǒng)是一種用途廣泛的系統(tǒng)軟件,通常包括與硬件相關(guān)的底層驅(qū)動(dòng)軟件、系統(tǒng)內(nèi)核、設(shè)備驅(qū)動(dòng)接口、通信協(xié)議、圖形界面
    發(fā)表于 09-28 06:59