Sunshine 基地版 是一个很好的软件,自带了虚拟显示器,能够非常方便地实现熄屏串流,但有一个 bug,它会在串流结束后自动开启虚拟显示器的 HDR 功能:https://github.com/qiin2333/Sunshine-Foundation/issues/13
很遗憾我恰巧又在使用一个支持 HDR 显示的屏幕作为客户端,所以这个问题变得相当影响使用:每次串流启动后,需要去 Windows 设置里把虚拟显示器的 HDR 关掉,否则 Moonlight 的亮度会显著高于系统亮度。
虽然 issue 中也提出了一些处理方法,例如关闭 Windows 的颜色管理(此处),但怕有副作用,于是还是准备手动折腾一下。
本文不涉及对客户端的任何更改。下面所有的步骤都在服务端上进行。
安装 Sunshine
直接下载最新版安装即可 https://github.com/LizardByte/Sunshine
安装 Virtual-Display-Driver
https://github.com/VirtualDrivers/Virtual-Display-Driver
下载最新版,然后解压到某个地方。然后双击运行。启动后点击“Install Driver” 来安装依赖。Windows 可能弹出确认安装驱动程序的对话框,点击确认即可。
安装之后,应当可以在 Windows 设置-系统-显示中看到新的名为“VDD By MTT”的虚拟显示器。可以选择“断开此显示器的连接”,这样虚拟显示器不会参与实体显示器的布局,可以保持原有的布局边界不变。
这里不用管虚拟显示器的分辨率。根据我的测试,后面串流时可以使用客户端要求的分辨率,即使那个分辨率不在这个页面的分辨率列表中。
获取虚拟显示器的 ID
然后,访问 http://127.0.0.1:47990 或在任务栏托盘中点击 Sunshine 图标,然后点击“Open Sunshine”,进入 Sunshine 的 WebUI。输入安装 Sunshine 时设定的用户和密码。
然后,点击“故障排除”
拉到最下面,查看 Sunshine 的日志。在其中找到“Currently available display devices”这条日志,它应该位于靠近开头的地方。
如果找不到这条日志,需要去 Sunshine “配置-General-日志级别” 中确认 Sunshine 的日志级别,如果级别不是“信息”,则将其设置为“信息”后保存并重启 Sunshine,然后再查找。
在其中找到“VDD By MTT”这个虚拟显示器,复制它的 device_id
。
注意,此处应当复制
device_id
而不是形如\\.\DISPLAY1
的display_name
。网上查到的一些方法记录的是形如\\.\DISPLAY1
的,经过尝试,这种方法没有效果。可能是因为 Sunshine 最近修改了相关的逻辑。
修改 Sunshine 的显示器逻辑
前往“配置-Audio/Video”选项卡
找到 “config.output_name_windows” 这个选项:
将刚才复制的 device_id
粘贴进去。
然后在下面的 “高级显示设备选项” 设置中,按照下面的图片进行修改。
- “停用其他显示器并仅激活指定的显示”表示在串流启动时,仅激活虚拟显示器,并停用所有物理显示器。这样串流时屏幕的内容就不会在物理显示器上显示了。
- “不要更改 HDR 设置”可以禁止客户端修改 HDR 设置,这样在支持 HDR 的客户端上 HDR 不会默认开启。
其他设置保持默认或根据自己需要选择即可。
完成所有设置之后,拉到最下面,点击“保存”-“应用”,即可开始串流。