Apollo 虚拟显示实战:SudoVDA 安装与流媒体调优指南
【免费下载链接】ApolloSunshine fork - The easiest way to stream with the native resolution of your client device项目地址: https://gitcode.com/gh_mirrors/apollo18/Apollo
一台没接显示器的台式机,要远程开机、装游戏、跑编码,传统做法得先插一块物理屏或用 dummy plug。Apollo 把这条路绕开了:它 fork 自 Sunshine,主打一件事——按客户端设备的原生分辨率做流媒体。你用什么手机、平板连上来,主机端就按那个分辨率出画面,中间不需要人工对齐。
下面按"和原生 Sunshine 差在哪 → 怎么装驱动 → 怎么调参 → 编码器怎么选 → 多屏/远程办公怎么配"的顺序拆开讲。
Apollo 与原生 Sunshine 的差异
Apollo 基于 Sunshine 维护,但砍掉了一些与自研客户端 Artemis 强绑定的特性后,把重心放在虚拟显示上。两者最直观的区别,用一张表说清:
| 对比项 | Apollo | 原生 Sunshine |
|---|---|---|
| 虚拟显示 | 内置,Windows-only(SudoVDA) | 无内置虚拟显示 |
| 分辨率来源 | 自动匹配客户端 | 由显示端配置决定 |
| 编码器 | NVENC / AMF / QuickSync / VAAPI / 软编 | 同左 |
| 运行平台 | Win 10+ / macOS 12+ / Linux | Win / macOS / Linux |
注意:虚拟显示目前只支持 Windows。Linux 端计划支持,尚未实现。如果你在 Linux 主机上装 Apollo,得到的是一套完整的流媒体主机,但没有虚拟屏可用。
配置入口走 Web 界面,浏览器打开即可,客户端配对、分辨率、编码器、网络参数都在这里调。
Windows 下安装 SudoVDA 驱动
SudoVDA 是 Apollo 在 Windows 上用来创建虚拟显示适配器的驱动。驱动文件放在仓库的 src_assets/windows/drivers/sudovda/ 目录,里面是SudoVDA.inf、sudovda.cat、sudovda.cer和两个批处理脚本。
git clone https://gitcode.com/gh_mirrors/apollo18/Apollosrc_assets\windows\drivers\sudovda\install.batinstall.bat走的是 Windows 驱动签名安装流程,uninstall.bat对应移除。这一步最容易翻车:如果你系统里还挂着别的虚拟显示方案(dummy plug、第三方虚拟屏软件),建议先全部卸干净再装 SudoVDA,否则驱动状态和显示配置会互相打架。
判断驱动是否工作
虚拟屏的生命周期和流绑定:启动流时创建,应用退出时移除。最直接的验证方式是开一次流,看任务栏/系统设置里有没有多出一块屏;停流后再看它是否消失。如果始终不出现,多半是驱动没装对,或者另一个常驻的虚拟屏还在占用。
驱动状态在源码 src/platform/windows/virtual_display.cpp 里能查到,openVDisplayDevice()返回的DRIVER_STATUS会区分OK/FAILED/VERSION_INCOMPATIBLE/WATCHDOG_FAILED四种情况,排查时对照日志能缩小范围。
按客户端分辨率调参
Apollo 的虚拟屏不是固定分辨率。它读取当前 Artemis/Moonlight 客户端上报的分辨率和帧率,然后在 Windows 显示栈里把这块虚拟屏直接设到那个模式,画面由 GPU 按该分辨率渲染、编码、推流。客户端换设备或改分辨率,下次启动流时虚拟屏跟着变。
还有一个容易忽略的细节:Apollo 给每个客户端分配一个固定的显示身份。Windows 原生的显示设置因此能记住每个设备对应的分辨率、位置、缩放配置,重连时不会重置。这意味着你给手机调过一次 1440p,下次同设备连上来就是 1440p,不用重复摆弄。
双 GPU 笔记本的特殊配置
核显 + 独显的机器,默认走核显渲染。想用独显编码:在 Audio/Video 选项卡里把Adapter Name设成独显,同时勾选Headless mode,保存后重启电脑。这一步做完,画面直接从独显出,不再需要 dummy plug 占位。
硬件编码器怎么选
Apollo 跟随 Sunshine 的编码器矩阵,按硬件挑:
| 显卡 | 编码器 | 最低建议 |
|---|---|---|
| NVIDIA | NVENC | GTX 10 系以上 |
| AMD | AMF | VCE 3.1 以上 |
| Intel | QuickSync / VAAPI | HD 510 以上 |
| 无独显 | 软件编码 | i3 / Ryzen 3 以上 |
4K 流建议主机和客户端都走 5GHz Wi-Fi 或 CAT5e 有线,编码端独显等级按上表对齐。软件编码只用来验证链路通不通,不适合长期跑游戏。
多显示器、远程办公与游戏场景
虚拟显示让"无屏主机"成为一等公民:主机可以完全脱离物理屏运行,所有显示配置由 Apollo 管理。多显示器场景下,Apollo 支持跑多实例,每个实例挂一块虚拟屏,Windows 原生多屏设置决定它们的相对位置。
远程办公场景可以开Input only mode:客户端只接收画面、不反向控制输入,适合做纯监控或只读桌面。反向控制则走权限系统——第一个配对的客户端拿到全权限,后续设备默认只有View Streams和List Apps,要动鼠标键盘得手动授Mouse Input/Keyboard Input。
游戏流建议:独显走 NVENC/AMF 硬编,网络优先有线或 5GHz;如果客户端是 Pixel 系 Android 设备,原生分辨率可能用不了,需要在设备端把分辨率切到 Max 模式。
选型建议
适合 Apollo + SudoVDA 的情况:
- 主机长期无物理屏,要纯虚拟显示跑游戏或远程办公
- 客户端分辨率经常变(手机/平板/PC 混用),不想每次重配分辨率
- 双 GPU 笔记本想用独显编码但不想插 dummy plug
不适合的情况:
- Linux 主机上期望有虚拟显示——目前不支持,只支持流媒体本身
- 系统里已经跑着其他虚拟显示方案,又不打算清理的
- 需要和原生 Sunshine/Moonlight 客户端长期共存(Apollo 与 Artemis 绑定更深,后续会与 OG 客户端逐步分道)
排查问题时按这个顺序走:驱动装没装对 → 虚拟屏随流启停是否正常 → 客户端身份是否被记住 → 编码器与 GPU 是否匹配。四步走完,绝大多数问题都能定位到具体环节。
【免费下载链接】ApolloSunshine fork - The easiest way to stream with the native resolution of your client device项目地址: https://gitcode.com/gh_mirrors/apollo18/Apollo
创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考