为什么ffplay不支持硬件解码
ffplay是FFmpeg自带的播放器。也许你已经知道,ffplay不支持硬件解码 直接到渲染(支持少量硬件解码 + CPU拷贝再到SDL渲染方式,例如cuvid解码,暂且忽略)。ffplay为什么不做硬件解码的支持,我理解原因有几点:
- 定位上,ffplay作为简单的测试小工具,并不是要和mpv、VLC这种全功能的播放器去竞争
- 历史上,ffmpeg和mplayer有千丝万缕的联系,开发人员有大量重叠,有做播放器的兴趣,就去支持mplayer(和mplayer的衍生者)
- 技术上,支持多种硬件加速解码,需要有多种渲染方式和解码做互操作;M种解码“加”或者“乘”N种渲染,工作量太大,在ffplay里做,违反它的定位
为什么要给ffplay加硬件解码
随着高规格的视频越来越多,4K到8K,HDR 10bit,用ffplay做测试跑不动了。其他播放器做测试,启动慢,用不惯,不开源,使用不方便。
做测试最方便的还是ffplay,所以我希望ffplay能支持硬件解码和渲染。
现在技术上有了一个转机:vulkan!
- vulkan跨平台
- vulkan可以做渲染
- vulkan可以做计算,做图像处理
- vulkan可以做视频解码编码
- vulkan可以和CUDA、DRM、VAAPI互操作
简而言之,用一个vulkan做渲染,可以不走CPU拷贝的方式支持多个硬件解码,再加上CPU拷贝做fallback,可以支持大多数硬件解码。
一两个月的成果
经过几个周末的打磨,功能已经基本完成了,在走最后的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
Nvidia 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欢迎来聊。
作者:quink
来源:Fun With FFmpeg
原文:https://mp.weixin.qq.com/s/Yv_JHLlKzBB87aASblnUxw
版权声明:本文内容转自互联网,本文观点仅代表作者本人。本站仅提供信息存储空间服务,所有权归原作者所有。如发现本站有涉嫌抄袭侵权/违法违规的内容, 请发送邮件至1393616908@qq.com 举报,一经查实,本站将立刻删除。