1. 為什麽ffplay不支持硬體解碼
ffplay是FFmpeg內建的播放器。也許你已經知道,ffplay不支持硬體解碼 直接到渲染(支持少量硬體解碼 + CPU拷貝再到SDL渲染方式,例如cuvid解碼,暫且忽略)。
ffplay為什麽不做硬體解碼的支持,我理解原因有幾點:
定位上,ffplay作為簡單的測試小工具,並不是要和mpv、VLC這種全功能的播放器去競爭
歷史上,ffmpeg和mplayer有千絲萬縷的聯系,開發人員有大量重疊,有做播放器的興趣,就去支持mplayer(和mplayer的衍生者)
技術上,支持多種硬體加速解碼,需要有多種渲染方式和解碼做互操作;M種解碼「加」或者「乘」N種渲染,工作量太大,在ffplay裏做,違反它的定位
2. 為什麽要給ffplay加硬體解碼
隨著高規格的視訊越來越多,4K到8K,HDR 10bit,用ffplay做測試跑不動了。其他播放器做測試,啟動慢,用不慣,不開源,使用不方便。
做測試最方便的還是ffplay,所以我希望ffplay能支持硬體解碼和渲染。
現在技術上有了一個轉機:vulkan!
vulkan跨平台
vulkan可以做渲染
vulkan可以做計算,做影像處理
vulkan可以做視訊解碼編碼
vulkan可以和CUDA、DRM、VAAPI互操作
簡而言之,用一個vulkan做渲染,可以不走CPU拷貝的方式支持多個硬體解碼,再加上CPU拷貝做fallback,可以支持大多數硬體解碼。
3 . 一兩個月的成果
經過幾個周末的打磨,功能已經基本完成了,在走最後的review流程。平台和硬體解碼支持:
以上是我自測情況,需要說明的如下:
cuda/nvdec
Windows和Linux下都可用,只要驅動夠新
支持4K HDR10和8K 8bit H.265流暢播放
vulkan
解碼要求最新的驅動支持,Windows和Linux下都可用
8K 8bit H.265可以流暢播放
H.265 10bit支持還有問題
vaapi解碼需要同時開啟libdrm,才能支持vaapi -> vulkan
d3d11va解碼需要拷貝到CPU再上傳到vulkan
macOS
macOS的vulkan是第三方實作的,不是Apple實作的,需要自己安裝SDK
videotoolbox需要有一次map到CPU,再
傳到Vulkan
簡單用法,vulkan解碼
:
ffplay -hwaccel vulkan foo.mp4
N vidia nvdec解碼:
$ ffplay -hwaccel cuda foo.mp4
開啟vulkan validation layer debug模式
ffplay -hwaccel cuda -vulkan_params debug=1 foo.mp4
等merge之後可以到 https://github.com/BtbN/FFmpeg-Builds 下載安裝包體驗,有其他idea歡迎來聊 。
-- END --
進技術交流群, 掃碼添加我的微信:Byte-Flow
獲取相關資料和源碼
推薦: