国产精品久久久aaaa,日日干夜夜操天天插,亚洲乱熟女香蕉一区二区三区少妇,99精品国产高清一区二区三区,国产成人精品一区二区色戒,久久久国产精品成人免费,亚洲精品毛片久久久久,99久久婷婷国产综合精品电影,国产一区二区三区任你鲁

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)??梢允褂肂yteBuffers處理所有三種數據,但一般應該使用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。

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

    關注

    5198

    文章

    20449

    瀏覽量

    334095
  • Android
    +關注

    關注

    12

    文章

    4026

    瀏覽量

    133998
  • intel
    +關注

    關注

    19

    文章

    3508

    瀏覽量

    191296

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

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

收藏 人收藏
加入交流群
微信小助手二維碼

掃碼添加小助手

加入工程師交流群

    評論

    相關推薦
    熱點推薦

    FPGA硬件加速卡設計原理圖:1-基于Xilinx XCKU115的半高PCIe x8 硬件加速卡 PCIe半高 XCKU115-3-FLVF1924-E芯片

    FPGA硬件加速, PCIe半高卡, XCKU115, 光纖采集卡, 信號計算板, 硬件加速
    的頭像 發表于 02-12 09:52 ?391次閱讀
    FPGA<b class='flag-5'>硬件加速</b>卡設計原理圖:1-基于Xilinx XCKU115的半高PCIe x8 <b class='flag-5'>硬件加速</b>卡 PCIe半高 XCKU115-3-FLVF1924-E芯片

    內外環境驅動:國產操作系統與智能硬件的崛起

    在全球科技競爭格局深刻調整的背景下,國產操作系統與國產化智能硬件的協同發展已成為保障國家信息安全、推動產業升級的核心戰略。特別是在智能安防領域,隨著國家對信創產業的政策傾斜與外部技術封鎖的雙重驅動
    的頭像 發表于 12-19 11:50 ?585次閱讀
    內外環境驅動:國產<b class='flag-5'>操作系統</b>與智能<b class='flag-5'>硬件</b>的崛起

    瑞芯微RK3562平臺FFmpeg硬件編解碼移植及性能測試實戰攻略

    本文介紹瑞芯微RK3562平臺,FFmpeg硬件編解碼移植及性能測試方法。FFmpeg簡介與實測數據FFmpeg簡介FFmpeg是一套多媒體
    的頭像 發表于 11-28 19:02 ?1308次閱讀
    瑞芯微RK3562平臺<b class='flag-5'>FFmpeg</b><b class='flag-5'>硬件</b>編解碼移植及性能測試實戰攻略

    EV10AS180A模數轉換器支持哪些操作系統

    基于模擬信號的采樣、量化和編碼,這些過程均由硬件電路完成,不涉及操作系統層面的指令或驅動。因此,該轉換器本身不直接支持或依賴任何操作系統。接口與通信協議:雖然EV10AS180A不直接
    發表于 11-18 09:18

    單片機的操作系統

    Linux網絡協議棧和文件系統(如JFFS2),但實時性較弱,需外擴存儲器。 ? ? VxWorks ?:高效實時操作系統,廣泛應用于通信、軍事等領域,支持自定義硬件模塊。 ? 其他選擇 ? Keil
    發表于 11-14 06:18

    常用硬件加速的方法

    之前總結了一些常用硬件加速方法 1)面積換速度:也就是串轉并運算,可以多個模塊同時計算; 2)時間換空間:時序收斂下通過頻率提高性能,雖然面積可能稍微加大點; 3)流水線操作:流水線以面積換性能,以
    發表于 10-29 06:20

    硬件協同技術分享 - 任務劃分 + 自定義指令集

    開發技術。分文將分享介紹硬件加速器與軟件結合的協同開發方式 軟硬件任務劃分 我們的硬件設計涉及到MFCC模塊。直接交由CPU的一次指令的五級流水線處理在麥克風數據取入上的資源耗費
    發表于 10-28 08:03

    硬件加速模塊的時鐘設計

    的每一個操作賦予一個時間片,每一個操作都會在這個時間片內完成,這個時間片的時長為clk_l的時鐘周期,在整個硬件加速模塊中最為重要。 clk_r : 硬件加速模塊的每一層在每一次進行運
    發表于 10-23 07:28

    瑞芯微RK3588平臺FFmpeg硬件編解碼移植及性能測試實戰攻略

    本文介紹瑞芯微RK3588平臺,FFmpeg硬件編解碼移植及性能測試方法。FFmpeg簡介與實測數據FFmpeg簡介FFmpeg是一套多媒體
    的頭像 發表于 10-21 13:51 ?1751次閱讀
    瑞芯微RK3588平臺<b class='flag-5'>FFmpeg</b><b class='flag-5'>硬件</b>編解碼移植及性能測試實戰攻略

    瑞芯微RK35XX系列FFmpeg硬件編解碼實測,詳細性能對比!

    FFmpeg硬件編解碼技術通過調用GPU或專用的媒體處理芯片來加速視頻的壓縮與解壓縮過程,其核心價值在于能夠顯著提升處理效率并降低系統資源消耗。適用于對實時性、功耗或并行處理能力有較高
    的頭像 發表于 09-30 17:46 ?2938次閱讀
    瑞芯微RK35XX系列<b class='flag-5'>FFmpeg</b><b class='flag-5'>硬件</b>編解碼實測,詳細性能對比!

    瑞芯微RK3576平臺FFmpeg硬件編解碼移植及性能測試實戰攻略 觸覺智能RK3576開發板演示

    本文介紹瑞芯微RK3576平臺,FFmpeg硬件編解碼移植及性能測試方法。演示設備:觸覺智能RK3576開發板FFmpeg簡介與實測數據FFmpeg簡介
    的頭像 發表于 09-08 13:58 ?1270次閱讀
    瑞芯微RK3576平臺<b class='flag-5'>FFmpeg</b><b class='flag-5'>硬件</b>編解碼移植及性能測試實戰攻略 觸覺智能RK3576開發板演示

    如何驗證硬件加速是否真正提升了通信協議的安全性?

    驗證硬件加速是否真正提升通信協議的安全性,需從 安全功能正確性、抗攻擊能力增強、安全性能適配、合規一致性 等核心維度展開,結合實驗室測試與真實場景驗證,避免 “硬件參與即安全提升” 的表面判斷。以下
    的頭像 發表于 08-27 10:16 ?1143次閱讀
    如何驗證<b class='flag-5'>硬件加速</b>是否真正提升了通信協議的安全性?

    有哪些方法可以確保硬件加速與通信協議的兼容性?

    安全風險。以下是具體可落地的方法,按實施階段和優先級排序: 一、硬件選型階段:優先選擇 “協議原生支持” 的硬件方案 硬件加速的兼容性根基在選型階段奠定,需明確
    的頭像 發表于 08-27 10:07 ?1089次閱讀

    如何利用硬件加速提升通信協議的安全性?

    產品實拍圖 利用硬件加速提升通信協議安全性,核心是通過 專用硬件模塊或可編程硬件 ,承接軟件層面難以高效處理的安全關鍵操作(如加密解密、認證、密鑰管理等),在提升性能的同時,通過
    的頭像 發表于 08-27 09:59 ?980次閱讀
    如何利用<b class='flag-5'>硬件加速</b>提升通信協議的安全性?

    車機操作系統自主可控加速!華為、小米和理想,誰是真正的領跑者?

    娛樂,目前正逐步向打造“第三生活空間”的智能座艙方向進化,QNX+安卓組合是國內廠商選擇的主流方案。 2025年以來,汽車正在加速進入AI汽車時代,傳統封閉式車用操作系統由于開發難度大
    的頭像 發表于 04-15 01:16 ?6629次閱讀
    車機<b class='flag-5'>操作系統</b>自主可控<b class='flag-5'>加速</b>!華為、小米和理想,誰是真正的領跑者?