精品国产人成在线_亚洲高清无码在线观看_国产在线视频国产永久2021_国产AV综合第一页一个的一区免费影院黑人_最近中文字幕MV高清在线视频

0
  • 聊天消息
  • 系統消息
  • 評論與回復
登錄后你可以
  • 下載海量資料
  • 學習在線課程
  • 觀看技術視頻
  • 寫文章/發帖/加入社區
會員中心
創作中心

完善資料讓更多小伙伴認識你,還能領取20積分哦,立即完善>

3天內不再提示

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

LiveVideoStack ? 來源:互聯網 ? 作者:佚名 ? 2018-05-18 09:03 ? 次閱讀

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

文 / 趙軍

Android: MediaCodec

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

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

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

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

Intel: Media SDK:

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

而在FFmpeg的集成中,基本上是在Libavcode/Libavfilter內提供了一個基本的wrapper去調用Media SDK的API來提供相應的功能。下圖展示了Libavcodec集成MediaSDK的h264/hevc/mpeg2 Codec的狀態,需要注意的是,FFmpeg master開發分支上支持的FFmpeg QSV已經支持了更多的Codec和相關VPP功能。

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

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

Nvidia: CUDA/CUVID/NVENC

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

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

AMD: AMF

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

另外,VCE實際上支持兩種模式,一種模式是所謂的full fixed mode,這種模式之下,所有的編碼相關執行使用的ASIC 方式,而另一種模式則是hybrid mode,主要是通過GPU中的3D引擎的計算單元執行編碼相關動作,而對應的接口則是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

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

2.獨立于平臺與Chip廠商的優化方案

OpenCL與Vulkan:

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

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

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

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

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

3.參考文獻

  • 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時候,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 最近動作不斷,一方面,看到各種新標準的提出,另一方面又擔心這些標準最終實施的狀況。

WebRTCon 2018

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

大會組委會以行業難點為目標,設立了主題演講,WebRTC與前端,行業應用專場,測試監控和服務保障,娛樂多媒體開發應用實踐,WebRTC深度開發,解決方案專場,WebRTC服務端開發,新技術跨界,WebRTC與Codec等多個專場。邀請30余位全球領先的WebRTC技術專家,為參會者帶來全球同步的技術實踐與趨勢解讀。

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

聲明:本文內容及配圖由入駐作者撰寫或者入駐合作網站授權轉載。文章觀點僅代表作者本人,不代表電子發燒友網立場。文章及其配圖僅供工程師學習之用,如有內容侵權或者其他違規問題,請聯系本站處理。 舉報投訴
  • 嵌入式
    +關注

    關注

    5068

    文章

    19017

    瀏覽量

    303242
  • Android
    +關注

    關注

    12

    文章

    3923

    瀏覽量

    127132
  • intel
    +關注

    關注

    19

    文章

    3480

    瀏覽量

    185751

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

文章出處:【微信號:livevideostack,微信公眾號:LiveVideoStack】歡迎添加關注!文章轉載請注明出處。

收藏 人收藏

    評論

    相關推薦

    基于Xilinx XCKU115的半高PCIe x8 硬件加速

    基于Xilinx XCKU115的半高PCIe x8 硬件加速卡,支持2x72bit(數據位寬64bit+ECC)DDR4存儲,數據傳輸速率 2400Mb/s。DDR4單簇容量4GB,兩組總容量為8GB
    的頭像 發表于 11-14 11:30 ?164次閱讀
    基于Xilinx XCKU115的半高PCIe x8 <b class='flag-5'>硬件加速</b>卡

    新手學操作系統(第一周)

    1.介紹計算機、OS與應用程序之間的關系,計算機的硬件是底層的基礎,操作系統在其之上管理硬件資源,應用程序則通過操作系統來實現其功能;2.推薦參考學習書籍;3.實踐環境的介紹
    的頭像 發表于 10-08 11:33 ?193次閱讀
    新手學<b class='flag-5'>操作系統</b>(第一周)

    TDA4VM上的硬件加速運動恢復結構算法

    電子發燒友網站提供《TDA4VM上的硬件加速運動恢復結構算法.pdf》資料免費下載
    發表于 09-24 11:39 ?0次下載
    TDA4VM上的<b class='flag-5'>硬件加速</b>運動恢復結構算法

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

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

    適用于數據中心應用中的硬件加速器的直流/直流轉換器解決方案

    電子發燒友網站提供《適用于數據中心應用中的硬件加速器的直流/直流轉換器解決方案.pdf》資料免費下載
    發表于 08-26 09:38 ?0次下載
    適用于數據中心應用中的<b class='flag-5'>硬件加速</b>器的直流/直流轉換器解決<b class='flag-5'>方案</b>

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

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

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

    (觀察結果)。 注:本代碼示例暫時不支持加密映像和硬件加密加速。 這意味著可以增加硬件加速,因為硬件加速會有明顯改善。 是否有如何操作的說明
    發表于 05-29 08:17

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

    近日,【新思科技技術日】硬件加速驗證解決方案專場成都站和西安站順利舉行,來自國內領先的系統級公司、芯片設計公司以及高校的250多名開發者們積極參與。
    的頭像 發表于 04-19 17:35 ?422次閱讀

    Elektrobit利用其首創的硬件加速軟件優化汽車通信網絡的性能

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

    用DE1-SOC進行硬件加速的2D N-Body重力模擬器設計

    該項目的目標是創建一個用DE1-SOC進行硬件加速的2D N-Body重力模擬器。
    的頭像 發表于 04-09 11:08 ?498次閱讀
    用DE1-SOC進行<b class='flag-5'>硬件加速</b>的2D N-Body重力模擬器設計

    【國產FPGA+OMAPL138開發板體驗】(原創)7.硬件加速Sora文生視頻源代碼

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

    音視頻解碼器硬件加速:實現更流暢的播放效果

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

    深度解析全球操作系統格局

    操作系統是負責協調、管理和控制計算機硬件與軟件資源的程序,是整個計算機的核心系統軟件。 按照操作系統面向的設備類型,通用操作系統主要包括桌面
    的頭像 發表于 01-18 15:00 ?1057次閱讀
    深度解析全球<b class='flag-5'>操作系統</b>格局

    LabVIEW在不同操作系統上使VI、可執行文件或安裝程序

    操作系統的兼容性可能有所不同,用戶在選擇LabVIEW版本時應查看相關的系統要求。此外,LabVIEW支持的硬件設備和模塊也可能對跨平臺使用產生影響,用戶在設計系統時需要考慮
    發表于 12-02 21:47

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

    請問下在Sigma 300里面使用硬件加速器slew,slew mode為RC type時,對應的time constant 與數據從當前值到目標值得時間有什么關系,或者說不同的time constant的值有什么用? 謝謝, 中 J Jj
    發表于 11-29 07:25