Sunshine 自托管游戏串流:从安装到首帧画面的 15 分钟完整流程
【免费下载链接】SunshineSelf-hosted game stream host for Moonlight.项目地址: https://gitcode.com/GitHub_Trending/su/Sunshine
Sunshine 是一个面向 Moonlight 的自托管游戏串流服务端:主机端负责抓屏和硬件编码,把视频流经局域网推到任意客户端设备。从装好软件到看见第一帧画面,完整流程大约 15 分钟,全程只需要你操作主机一侧。
先搞清楚它是什么
- Sunshine 只装在主机上,接收端另需安装 Moonlight 客户端
- 它不是云串流服务:编码跑在你自己的机器上,画质上限和隐私都留在局域网
- 开源免费、自托管,无账号、无订阅
- 支持 Windows、Linux、FreeBSD 主机;macOS 为实验性且不支持手柄模拟
- 编码器按顺序自动选择:NVENC、QuickSync、AMF、VAAPI、Vulkan Video、VideoToolbox,最后是软编码兜底
动手前,先核对这 5 件事
- 两台设备在同一局域网,网络稳定;将来要走出局域网连,路由器需支持 UPNP
- macOS 主机首次启动会要屏幕录制和麦克风授权,必须允许,否则采集不到画面
- macOS 主机没有手柄模拟,要用控制器就选 Windows 或 Linux 主机
- Linux 上运行 Sunshine 的用户要在
input组里,否则连接后键鼠、手柄注入不生效 - 同一时间全局只有一条串流,谁在连谁在用,多人共用要自己排时间
第一帧画面:4 步走完
📌 1. 装主机端程序
Windows 从 Release 页取Sunshine-Windows-AMD64-installer.msi双击安装,防火墙规则由安装器写入;Linux 按发行版选 deb、copr 或 pacman 包;macOS 把 DMG 里的Sunshine.app拖进 Applications。
检查点:安装程序正常退出、无报错弹窗。装的是 Flatpak 的话,再补一条输入依赖,缺了它键鼠注入不完整:
flatpak run --command=additional-install.sh dev.lizardbyte.app.Sunshine📌 2. 把服务跑起来
Windows 的 MSI 已把 Sunshine 注册成系统服务并开机自启,这步直接跳过。Linux 在终端执行:
systemctl --user --now enable app-dev.lizardbyte.app.Sunshine检查点:systemctl --user status app-dev.lizardbyte.app.Sunshine显示 running,才算服务活着。
📌 3. 建管理员账号
浏览器打开https://localhost:47990。页面提示"不安全"来自自签名证书,直接忽略。首次进入会让你设置管理员用户名和密码,写下来,后面配对全靠它。
检查点:用刚设的账号能登录进主页。
📌 4. Moonlight 怎么配对
客户端打开 Moonlight,它会自动扫到主机。首次连接弹出一个四位 PIN:回到 Web UI 导航栏的 PIN 页输入,并给设备起个名字。
检查点:Moonlight 里点 "Desktop" 条目,客户端出现主机桌面实时画面,键鼠有响应、声音出来。四项全过,链路才算通。
出画面之后做什么
怎么加游戏
场景:你不想只串整个桌面,而是直接拉起某个游戏。
操作:Applications 页新建条目。像 Steam 这种启动命令会立即退出的进程,要勾上detached(脱离式启动),否则流刚开就断;Flatpak 环境里的宿主程序,命令加flatpak-spawn --host前缀;路径写$(HOME)这类环境变量,别写死。
验证:Moonlight 点新条目,目标程序直接拉起,启动后 3 秒内不断流。
码率到底要不要改
场景:网络顶不住,或者你想给主机端带宽封顶。
操作:max_bitrate默认0,含义是码率完全按 Moonlight 的请求走;只有封顶时才填具体数,比如5000(Kbps)。
验证:改完重开一次串流,画面帧率稳定,没有新增卡顿。
编码器要不要动
场景:拿不准用哪个编码器。
操作:encoder留空就是自动选,日常够用;手动填nvenc、amdvce、vaapi、vulkan、software是排障手段。nvenc_preset从 1(最快)到 7(压缩率最高),默认1,只有网络顶不住时才调大。
验证:改完后 Web UI 的 Troubleshooting 页没有编码相关报错。
一家人共用怎么做
场景:多个成员轮流用同一台主机。
操作:每人在自己的 Moonlight 设备上独立配对,各起各的设备名,Web UI 里记录。
验证:A 在串时 B 无法启动,A 退出后 B 立刻能串。
卡壳了先查这张表
| 症状 | 最可能原因 | 一条修复动作 |
|---|---|---|
https://localhost:47990打不开 | 防火墙拦了 47990 端口 | 临时关防火墙验证,通了就补一条放行 47990 的规则 |
| Moonlight 找不到主机 | 不同网段,或服务没在跑 | Linux 执行systemctl --user status app-dev.lizardbyte.app.Sunshine看是否 running |
| 卡顿、掉帧 | 网络丢包,不是 Sunshine 的锅 | 主机起iperf3 -s,客户端跑下面的 UDP 测速,目标丢包低于 5%、抖动低于 1ms |
| 忘了管理员密码 | 凭据丢失 | 执行sunshine --creds {新用户名} {新密码}直接重置 |
| Linux 键鼠、手柄不响应 | 运行用户不在 input 组 | 把该用户加入input组,注销后重新登录 |
客户端测速命令(<主机IP>换成实际地址):
iperf3 -c <主机IP> -t 60 -u -R -b 50M丢包高的典型诱因是两头速度不匹配,比如 2.5G 有线对 WiFi 客户端:网卡降一档速率或改回有线,通常立刻见效。日志位置:Windows 在%ProgramFiles%\Sunshine\config\sunshine.log,Linux/macOS/FreeBSD 在~/.config/sunshine/sunshine.log。
三句带走的话
- 动手调画质前先跑 iPerf3,网络稳定性比带宽峰值更决定体验
- 编码器拿不准就留空,
max_bitrate为 0 代表码率听客户端的,封顶才去碰它 - 要走出局域网,得把
upnp改成enabled,默认是disabled
下一步动作:现在拿第二台设备配一次对,再往应用列表加一条真实游戏,把"配对 → 启动 → 串流 → 退出"完整走一遍。
疑难杂症索引见 docs/troubleshooting.md,各平台的采集与编码实现在 src/platform/ 目录。
【免费下载链接】SunshineSelf-hosted game stream host for Moonlight.项目地址: https://gitcode.com/GitHub_Trending/su/Sunshine
创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考