Sunshine 完全指南:搭建游戏串流主机并与 Moonlight 完成联动
【免费下载链接】SunshineSelf-hosted game stream host for Moonlight.项目地址: https://gitcode.com/GitHub_Trending/su/Sunshine
Sunshine 是一款免费开源的游戏串流主机(self-hosted game stream host)。它装在你自己的游戏电脑上,负责屏幕采集、硬件编码和输入转发;你则通过 Moonlight 客户端在手机、平板、电视或另一台电脑上观看和操作。本文不堆砌参数,只讲清楚一件事:从安装到第一次串流通路,中间每一步会发生什么、容易在哪里卡住。
先分清 Sunshine 和 Moonlight 的分工
串流链路有两端,很多人一开始就搞混了:
- Sunshine(主机端):运行在游戏所在的那台 PC 上,把画面抓下来、编码成视频流,再把你在客户端上的键盘、鼠标、手柄操作回传进去。
- Moonlight(客户端):运行在你观看的任意设备上,负责解码播放,并提供操作入口。
理解这个分工后,Sunshine 的核心工作就三块:
- 画面采集——用各平台的原生方式抓屏(Windows 用 DXGI/WGC,Linux 用 KMS/DRM、Wayland、XDG Portal 等,macOS 用 ScreenCaptureKit)。
- 视频编码——优先走 GPU 硬件编码(NVIDIA 的 NVENC、Intel 的 QuickSync、AMD 的 VAAPI/AMF、Apple 的 VideoToolbox),没有合适的硬件时才退回软件编码。
- 输入转发——把客户端的操作变成主机能识别的输入,包括模拟 Xbox、DualShock、Switch Pro 等虚拟手柄。
整个安装和配置过程都在浏览器里完成,不需要手写配置文件。
按系统选安装方式,避开两个坑
不同平台推荐的安装路径不一样,先对号入座:
- Windows:用官方 MSI 安装器,默认以服务形式在后台运行。注意:更换安装器类型前,先手动卸载旧版本。
- Linux:优先用你发行版的官方包(DEB、RPM、Arch 包都有)。官方包内置了 NVIDIA 编码所需的 CUDA 依赖,省去手动处理。
- macOS:目前仍是实验性支持,手柄功能不可用,先心里有数。
- FreeBSD:官方提供 pkg 安装包,但采集只有 X11 和 Wayland,手柄功能也有精简。
两个容易踩的坑,官方文档里是明确写了警告的:
- AppImage 不支持 KMS 采集。如果你的发行版有现成软件包,别用 AppImage,除非只是临时测试。
- Docker 镜像对大多数用户不推荐,官方文档原话如此——容器内的屏幕采集和输入权限会多出一层麻烦,不是好选择。
完整的分平台安装步骤在 docs/getting_started.md。如果你还想读源码,仓库地址是 https://gitcode.com/GitHub_Trending/su/Sunshine ,核心逻辑集中在 src/ 目录。
装完之后,下一步就是在浏览器里打开它的 Web UI。
首次启动:打开 Web UI 并设置凭据
启动 Sunshine 后,在主机浏览器访问https://localhost:47990(也可以把 localhost 换成内网 IP,用其他设备配置)。两件事要有预期:
- 浏览器会提示"网站不安全"。这是自签名证书导致的,属正常现象,继续访问即可。
- 首次进入时设置用户名和密码。现在就把它们记下来——忘了的话后面还有补救方法,但没必要给自己找麻烦。
登录后可以先花 30 秒看看界面:顶部导航栏有主题切换下拉菜单,整个 Web UI 支持多套主题,随时可换。
界面本身很直观,真正的工作在接下来三步:加应用、配对客户端、调配置。先从配对说起,因为它最接近"跑通"。
5分钟完成首次 Moonlight 配对
配对走的是 PIN 码流程,实际体验比想象中快:
- 在 Moonlight 客户端里找到 Sunshine 这台主机。搜不到就手动按 IP 添加。
- Moonlight 会提示你输入 PIN。此时回到 Sunshine 的 Web UI,点顶部导航栏的PIN入口,把 PIN 码填进去,给设备起个名字,回车确认。
- 看到成功提示后,回到 Moonlight 选一个应用,串流就开始了。
客户端去哪里下?不用自己满世界找——Web UI 的Featured Apps页签收录了各平台的 Moonlight 客户端入口和配套工具,直接在那边取就行。
配对成功只代表通路打通。想让 Moonlight 里有东西可点,得先给 Sunshine 添加应用。
整理游戏库:给 Sunshine 添加应用
应用管理在 Web UI 的应用页签,本质是在给 Sunshine 一份"启动清单"。加哪几类最有代表性:
- Desktop(桌面):不加任何命令,流出来就是你的整个桌面。适合远程管理机器或做桌面串流,也是新手验证链路的最快方式。
- Steam:注意要用分离(detached)方式启动 Steam 大画面模式。原因是 Steam 启动时会先跑一个自更新进程然后退出原进程,用普通命令方式跑,Sunshine 会认为应用立即退出,串流秒断。
- 普通游戏/程序:填可执行文件路径,按需指定工作目录。没填工作目录时,默认取程序所在目录。
几条运行规则值得记住,它们解释了很多"为什么我的应用启动就断流":
- 串流中再次启动同名应用,旧进程会被终止。
- 配置了 prep 命令的,prep 失败则整个启动中止。
- 应用进程结束时,串流随之结束。
各平台(含 macOS、Flatpak)的应用配置实例,包括 URI 启动、环境变量用法,都整理在 docs/app_examples.md。
游戏库就位后,剩下的体验差距主要来自一个地方:你的画面用什么方式采集、用什么方式编码。
编码与采集:平台差异才是体验的分水岭
结论先说:能用硬件编码就别用软件编码。软件编码全平台可用、兼容性最好,但延迟和 CPU 占用都更高,只建议当作兜底。
各编码 API 的平台分布大致如下:
| 编码 API | 适用 GPU | 平台 |
|---|---|---|
| NVENC | NVIDIA | Linux / Windows |
| QuickSync | Intel(Skylake 及以后) | Windows |
| AMF | AMD | Windows |
| VAAPI | AMD / Intel / NVIDIA | Linux / FreeBSD |
| VideoToolbox | Apple / Intel | macOS |
| Vulkan Video | AMD / Intel 等 | Linux |
| 软件编码 | 任意 | 全平台 |
真正的复杂性在 Linux:采集方式和编码方式之间存在配对约束。官方 README 里有一张对应矩阵,要点是——KMS/DRM、XDG Portal、KWin 采集配合 VAAPI/Vulkan Video/NVENC 都比较自由;而NvFBC(X11 + CUDA)采集只能配 NVENC 或软件编码。也就是说,X11 + NVIDIA 老方案并不是万能组合,Wayland 或 XDG Portal 往往是更顺的选择。
Windows 侧相对省心,但有两个注意点:DXGI 桌面复制只能采集负责显示的 GPU,如果你想在 eGPU 上采集编码,需要接上显示设备让该 GPU 接管输出;macOS 则首次运行时会弹屏录和麦克风权限,授予后若想让 Sunshine 直接取系统声音,把 Audio Sink 留空即可。
排错时如果画面出不来,九成问题出在"采集 + 编码"这对组合上,而不是网络。
出问题时先排查这三处
Web UI 的 Troubleshooting 页签能翻到全部运行日志,逐条看警告和错误是最直接的定位手段。但在翻日志之前,按现象先做这几步,能省下大量时间:
打不开 Web UI?先查防火墙——47990 端口没放行的情况下,局域网内的其他设备连不上。这是"配对了半天客户端找不到主机"的最常见原因。
忘了 Web UI 的账号密码?不用重装。以命令行方式运行一次:
sunshine --creds {新用户名} {新密码}这是官方排错文档给出的重置凭据方式,替换花括号内容即可(AppImage 用户把sunshine换成对应 AppImage 路径)。
画面卡、延迟高?官方文档对此的态度很明确:决定串流体验的不是裸带宽,而是链路稳定性——低延迟、低抖动、几乎无丢包。想量化验证,在主机上运行iperf3 -s开一个测试服务端,在客户端跑一条 60 秒的 UDP 测试就能看出抖动和丢包情况,比盯着带宽数字猜要靠谱得多。
输入没反应(鼠标/键盘/手柄)?Linux 上最常见的原因是运行 Sunshine 的用户不在input组里;Windows 上则确认是否装了 Virtual HID Driver——它是驱动级的输入方案,ViGEmBus 只算受限回退,仅支持 Xbox 360 和 DualShock 4。手柄"在 Steam 里能用、进游戏就不认"时,检查一下 Steam 的手柄支持设置,有时把主机的物理手柄暂时禁用、让 Sunshine 的虚拟手柄成为"第一个"手柄反而能解决。
更多场景(含 pfSense 防火墙规则、无头主机 SSH 启动等)见 docs/troubleshooting.md。
配置文件与几个值得记住的细节
配置全部在 Web UI 里改,顶部搜索栏可以直接搜任意选项——所有选项按 General、Input、Audio/Video 等分组,改完即生效,不用找文件。
几个实用细节:
- 配置文件是
sunshine.conf。不指定路径就用默认位置,文件不存在时会自动创建。想指定路径的话,启动时把目录作为参数传给 sunshine。 - 串流默认走 47989 端口,防火墙策略要覆盖到它,而不只是 Web UI 的 47990。
- 串流进行中有两个快捷键:
Ctrl+Alt+Shift+N显示/隐藏光标(远程桌面场景很实用),Ctrl+Alt+Shift+F1/F12切换串流显示器。 - 全部选项的说明在 docs/configuration.md,遇到某个选项不确定含义时查它比搜论坛快。
收尾:按顺序走一遍就能跑通
Sunshine 的门槛不在安装,而在"采集 + 编码 + 端口放行"这条主链路上任何一环没对齐。把顺序理顺,第一次跑通通常不超过半小时。接下来照做即可:
- 按系统选择官方包安装 Sunshine,启动后访问
https://localhost:47990并记下凭据。 - 在应用页签至少添加一个 Desktop 应用,作为链路验证的保底选项。
- 在 Featured Apps 页签下载对应平台的 Moonlight 客户端,完成 PIN 配对。
- 按显卡类型确认编码方式:NVIDIA 选 NVENC,Intel 核显选 QuickSync,AMD 在 Linux 上优先考虑 VAAPI。
- 串流卡顿或延迟异常时,用 iperf3 验证主机与客户端之间的链路抖动,再看 Troubleshooting 日志定位。
主链路通了之后,再去动分辨率、刷新率、音频这些调优项才有意义——顺序反了,你很难分清是配置问题还是环境问题。
【免费下载链接】SunshineSelf-hosted game stream host for Moonlight.项目地址: https://gitcode.com/GitHub_Trending/su/Sunshine
创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考