MediaWPF 基於 .NET 6 實現視頻硬解碼渲染Demo(無空域問題) 代碼實現僅供學習參考 本項目視頻渲染通過顯卡進行視頻解碼,CPU幾乎不參與工作,並且不存在令人煩躁的空域問題。 在播放攝像頭多路視頻或高解析度、高幀率視頻時可以極大發揮顯卡性能(我認為該項目做到了這一點)。 播放4k、8 ...
MediaWPF
基於 .NET 6 實現視頻硬解碼渲染Demo(無空域問題)
代碼實現僅供學習參考
本項目視頻渲染通過顯卡進行視頻解碼,CPU幾乎不參與工作,並且不存在令人煩躁的空域問題。
在播放攝像頭多路視頻或高解析度、高幀率視頻時可以極大發揮顯卡性能(我認為該項目做到了這一點)。
播放4k、8k視頻也可以做到極佳的渲染效率。
該項目實現參考雷霄驊大佬的博客,非常感謝他為音視頻技術方向做出的貢獻。
實現原理:
使用 LibVLCSharp 庫硬解碼獲取視頻YUV420p(8bit、10bit)幀數據進行回調,採用GLWpfControl 控制項用於呈現畫面(該控制項基於D3DImage,所以不存在空域問題)。
視頻YUV數據 -> OpenGL -> Shader(YUV to RGB) -> 呈現畫面
測試設備
處理器: AMD Ryzen 7 5800H
顯卡: Nvidia GeForce RTX 3050 Laptop GPU 4G
因筆記本依靠核顯渲染畫面,並且功耗方面有所限制,實際測試效率會存在一小方面影響。
4K 60幀 SDR視頻
處理器占用率 5~10%
顯卡占用率 40~50%
4K 60幀 HDR版本(視頻亮度不足,在SDR屏幕上播放HDR視頻都是經過色調映射的後處理,網上流傳的轉換矩陣基本都會丟失亮度)
處理器占用率 10~20%
顯卡占用率 50~60%
4K 144幀 SDR視頻(該視頻為後期補幀實現高幀率,所以幀間隔不穩定)
處理器占用率 10~20%
顯卡占用率 60~75%
8K 60幀 SDR視頻(實際表現穩定在40~45幀左右)
處理器占用率 10~20%
顯卡占用率 70~80%
四路 1080p SDR視頻(前兩個視頻為30幀,後兩個視頻為25幀)
GitHub地址
https://github.com/qian-o/MediaWPF