1. 为什么我最终选择了 Sunshine 加 Moonlight 这套自托管串流方案
先说结论:如果你手上有一台性能还不错的台式机或者带独显的迷你主机,又想在客厅电视、平板、轻薄本甚至手机上玩 3A 大作,Sunshine 加 Moonlight 这套组合目前是自托管串流里最省心、延迟最低、画质最能打的一条路。我自己从早期的 NVIDIA GameStream 一路用到它被官方砍掉,中间折腾过各种替代方案,最后稳定在 Sunshine 上,前后帮朋友搭过七八套,踩的坑足够写一篇完整的避坑记录了。
所谓游戏串流,本质就是把主机上的游戏画面实时编码成视频流,通过网络推送到另一台设备上显示,同时把接收端的键鼠、手柄操作回传主机。听起来简单,但要做到"感觉不到延迟",涉及编码器选型、网络传输、解码渲染一整条链路。Sunshine 是运行在主机端的开源串流服务端,Moonlight 是运行在接收端的客户端,两者配合,等于你自己搭了一套私有云游戏平台,不依赖任何第三方服务器,数据全在自己局域网里跑。
这套方案适合谁?三类人最合适。第一类是有高性能主机但显示器被占用,想在别的房间接着玩的;第二类是想把游戏画面投到电视上,享受大屏体验的;第三类是手里有老旧笔记本或者平板,想借主机的算力玩游戏的。不适合谁?如果你的主机本身性能就吃紧,或者网络环境是那种老式百兆路由加一堆墙,那串流体验会很糟,建议先把网络搞好再考虑。
我为什么不用那些商业串流服务?原因很直接:延迟不可控、画质被压缩、还要看订阅脸色。自托管的好处是编码参数、码率、分辨率全由你说了算,局域网内跑满千兆甚至 2.5G,画质可以做到几乎无损。下面我把从零搭建的完整流程、参数调优、以及那些文档里不会写的坑,一次性讲透。
2. 搭建前的硬件与网络盘点:别急着装软件
2.1 主机端需要什么配置
主机端是整套方案的核心,它负责运行游戏和编码视频流。CPU 方面,近五年的主流处理器都够用,真正吃紧的是显卡的硬件编码器。NVIDIA 的 NVENC、AMD 的 AMF、Intel 的 Quick Sync 都是硬件编码方案,能把编码任务从 CPU 卸载到显卡上,大幅降低延迟和 CPU 占用。
我的建议是:NVIDIA 显卡从 GTX 10 系开始 NVENC 就很好用了,20 系之后画质和效率更佳;AMD 显卡建议 RX 5000 系以上,AMF 编码器这几年进步明显;Intel 核显的 Quick Sync 其实被严重低估,如果你是用带核显的 Intel 平台,完全可以拿核显来编码,独显专心跑游戏,这个玩法后面会细说。
内存建议 16GB 起步,32GB 更稳,因为游戏本身加上编码缓冲会占用不少。硬盘方面,游戏装在 SSD 上是基本要求,机械硬盘加载慢会拖累整体体验。
2.2 接收端设备的兼容性
Moonlight 客户端的覆盖面非常广,这也是我推荐它的重要原因。官方支持 Windows、macOS、Linux、Android、iOS,还有树莓派和各种电视盒子。实测下来,安卓电视盒子和手机端的体验最好,因为硬件解码支持完善;Windows 和 macOS 客户端也很成熟;Linux 端稍微折腾一点,但也能跑。
有个细节要注意:接收端的解码能力决定了你能跑多高的码率和分辨率。老设备可能只支持 H.264 解码,新设备普遍支持 HEVC(H.265)甚至 AV1。HEVC 在同等画质下码率能省 30% 到 50%,所以如果你的接收端支持,优先用 HEVC。
2.3 网络才是真正的瓶颈
我见过太多人硬件配置拉满,结果卡在网络上。串流对网络的要求是低延迟加高带宽,两者缺一不可。理想情况是主机和接收端都接网线,走千兆局域网,这样延迟能压到个位数毫秒。如果必须用无线,5GHz 频段是底线,WiFi 6 更好,2.4GHz 基本没法玩。
这里有个反直觉的点:很多人以为带宽越大越好,其实延迟稳定性比峰值带宽更重要。一条稳定的 500Mbps 连接,比一条忽高忽低的千兆连接体验好得多。所以路由器别买那种便宜货,QoS 和稳定性很关键。
| 网络类型 | 带宽 | 典型延迟 | 适用场景 |
|---|---|---|---|
| 有线千兆 | 1000Mbps | 1-3ms | 4K 60帧无压力 |
| WiFi 6 5GHz | 600-900Mbps | 5-15ms | 1080P 60帧很稳 |
| WiFi 5 5GHz | 300-500Mbps | 10-25ms | 1080P 60帧可用 |
| 2.4GHz | 50-150Mbps | 30ms+ | 不建议串流 |
3. Sunshine 服务端的安装与首次配置
3.1 各平台安装方式的选择
Sunshine 的安装包覆盖 Windows、Linux、macOS。Windows 用户直接去官方仓库下载安装包,双击一路下一步就行,安装完会自动注册为系统服务并开机自启。Linux 用户稍微复杂一点,Ubuntu 系可以用 deb 包,也可以自己编译,后面单独讲编译的坑。macOS 用户下载 dmg 拖进应用文件夹即可。
我重点说 Windows,因为这是绝大多数人的选择。安装完成后,Sunshine 会在系统托盘显示一个图标,右键可以打开 Web 管理界面,默认地址是https://localhost:47990。注意是 https,浏览器会提示证书不安全,这是自签名证书,直接点继续访问就行。
首次访问会让你设置用户名和密码,这个凭据是用来管理 Sunshine 的,不是串流时用的。设置好之后进入主界面,你会看到 Applications、Configuration、Troubleshooting 几个标签页。
3.2 配对流程:PIN 码那点事
配对是 Sunshine 和 Moonlight 建立信任关系的过程。流程是这样的:先在接收端打开 Moonlight,它会自动搜索局域网内的 Sunshine 主机;如果搜不到,可以手动添加主机 IP。选中主机后,Moonlight 会显示一个四位 PIN 码,然后你需要在 Sunshine 的 Web 界面里输入这个 PIN 完成配对。
这里有个高频坑:PIN 码输入后提示配对失败。原因通常是主机防火墙拦了 Moonlight 的回连请求,或者 Sunshine 服务没正常运行。解决办法是检查 Windows 防火墙,确保 Sunshine 相关的端口(47984、47989、47990、48010 等)都放行了。我一般图省事,直接在防火墙里给 Sunshine 放行专用和公用网络。
还有一个坑是主机有多张网卡(比如同时有有线和无线),Sunshine 可能绑定了错误的网卡。这种情况在 Configuration 的 Network 标签里可以手动指定要监听的网卡,选你实际用来串流的那张。
3.3 应用列表的配置逻辑
Sunshine 默认会扫描系统里已安装的游戏,但扫描结果经常不全,尤其是那些不在 Steam、Epic 等平台库里的游戏。我的做法是手动添加应用,在 Applications 标签页点 Add,然后填名称、命令、工作目录。
命令这一栏是关键。比如你要串流一个 Steam 游戏,可以直接填 Steam 的启动命令加游戏 ID;如果是独立 exe,就填 exe 的完整路径。工作目录填 exe 所在文件夹,有些游戏不填工作目录会启动失败。
提示:添加应用时建议勾选 "Run as administrator",很多游戏需要管理员权限才能正常捕获画面和接收输入。
4. 画质与延迟的平衡:编码参数怎么调
4.1 编码器选型:NVENC、AMF 还是 Quick Sync
这是决定串流质量的第一道关卡。Sunshine 支持多种编码器,在 Configuration 的 Audio/Video 标签里可以选。我的实测经验是这样的:
NVIDIA 的 NVENC 是综合表现最好的,延迟低、画质好、兼容性强。如果你用 N 卡,无脑选 NVENC。AMD 的 AMF 这几年进步很大,RX 6000 系之后画质已经接近 NVENC,但老卡上还是略逊一筹。Intel 的 Quick Sync 适合核显平台,尤其是那些用 Intel 核显做编码、独显跑游戏的混合方案,能有效分担负载。
有个进阶玩法值得一试:如果你同时有 Intel 核显和独立显卡,可以在 BIOS 里开启核显,然后让 Sunshine 用 Quick Sync 编码,独显全力跑游戏。这样编码和渲染互不干扰,帧数更稳。设置方法是在 Windows 显示设置里把核显启用,然后在 Sunshine 里选 QSV 编码器。
4.2 码率、分辨率与帧率的三角关系
这三个参数互相制约,调不好就会出现画面糊、卡顿或者延迟高。基本原则是:分辨率决定画面清晰度的上限,码率决定实际能传输多少细节,帧率决定流畅度。
1080P 60 帧,码率建议 20-30Mbps;1440P 60 帧,建议 30-50Mbps;4K 60 帧,建议 60-100Mbps。局域网千兆环境下,这些码率都能轻松跑满。如果你走无线,就要根据实际带宽适当降低。
这里有个容易被忽略的点:码率不是越高越好。超过某个阈值后,画质提升微乎其微,但网络压力陡增,反而容易卡顿。我一般建议从 20Mbps 起步,逐步往上加,找到画质和稳定性的平衡点。
| 分辨率 | 帧率 | 推荐码率 | 编码器建议 |
|---|---|---|---|
| 1080P | 60 | 20-30Mbps | 任意硬件编码 |
| 1440P | 60 | 30-50Mbps | NVENC/AMF |
| 1440P | 120 | 50-70Mbps | NVENC |
| 4K | 60 | 60-100Mbps | NVENC/AMF |
4.3 那些影响手感的高级选项
Sunshine 里还有几个高级选项,调好了手感提升明显。第一个是 "Video Frame Buffer",这个决定编码缓冲的帧数,设成 1 能降低延迟但可能增加卡顿,设成 2 或 3 更稳。我一般设 1,因为局域网延迟本来就低。
第二个是 "FEC"(前向纠错),这个在无线环境下有用,能抵抗丢包,但会增加带宽开销。有线环境可以关掉。
第三个是 "YUV 4:4:4" 色彩采样,开启后色彩更准,但需要接收端支持,而且码率会上升。玩色彩丰富的游戏可以开,普通游戏没必要。
5. Moonlight 客户端的调优与常见问题
5.1 客户端画质设置的正确姿势
Moonlight 端的设置和 Sunshine 端是联动的,但有些参数只在客户端生效。打开 Moonlight 设置,分辨率、帧率、码率这三项要和 Sunshine 端匹配,否则会出现拉伸或者黑边。
"Video Bitrate" 这一项,如果你在 Sunshine 端已经限制了码率,客户端这里设成和它一致就行。如果客户端设得比服务端高,实际还是按服务端来。
"Display Mode" 建议选 "Fullscreen",窗口模式会有额外的合成开销。"VSync" 建议开启,能避免画面撕裂,代价是增加一点点延迟,但现代设备上几乎感觉不到。
5.2 手柄与键鼠的映射问题
Moonlight 对 Xbox 手柄的支持是最好的,插上就能用。PS 手柄需要额外配置,Windows 端可以用 DS4Windows 之类的工具模拟成 Xbox 手柄。Switch Pro 手柄也能用,但震动支持不完善。
键鼠方面,大部分游戏直接映射就行,但有些游戏会检测到是远程输入,导致鼠标加速异常。解决办法是在游戏里关闭鼠标加速,或者在 Moonlight 里调整鼠标模式。
有个冷门技巧:Moonlight 支持把接收端的触摸屏模拟成鼠标,平板上玩一些策略游戏很舒服。在设置里开启 "Touchscreen Mouse" 就行。
5.3 搜不到主机怎么办
这是新手最常遇到的问题。排查顺序是这样的:先确认 Sunshine 服务在运行,托盘图标是绿色的;然后确认主机和接收端在同一网段,IP 地址前三段一致;再检查防火墙,临时关掉防火墙测试一下,如果能搜到就是防火墙的问题;最后检查路由器是否开启了 AP 隔离,这个功能会阻止局域网设备互相通信,必须关掉。
如果以上都排除了还搜不到,可以手动添加主机 IP。在 Moonlight 里选 "Add PC Manually",输入主机的局域网 IP,比如 192.168.1.100。手动添加能绕过自动发现的问题。
6. Ubuntu 下自启与原生客户端编译的实战记录
6.1 Sunshine 在 Ubuntu 上的开机自启配置
Ubuntu 用户装完 Sunshine 后,默认可能不会开机自启,需要手动配置 systemd 服务。Sunshine 官方提供了服务文件,一般在安装目录里能找到。把它复制到/etc/systemd/system/下,然后执行:
sudo systemctl daemon-reload sudo systemctl enable sunshine sudo systemctl start sunshine这样 Sunshine 就会随系统启动。但有个坑:Sunshine 需要访问显卡和输入设备,如果以普通用户运行可能权限不足。解决办法是在服务文件里指定 User 和 Group,或者把用户加入 video、input 组。
sudo usermod -aG video,input $USER改完记得重新登录生效。
6.2 Moonlight Qt 原生客户端的编译安装
Linux 上的 Moonlight 客户端有几种,Qt 版本是功能最全的。很多发行版的仓库里版本比较老,想要最新功能就得自己编译。编译流程大致是这样:
先装依赖,Ubuntu 下:
sudo apt install cmake build-essential libsdl2-dev libssl-dev \ libavcodec-dev libavutil-dev libavformat-dev qtbase5-dev \ qtdeclarative5-dev qtquickcontrols2-5-dev qml-module-qtquick2 \ qml-module-qtquick-controls2 qml-module-qtquick-layouts \ qml-module-qtquick-window2 qml-module-qtgraphicaleffects然后拉源码、编译:
git clone https://github.com/moonlight-stream/moonlight-qt.git cd moonlight-qt git submodule update --init --recursive mkdir build && cd build cmake .. make -j$(nproc) sudo make install编译过程中最常见的报错是依赖缺失,尤其是 Qt 的 QML 模块。如果 cmake 阶段报找不到某个 Qt 组件,就回去装对应的 dev 包。另一个坑是 submodule 没更新,导致编译时找不到第三方库,记得执行git submodule update --init --recursive。
编译完成后,直接运行moonlight就能启动。如果提示找不到库,可能需要执行sudo ldconfig刷新库缓存。
6.3 自托管场景下的其他玩法延伸
既然主机已经 24 小时开着跑 Sunshine,其实还能顺便干点别的。比如搭个自托管的写作环境,用 Docker 跑一个笔记服务,配合 WebDAV 同步,随时随地都能写东西。我自己的做法是在同一台主机上跑一个轻量的 Markdown 编辑器服务,通过浏览器访问,和串流互不干扰。
资源分配上要注意,串流时编码会占用显卡,写作服务基本不吃显卡,所以两者共存没问题。但如果你的主机内存紧张,就要留意别让后台服务把内存吃满,影响游戏。
7. 驱动更新后串流失效的排查思路
7.1 为什么显卡驱动更新会导致串流出问题
这是很多人遇到过的怪事:显卡驱动一更新,Moonlight 就连不上了,或者连上后黑屏。根本原因是 Sunshine 依赖显卡的编码接口,驱动更新可能改变了接口行为,或者 Sunshine 的编码器初始化失败。
NVIDIA 用户尤其容易遇到这个问题,因为 NVIDIA 的驱动更新比较频繁,而且 GameStream 被砍之后,NVENC 的某些接口行为有变化。遇到这种情况,第一步是重启 Sunshine 服务,让它重新初始化编码器。如果重启没用,就重启主机。
7.2 逐步排查的完整链路
我的排查顺序是这样的:先看 Sunshine 的日志,在 Web 界面的 Troubleshooting 标签里能看到实时日志,重点看编码器初始化那几行有没有报错;然后确认 Moonlight 端能不能搜到主机,能搜到说明网络没问题,问题在编码或配对;接着尝试降低编码参数,比如把 HEVC 换成 H.264,把分辨率降到 1080P,看能不能恢复;最后检查驱动版本,如果是最新驱动出的问题,可以回退到上一个稳定版本。
有个经验:NVIDIA 驱动不要盲目追新,尤其是 Studio 驱动和 Game Ready 驱动,串流场景下 Studio 驱动往往更稳。如果你主要用串流,可以优先装 Studio 驱动。
7.3 编码器被占用的情况
还有一种情况是编码器被其他程序占用了。比如你同时开着 OBS 在录制,OBS 也用了 NVENC,两个程序抢编码器就会出问题。解决办法是串流时关掉其他占用编码器的程序,或者在 Sunshine 里换一个编码器。
Windows 上可以用任务管理器看 GPU 的编码占用,如果编码单元已经满载,串流肯定卡。这种情况要么降低串流参数,要么关掉其他编码任务。
8. 我踩过的那些坑和最后的经验总结
第一个大坑是无线网络下的延迟波动。我一开始图省事,主机接网线,接收端用 WiFi,结果玩动作游戏时偶尔会卡一下。后来把接收端也接了网线,问题彻底消失。所以我的建议是:能接网线就接网线,这是提升串流体验性价比最高的一步。
第二个坑是 HDR 串流。Sunshine 和 Moonlight 都支持 HDR,但配置起来比较麻烦,需要主机、接收端、游戏三方都支持,而且色彩映射容易出问题。我折腾了几次之后放弃了,SDR 下画质已经足够好,HDR 带来的提升不值得那些折腾。
第三个坑是音频延迟。默认设置下音频和画面可能有几十毫秒的不同步,在 Sunshine 的音频设置里可以调整缓冲大小,调小能降低延迟,但太小会爆音。我一般设成 48ms 左右,平衡得比较好。
第四个坑是主机休眠。如果主机设置了自动休眠,串流到一半主机会睡过去,连接就断了。解决办法是在电源设置里把休眠关掉,或者用 Sunshine 的 "Prevent display sleep" 选项。
最后分享一个实用技巧:Sunshine 支持多用户配置,你可以为不同的接收端设置不同的应用列表和编码参数。比如客厅电视用 4K 高码率,手机用 1080P 低码率,各取所需。在 Web 界面的 Applications 里可以针对每个应用单独配置,灵活度很高。
这套方案我从零搭到稳定运行,前后花了大概一个周末,但真正调优到满意用了几周。现在它已经成了我日常玩游戏的主力方式,主机在书房,人在客厅,体验和本地几乎没差别。如果你也在找一套靠谱的自托管串流方案,Sunshine 加 Moonlight 值得你花时间折腾。