引言
你是否也曾幻想过这样的场景?
周末的午后,你不想再正襟危坐在书房冰冷的电脑椅上,而是想慵懒地陷在客厅舒适的沙发里,在巨大的电视屏幕上体验《艾尔登法环》的壮阔世界;或是晚上睡前,想用手边的iPad或安卓平板,继续征战《博德之门3》的冒险,而无需重新下载几十个G的游戏。
这些看似美好的愿望,在过去却总是被“游戏串流”这道技术门槛所阻拦。也许你尝试过Steam Link,却为它的延迟和画质妥协而感到失望;或许你曾是NVIDIA Gamestream的忠实用户,却因其突然停止支持而倍感无奈;又或者,你被其他商业串流方案昂贵的订阅费用和复杂的设置直接劝退。
而现在,一切都不一样了。我们可以使用 Sunshine + Moonlight 这套强大的方案来实现低延迟高帧率的游戏画面串流。无论你是想从PC串流到手机、平板、笔记本,还是电视盒子,无论你用的是NVIDIA、AMD还是Intel显卡,它都将带你轻松跨越设备与平台的壁垒。
串流与传统远程桌面的设计理念不同。串流可以给你带来最低的延迟反馈与最高的画质和帧率——它是专为游戏而生的所以可能还有专门适配与优化;而后者则更注重办公的功能性。
(本文后半部分也会粗略介绍一下远程串流的解决方案)
搭建环境介绍
我的 Sunshine 服务端被安装在一台虚拟化出来且直通了 GPU 的一台 Windos 虚拟机上。当然,一个更好的选择是单独放置一台物理机。
- Windows GTX1650(下文称主机或远程主机)
- Sunshine 2025.628.4510(下文称服务端)
- Moonlight 6.1.0(下文称客户端)
在开始之前
注意事项
- Nvidia 显卡的串流延迟可能是 AMD 显卡同代方案的 二分之一 甚至更低。所以十分建议您使用 Nvida 显卡,即使任何显卡都是被此方案支持的。
- 有线连接远比无线连接稳定得多。如果您发现您的网络传输帧率频繁卡顿或是有频繁的速率过低告警,可能就是因为您正在使用无线连接导致的。
概念科普
Moonlight
- 源自NVIDIA Gamestream,但现已支持所有GPU。
- 几乎全平台的客户端(Windows, macOS, Linux, Android, iOS, 甚至游戏主机)。
- 提供极致的低延迟和画质体验。
Sunshine
- 一个开源、跨平台的游戏串流服务端。
- 替代已停更的NVIDIA Gamestream服务端。
- 支持AMD, Intel, NVIDIA显卡。
组合优势
- 完全免费且开源。
- 超低延迟和高性能: 媲美甚至超越商业方案。
- 极高的兼容性: 不限显卡品牌,不限客户端设备。
- 高度可定制化。
准备工作
硬件要求
- 主机(Server - 运行Sunshine的PC): 一台性能强大的Windows/Linux PC(用于游戏),支持硬件编码的GPU(NVIDIA NVENC, AMD AMF, Intel Quick Sync)。
- 客户端(Client - 运行Moonlight的设备): 电脑、手机、平板、电视盒子等。
- 网络要求: 强烈建议所有设备使用有线(以太网)连接。 最低要求5GHz Wi-Fi。分析有线与无线的延迟差异。
安装配置及使用
Sunshine
仓库地址:
在 此处 下载 Sunshine(服务端),建议不要使用带有 Pre-release(预览版)标签字样的发布,而是下滑找到绿色的 Latest 标签。
远程主机一般是 Win 系统,所以直接下载 sunshine-windows-installer.exe 并在远程主机上运行安装即可。Sunshine 会被作为服务注册安装,随开机自动启动。
你可以方便的通过 WebUI 管理 Sunshine(即安装完成后自动打开的 localhost:47990)第一次访问可能会提示不安全(因为证书是自签的),以 Edge/Chrome 浏览器为例,点击“高级”,再点击“继续访问”即可。
此时会要求你创建一个账户,用于日后的管理面板访问鉴权。只需输入账户密码再确认一次密码,即可使用设置的账密登录 Sunshine Web UI。
管理页面默认以英文显示。如果您不是特别习惯英语,Sunshine 的 Web UI 也同样提供了包括中文在内的多语言支持。在 Configuration 栏的 General 标签页中有一个 Local 选项,将其改为简体中文,保存设置后软件会自动重启以使设置生效。
Moonlight
官网地址:
接下来我们需要在设备上安装 Moonlight 作为客户端连接到远程主机。
Windows:直接在 Github 仓库 Releases · moonlight-stream/moonlight-qt 中下载 MoonlightSetup 程序并安装即可。
安卓:Releases · moonlight-stream/moonlight-android 下载。一般选择 nonRoot-release。
IOS:App Store 搜索并安装。
启动 Moonlight 后,软件会自动在本地局域网内寻找可用的远程主机,我们只需要等待设备被搜索到之后,点击设备图标,然后拿着得到的一串数字(配对码)到 Sunshine 管理面板的 PIN码 页面中填入它并设置设备名,即可完成配对。
客户端可以设置画质、帧率、码率等主要设置与其它性能或偏好设置。如果无特殊需求保持默认即可。若发现连接过程中频繁提示连接速率过低则请尝试降低码率或是确保自己的设备通过网线连接至网络(无线连接的稳定性欠佳,来自 ax200 无线网卡,会周期性丢包)
常用快捷键
(送给第一次用时甚至不知道怎么退出串流的我)
PC 客户端:
- Ctrl+Alt+Shift+Q - 退出流式处理会话(让游戏在主机PC上运行)
- Ctrl+Alt+Shift+Z - 切换鼠标和键盘捕获
- Ctrl+Alt+Shift+X - 在全屏和窗口模式之间切换
- Ctrl+Alt+Shift+S - 打开性能统计信息叠加(Steam Link 或 Raspberry Pi 不支持)
- Ctrl+Alt+Shift+M - 切换鼠标模式(指针捕获或直接控制)
- Ctrl+Alt+Shift+V - 在主机上键入剪贴板文本
- Ctrl+Alt+Shift+D - 最小化流窗口
- Ctrl+Alt+Shift+C - 在远程桌面鼠标模式下切换本地光标显示(由于 GameStream 限制,远程光标将始终显示)
- Ctrl+Alt+Shift+L - 切换将鼠标指针锁定到视频区域(需要启用“优化鼠标以进行远程桌面而不是游戏”复选框)
翻译自 Setup Guide · moonlight-stream/moonlight-docs Wiki,可能有部分错误,可以自行查阅文档链接中的内容。
显卡欺骗器
如果你想要的是一台云电脑般的云主机,那么你可能需要一颗显卡欺骗器。显卡在无显示器信号的情况下不会输出任何画面(串流画面黑屏),所以串流也不会成功。而显卡欺骗器则向显卡发送显示器信号从而使显卡正常工作。淘宝上随便买一颗即可,价格相对低廉,分辨率一般都可调。
如果您不想使用显卡欺骗器或者认为欺骗显卡很没道德心(雾),可以尝试使用虚拟桌面软件——例如 Parsec-vdd。虚拟屏幕软件是通过创建一个不存在的屏幕让显卡认为你接了显示器。
二者在功能性上并无较大差别,不过由于前者是物理层面解决方案,我可能会更加推荐欺骗器。当然,后者的功能一定更加强大的(况且这不要钱)
网络
一般来说,大部分人的使用场景是同局域网的串流,所以带宽几乎不成问题。需要注意的只是网络稳定性,推荐使用有线连接,稳定性与延迟都优于无线连接。
一般来说,1080p@60 的画面需要 20Mbps,1440p@60 需要 40Mbps,4k@60 需要 80Mbps,4k@120 则需要 113Mbps。
对于公网串流,其影响因素包括物理/链路距离、是否跨运营商、高峰期堵塞等。跨运营商可能会遭到 QoS,所以建议让主机网络与客户端网络同属同意运营商,二者物理距离越短越好。
公网串流方案
由于 Sunshine 徐娅 6 个以上对等端口,并且协议包含http,所以内网穿透起来十分麻烦。这里介绍虚拟组网与公网 IP 方案。
虚拟组网
你也可以叫它虚拟局域网,这是最方便简单的方案。
虚拟局域网(VLAN),简单来说,就是通过技术手段,将一个物理上的局域网,划分成多个逻辑上独立的、隔离的“小局域网”。
不过请注意,VLAN 与 VPN 的概念并不相同。前者是 P2P 端到端及 NAT 打洞技术为主,中继流量为辅;而后者则是通过建立加密隧道连接不同网络的设备。
常见的软件有 ZeroTier、Tailscale 等。基本都是开箱即用且无需任何公网服务。
这类软件原理流程如下:
- 首先尝试 NAT 打洞,若成功则直接建立端到端连接(速度高)
- 若打洞失败则将流量发送至中继服务器(速度低)
所以,虚拟局域网的方案虽然方便,但存在着一些不确定因素——如果您的网络状况特别逆天,就会走速度极慢延迟极高的中继了。
公网 IP
公网 IP 分有 IPv4 与 IPv6 两种。
IPv4
由于 IPv4 地址早已耗尽,所以目前大多数设备的 IPv4 地址都是结合了 NAT 技术的(例如您的手机与电脑虽然在局域网中各自拥有独立的内网 IP,但它们的公网 IP 可能是相同的)
所以如果您需要通过 IPv4 进行连接,可以尝试联系您的运营商申请一个(不要说要做什么什么服务,说要拉监控就行)(移动用户申请公网 IPv4 比较难——除非你加钱)
公网 IP 申请下来之后,还需要将自己的光猫改为桥接模式,用路由器拨号上网并开启路由器的 Upnp 功能(Universal Plug and Play,它允许网络设备自动配置并相互连接,无需手动设置)再在 Sunshine 的 Configuration 的 Network 页面中开启 Upnp。
最后,在 Moonlight 中直接输入远程主机的 IPv4 地址,如果一切顺利就可以顺利串流了。
IPv6
如果您是移动用户或是出于某些原因无法得到 IPv4 独立地址,可以尝试使用 IPv6。
IPv6 作为解决 IPv4 地址耗尽问题的新一代 IP 协议,地址充足,一般不会被 NAT(要是 IPv6 的地址都要 NAT 的话,那运营商就真的逆天了)
在 ip.sb 得到自己的 IPv6 地址,填入 Moonlight 后同样可以连接(需要在 Sunshine的Configuration->Network下面开启IPv4 + IPv6选项)。
不过,部分路由器可能针对公网的入站流量有拦截规则(虽然我的路由器没有),您就需要到路由器管理界面中放行需要使用的端口。Sunshine 所使用的端口可以在 Configuration 的 Network 页面查看。
不过请注意:如果您需要通过 IPv6 连接主机,那么您的客户端也必须具备一个可用的 IPv6 地址(IPv4 与 IPv6 是两个独立协议,并不互通)您在外出门时,如果不使用移动数据,几乎不可能有 IPv6 地址。
如何远程唤醒(无人值守)
开机卡
可以网购一个远程开机卡,插在主机上之后即可在外面远程开机。
WOL
也可以拿出一台闲置的小设备(24*7 运行,例如树莓派等),在上面运行一个 Frp 客户端(自建内网穿透服务可参考 https://www.pyrzo.com/posts/nps-frp-guidence/)。出门在外时,只需要通过 frp 连接到家里的树莓派,再用树莓派通过 WOL 协议唤醒主机即可。
智能插座
当然,也可以购买一个小米智能插座,这种智能插座可以通过 Wi-fi 连接至网络。我们只需要在主机 BIOS 里设置电源为上电自动开机,然后通过米家软件控制智能插座的电源,也可以达到一样的效果。
版权申明
- 本文作者:光昭
- 本文链接:https://www.pyrzo.com/posts/sunshine-moonlight
- 封面出处:#绘画 【板绘】“龙与少女·浅海”如果说海有模样,这便是我心中的海 - 不想当画家的Leo的插画 - pixiv
- 版权声明:所有文章除特别声明外均系本人自主创作,转载及引用请联系作者,并注明出处(作者、原文链接等)。
- 部分图片搜集于网络,若构成侵权请联系我,会尽快删除图片
Comments 2 条评论
我电脑串流到平板上,平板的键盘上的触摸板,实际用的时候就是颠倒的,就是类似于它在以竖屏下使用触摸板,但是平板现在是横屏放置的。除了这个bug外,这个方案是最完美的。
@inkss 我是电脑串电脑,当个云主机使唤,用起来除了无线网会有波动以外完美极了