怎样为ffplay添加硬件解码和渲染

为什么ffplay不支持硬件解码

ffplay是FFmpeg自带的播放器。也许你已经知道,ffplay不支持硬件解码 直接到渲染(支持少量硬件解码 + CPU拷贝再到SDL渲染方式,例如cuvid解码,暂且忽略)。ffplay为什么不做硬件解码的支持,我理解原因有几点:

  1. 定位上,ffplay作为简单的测试小工具,并不是要和mpv、VLC这种全功能的播放器去竞争
  2. 历史上,ffmpeg和mplayer有千丝万缕的联系,开发人员有大量重叠,有做播放器的兴趣,就去支持mplayer(和mplayer的衍生者)
  3. 技术上,支持多种硬件加速解码,需要有多种渲染方式和解码做互操作;M种解码“加”或者“乘”N种渲染,工作量太大,在ffplay里做,违反它的定位

为什么要给ffplay加硬件解码

随着高规格的视频越来越多,4K到8K,HDR 10bit,用ffplay做测试跑不动了。其他播放器做测试,启动慢,用不惯,不开源,使用不方便。

做测试最方便的还是ffplay,所以我希望ffplay能支持硬件解码和渲染。

现在技术上有了一个转机:vulkan!

  1. vulkan跨平台
  2. vulkan可以做渲染
  3. vulkan可以做计算,做图像处理
  4. vulkan可以做视频解码编码
  5. vulkan可以和CUDA、DRM、VAAPI互操作

简而言之,用一个vulkan做渲染,可以不走CPU拷贝的方式支持多个硬件解码,再加上CPU拷贝做fallback,可以支持大多数硬件解码。

一两个月的成果

经过几个周末的打磨,功能已经基本完成了,在走最后的review流程。平台和硬件解码支持:

怎样为ffplay添加硬件解码和渲染

以上是我自测情况,需要说明的如下:

  • 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 举报,一经查实,本站将立刻删除。

(0)

相关推荐

发表回复

登录后才能评论