用于加速 H.264 和 H.265 编码的 Vulkan 视频扩展
Khronos 新推出的用于 H.264 和 H.265 硬件编解码的 Vulkan Video 扩展,引发了人们对单一跨厂商 API 的期待,希望它能在 GPU 和操作系统之间简化视频加速,尤其是在 Linux 上。评论者在 Vulkan 的潜力与现有的操作系统/厂商特定路径(如 VA-API、Windows Media Foundation、NVDEC/NVENC 等)之间进行权衡,并指出驱动支持、编解码器专利问题以及平台碎片化(尤其是在 macOS 和 Android 上)方面的缺口。人们也对即将到来的 AV1 支持以及现代编解码器在专用硬件模块和像 dav1d 这样的软件解码器中究竟能多好地并行化感兴趣。
Vulkan Video 的范围和目标
- 使用 GPU/SoC 上现有的固定功能编解码块,类似于 VAAPI、NVENC/NVDEC 等所针对的硬件。
- 被宣传为跨厂商、跨平台的视频 API,可能覆盖 Intel、AMD、Nvidia、移动 SoC 以及小型设备(例如 Raspberry Pi)。
- 被认为对 Linux 尤其有前景,因为那里没有统一的原生媒体 API,而且驱动碎片化令人头痛。
与现有 API 的比较(VAAPI、DXVA 等)
- Vulkan Video 和 VAAPI 面向的是同样的硬件;区别在于 API 设计:
- Vulkan 更明确、对编解码器的绑定更少,并且可以与 Vulkan 渲染干净地集成(更容易零拷贝到纹理)。
- VAAPI 在 Linux 上使用广泛,Intel/AMD 以及一些第三方 Nvidia 兼容层都支持它,但 Nvidia 并未正式支持。
- 有人认为 VAAPI 早已不再是“Intel 专属”;也有人强调它以及 VDPAU/NVDEC/AMF 仍然是厂商/平台特定的。
- 怀疑者说,把 OBS/Firefox 从成熟的操作系统原生 API(DXVA/WMF、VideoToolbox、MediaCodec)迁移出去会增加复杂性,尤其因为 macOS 和 Android 没有 Vulkan Video,而 Windows 上的 Vulkan 也只是 DirectX 的次要选择。
Firefox 与 Linux 上的硬件解码
- Firefox 在 Linux 上已经通过 ffmpeg+VAAPI 提供硬件解码,包括在 Intel 和 AMD 上;Nvidia 在没有非官方兼容层时仍然有问题。
- 用户可以通过 about:support 的 Media 部分或特定 GPU 工具来验证是否在使用。
- Mesa 默认禁用受专利限制的编解码器;许多发行版也会关闭它们以避免法律风险,因此 H.264/H.265 可能需要额外步骤,而 AV1 通常开箱即用。
驱动部署与可用性问题
- 在 Windows 上,OEM/Microsoft 提供的驱动通常默认不带可工作的 Vulkan 运行时;DirectX 可以工作,但 Vulkan 可能要等用户安装额外运行时后才可用,这对游戏可以接受,但对通用应用来说有问题。
编解码器中的硬件与并行性
- “软件解码”指的是基于 CPU 的解码;“硬件解码”使用附着在 GPU/iGPU 上的固定功能单元(例如 Quick Sync),而不是通用 GPU 核心。
- 视频解码在某种程度上本质上是串行的(例如熵解码、运动预测链),但现代编解码器(H.265、AV1)提供了 tile/slice 以便并行处理,用牺牲部分压缩效率来换取多线程解码/编码。