一个直接调用 NVIDIA Video Effects SDK 的 Linux 桌面播放器,让 RTX 显卡的 AI 超分能力在 Linux 上可用。
项目地址:github.com/zhangmq/vsr-player
声明:本文及项目文档均由 AI 生成。文中可能包含过度热情的表达,不代表作者本人的精神状态。
背景
NVIDIA RTX Video Super Resolution(RTX VSR)在 Windows 上已经可用了一段时间——通过驱动集成,浏览器(Edge、Chrome)和主流播放器(mpv、VLC)都能直接调用。但在 Linux 上,这个驱动级接口并未开放,目前没有任何播放器能在 Linux 上使用 RTX VSR。
NVIDIA Video Effects SDK 提供了相同的底层 AI 模型,也有 Linux 版本。但它不是一个拿来就能用的依赖——目前还是 Early Access 状态,附带约 1 GB 的推理运行时(TensorRT、cuDNN、NPP 等),也没有现成的播放器集成路径。
这个项目直接调用了 Video Effects SDK 的 C API,将其接入一个独立的播放器中。简单来说:驱动不做的,自己在用户态做。这显然不是最合理的路线——这类处理逻辑理应放在驱动或合成器层面——只是在驱动级 VSR 尚未支持 Linux 的情况下的一个变通方案。
特性
- AI 超分辨率 — 通过 Tensor Cores 实时超分 2×/3×/4×
- AI 降噪 — 可配置降噪强度(低至超高),在原始分辨率下单独生效
- NVDEC 硬解码 — AV1、H.264、HEVC GPU 解码,帧数据零拷贝
- Vulkan 渲染 — CUDA-Vulkan 互操作,帧数据全程不离开 GPU 显存
- QML 叠加 UI — 半透明控件,自动隐藏、播放列表、OSD 信息面板
- 音视频同步 — 音频主时钟,基于真实 PTS 的同步策略
- 自适应缩放 — 根据视频分辨率和窗口大小自动选择超分倍率
- 零系统依赖 — 所有 VFX 库(约 1.1 GB)随应用打包,仅需
libcuda.so.1
效果展示
播放器界面
VSR 4× 超分对比
原始画面(720p)
VSR 4× 超分
技术实现
整体架构
Qt Client (主线程) libvsrplayer (工作线程)
┌──────────────────────────┐ ┌─────────────────────────────────┐
│ QML Overlay │ │ PlayerCore — 命令队列 + │
│ ├─ TopBar │ 命令/ │ 播放状态机 │
│ ├─ BottomBar │ 事件 │ ├─ Demuxer (libavformat) │
│ ├─ VolumePopup │◄────────►│ ├─ Decoder (NVDEC hwaccel) │
│ ├─ QualityPopup │ 桥接 │ ├─ VSRProcessor (NvVFX) │
│ ├─ SpeedPopup │ │ ├─ Renderer (Vulkan) │
│ ├─ PlaylistPanel │ │ ├─ AudioOutput (PortAudio) │
│ ├─ ProgressSlider │ │ ├─ ClockManager (A/V 同步) │
│ ├─ CenterPlayBtn │ │ └─ NV12ToRGB (CUDA kernel) │
│ └─ OsdOverlay │ │ │
└──────────────────────────┘ └─────────────────────────────────┘
数据流(全 GPU,零 PCIe 拷贝)
Container → Demux → NVDEC → NV12(GPU) → NV12→RGB(GPU) → VSR → RGBA(GPU)
→ CUDA-Vulkan 互操作
→ Vulkan 渲染通道
→ 屏幕
帧数据从解码到渲染全程留在 GPU 显存中,不经过 PCIe 总线。CUDA-Vulkan 互操作通过 VK_KHR_external_memory_cuda 扩展实现,免去了 GPU→CPU→GPU 的内存往返。
技术栈
| 层 | 技术 |
|---|---|
| 解码 | FFmpeg + NVDEC (av1_nvdec / h264_nvdec / hevc_nvdec) |
| AI 超分 | NVIDIA Video Effects SDK (libnvVFXVideoSuperRes) |
| 推理引擎 | TensorRT + cuDNN + NPP(随 SDK 打包,约 1.1 GB) |
| GPU 计算 | CUDA (NVRTC 运行时编译 NV12→RGB kernel) |
| 渲染 | Vulkan + CUDA-Vulkan 互操作 |
| 音频 | FFmpeg 解码 → PortAudio 输出 |
| UI | Qt 6.11 Quick / QuickControls |
快速开始
从 Release 安装
从 GitHub Releases 下载最新的 vsr-player-<ver>-linux-x86_64.tar.gz:
tar xzf vsr-player-*.tar.gz
cd vsr-player-*
./install.sh
export PATH="$PATH:$HOME/vsr-player/bin"
vsr-player /path/to/video.mp4
安装脚本会自动检测系统依赖、通过 pip install nvidia-vfx 安装 NvVFX 运行时,并部署到 ~/vsr-player/。无需 root 权限。
从源码构建
git clone https://github.com/zhangmq/vsr-player.git
cd vsr-player
# 准备第三方依赖(详见 docs/BUILD.md)
make -j$(nproc)
./build/vsr-player /path/to/video.mp4
关于开发过程
我对 C++ 和 CUDA 开发没什么概念,这个项目基本上是 AI 开发的——包括代码、QML UI、构建系统、文档,甚至这篇文章。我唯一的工作就是在 AI 产生幻觉时 PUA 他。
再次声明:本文及项目文档均由 AI 生成,文中可能包含夸张修辞,不代表作者本人的精神状态。
仓库与许可
- 仓库:github.com/zhangmq/vsr-player
- 许可:MIT
- 第三方 SDK:详见 third_party/README_zh.md
- 构建指南:docs/BUILD.md
如果你也有 RTX 显卡且跑 Linux,欢迎试试看。遇到问题提 Issue。


