发布网友 发布时间:1天前
共1个回答
热心网友 时间:1天前
ffplay支持设置解码器以使用硬解功能,实际测试效果显著,但并非最优化方案。在Windows上,使用dxva2解码结合d3d9渲染能达到更佳性能,降低CPU与GPU使用率,提高解码速度。尽管ffplay不直接支持dxva2,但通过拓展可实现此优化。
dxva2解码渲染分为两个步骤:解码与渲染。dxva2为显卡处理解码与渲染,避免数据从内存取出,直接在显存转换渲染。ffmpeg内含dxva2示例代码,但缺乏显卡渲染功能。需参照Win32Project1的ffmpeg_dxva2解码渲染博文进行扩展。
需要在stream_component_open中进行修改。
在stream_close中执行dxva2反初始化代码。dxva2_uninit2方法需调用,参数类型调整为InputStream*。
通过上述解码设置,数据以d3d9 surface形式输出。需对其进行处理显示,Win32Project1提供相关功能,仅需调用即可。在video_display前加入渲染代码。
总结,通过本文所述方法实现的dxva2硬解渲染性能优越,直观体验为4k视频渲染时CPU使用率不超过1%,GPU使用率约50%,而使用硬解编码器时CPU使用率仅为10%,GPU使用率同样为50%左右。Win32Project1_ffmpeg_dxva2博文中对此有详细说明。优化后,ffplay支持xva2硬解渲染,拓宽了实际应用范围,如解决实时流多路渲染性能不足问题。
额外资源:提供C++音视频开发学习视频与免费资料分享,包括C/C++、Linux、FFmpeg、webRTC等学习材料。如有需要,可加入交流君羊获取。
详细链接:ffplay使用dxva2实现硬解渲染 - 资料 - 我爱音视频网 - 构建全国最权威的音视频技术交流分享论坛