Sunshine 游戏串流服务器完整指南:从零部署、上手配对到性能调优与疑难排查
【免费下载链接】SunshineSelf-hosted game stream host for Moonlight.项目地址: https://gitcode.com/GitHub_Trending/su/Sunshine
想让客厅电视、平板或手机直接玩主机级的 PC 游戏?自托管串流是最省事的路线:一台闲置的游戏电脑装上 Sunshine 游戏串流服务器,再配一个 Moonlight 客户端(接收串流的免费播放端),画面就"搬"过去了。本文按真实使用顺序带你走完全程——先部署,再完成首次配对,然后是日常调优,最后讲怎么快速定位疑难问题,全程只需几行命令就能完成首次上线。
游戏串流到底在传什么?先弄清 Sunshine 的分工
很多人把"串流"理解成"传视频",其实它是一次分工明确的协作:
- Sunshine(服务端):跑在你那台性能最好的游戏电脑上,负责截屏、硬件编码、把输入信号"注回"游戏;
- Moonlight(客户端):装在电视、平板、手机、笔记本等任何设备上,负责解码播放并转发你的操作。
两者通过局域网(有条件的话走宽带)通信。好处是编码压力落在显卡上,CPU 占用很低,延迟才能压得住;坏处是它对网络稳定性的要求比普通视频高得多,这一点后面调优时会展开。
先花一分钟确认你的机器够不够格(数据来自 README.md,完整表格以仓库为准):
| 部件 | 最低要求 | 想跑 4K 的建议 |
|---|---|---|
| 显卡 | AMD 带 VCE 1.0+ 编码单元 / Intel HD 4000+ / NVIDIA 开 NVENC 的卡 | AMD VCE 3.1+、Intel HD 510+、NVIDIA RTX 2000 系起 |
| CPU | i3 或 Ryzen 3 级别 | i5 / Ryzen 5 级别 |
| 内存 | 4GB 起 | 8GB 更从容 |
| 网络 | 主机与客户端都尽量 5GHz Wi-Fi(802.11ac) | 两端都走 CAT5e 以上有线 |
操作系统方面,Windows 11+、较新的 Debian/Fedora/Ubuntu、macOS 14.2+ 和 FreeBSD 都在支持范围内,功能支持矩阵(比如各平台的编码器、截屏方式)可以对照 README.md 里的表格看。
Windows / Linux / Docker 三种落地姿势
安装没有"唯一正解",按你的系统选一条路走即可。核心原则是:能用系统包管理器装的,就别用便携包——便携包(AppImage、Flatpak)拿不到 KMS 截屏这类需要较高权限的能力。
| 你的环境 | 推荐做法 | 要点 |
|---|---|---|
| Windows | 官方 MSI 安装包,或winget install LizardByte.Sunshine | 安装器会顺手配好防火墙规则并注册为系统服务 |
| Linux(Debian/Ubuntu 等) | 添加官方仓库后sudo apt install sunshine | 发行版原生包功能最全 |
| Linux(Fedora 等 RPM 系) | 添加官方仓库后sudo dnf install Sunshine | 包名大小写敏感,注意是Sunshine |
| Linux(无 root / 尝鲜) | AppImage 或 Flatpak | 功能有缩水,KMS 截屏不可用,仅作兜底 |
| macOS | Homebrew 或官方 DMG | 属实验性支持,手柄暂不可用 |
| Docker | 官方镜像 + 挂载配置目录 | 官方明确提示:多数人不必走这条路 |
几个高频场景的具体命令:
# Linux 上注册为开机自启的 systemd 用户服务 systemctl --user --now enable app-dev.lizardbyte.app.Sunshine # Docker 方式起一个容器(--network=host 让端口直通) docker run -d --name=sunshine --network=host \ -v /path/to/config:/config \ lizardbyte/sunshine:latestWindows 上装完还有一步容易漏:虚拟输入依赖 Virtual HID Driver(让 Sunshine 能在主机上"伪造"键盘、鼠标和手柄),需要单独安装并在 Web UI 里激活机器许可。装完驱动建议重启一次电脑。
如果你是开发者想通读实现,也可以把源码拉下来对照着看:
git clone https://gitcode.com/GitHub_Trending/su/Sunshine第一次进 Web UI:设好账号并记住它
服务跑起来后,浏览器访问https://localhost:47990(localhost可换成主机内网 IP)。两个小提醒:
- 浏览器会警告"连接不安全",这是因为 Web UI 用的是自签名证书,属正常现象,直接继续访问即可;
- 首次进入要求你创建 Web UI 的用户名和密码,且只显示这一次。丢了也别慌,忘了可以用命令行重置(命令见故障排查一节)。
登录后建议顺手做两件事:在导航栏切一下主题(深色/浅色),以及翻到Featured Apps页——Moonlight 各平台客户端(PC、Android、嵌入式设备)的获取入口都集中在这里,不用自己满世界找。
客户端配对:把电视或平板接进来
配对的本质是"让 Moonlight 知道这台 Sunshine 存在,并验证身份"。完整流程:
- 添加串流源:打开 Moonlight 客户端,若自动发现不到主机,就手动输入 Sunshine 主机的局域网 IP;
- 触发 PIN 验证:Moonlight 请求配对时,回到 Sunshine Web UI,点导航栏的PIN页签;
- 输入 PIN:把 Web UI 里显示的 PIN 码输进 Moonlight,给设备起个名字,看到成功提示即完成;
- 开始串流:在 Moonlight 的应用列表里挑一个,流就起来了。
应用从哪来?在Applications页签点 "Add New" 即可。内置的 Desktop 项代表"直接串整个桌面",Steam 大图标模式开箱即用;其余游戏则填启动命令(注意要能独立于终端运行的命令,详见下文"两个容易踩的坑")。应用列表只在客户端重启时刷新,改完记得重连。
两个容易踩的坑
- 应用退出 = 串流结束:Sunshine 会一直盯住它启动的进程,进程没了流就断。像 Steam 这类常驻程序要用
detached方式启动,否则"启动即退出"。 - 多开会互踢:同一个 Sunshine 上启动新应用时,旧应用会被强制结束。想边串流边干别的?用 Desktop 项串桌面更灵活。
性能调优:延迟、画质、帧率怎么平衡
调优不是把所有参数拉满,而是按"网络 > 编码器 > 分辨率/码率 > 显卡辅助设置"的优先级逐项收。
1. 网络稳定性优先于峰值带宽
实时串流最敏感的不是带宽大小,而是抖动和丢包。官方推荐用 iperf3 做 60 秒 UDP 实测(主机端iperf3 -s,客户端iperf3 -c 主机IP -t 60 -u -R -b 50M),丢包最好压到 5% 以下、抖动低于 1ms。
还有一个反直觉的坑:主机网卡远快于客户端(比如 2.5G 对 1G)时,中间设备缓冲溢出反而造成大量丢包。最简单的缓解办法是把主机网卡限速降一级。
2. 编码器:能硬件就别软件
| 编码器 | 适用硬件 | 一句话点评 |
|---|---|---|
| NVENC | NVIDIA | 综合表现最稳,Windows/Linux 均可用 |
| AMF | AMD(Windows) | 搭配 Enhanced Sync 还能再省一帧延迟 |
| VAAPI / QuickSync | AMD / Intel | Linux 走 VAAPI,Windows 走 QuickSync |
| 软件编码 (x264) | 任意 | 兼容性兜底,CPU 开销大,仅备用 |
配置入口在 Web UI 的Configuration页,几十个选项不用一个个翻——顶部搜索框输关键词即可直达:
3. 码率、分辨率、帧率:三者的取舍
- 码率:1080p60 给 20Mbps 左右起步,4K 需要 60Mbps 以上,但前提是网络接得住,接不住就先降码率;
- 分辨率与帧率:客户端分辨率和主机输出保持一致,减少缩放损耗;60fps 是多数场景的平衡点,显示器和流媒体链路都跟得上再考虑更高;
- 音频缓冲:声音延迟大时,把音频缓冲调到最小值试试,代价是网络波动时更容易爆音。
4. 显卡辅助设置(各花入各眼)
NVIDIA 用户可在控制面板里关掉vsync:fast缓解卡顿;AMD 用户可打开 Enhanced Sync 换取更低延迟。这些细节连同更多选项说明,见官方 docs/performance_tuning.md 与 docs/configuration.md。
故障排查:先走这张排查图
遇到问题先别急着重装,按现象分流,八成能自己定位:
Web UI 的Troubleshooting页签内置了日志查看器,警告和错误都能点开看详情,这是定位问题的第一现场:
常见症状速查(完整版见 docs/troubleshooting.md):
| 症状 | 高频原因 | 对应动作 |
|---|---|---|
| 忘了 Web UI 密码 | 凭证只显示一次 | 命令行重置:sunshine --creds 新用户名 新密码 |
| 客户端连不上 | 防火墙挡了 47990 | 放行该端口;Windows 用官方安装包的会自动配好 |
| Linux KMS 截屏黑屏(N 卡) | 内核未启用 modeset | 内核参数加nvidia_drm.modeset=1后重启 |
| Linux 输入完全没反应 | 用户无输入设备权限 | sudo usermod -aG input $USER,重新登录生效 |
| Windows 检测不到手柄 | 缺虚拟输入驱动 | 安装 Virtual HID Driver,Web UI 里激活许可 |
| 编码器报错 "not implemented" | Mesa 默认禁用硬件编码 | 按官方文档重编 Mesa 并开启h264enc,h265enc |
| 主机远快于客户端时大量丢包 | 中间缓冲溢出 | 给主机网卡限速降一级,或升级 0.23.1+ 的新网络栈 |
排查顺序建议:现象 → 日志 → 上表对号入座 → 改完立刻重连验证。一次只改一个变量,不然出了问题也不知道是谁的功劳。
进阶玩法:这些功能藏在细节里
基础跑通之后,几个"知道就赚"的设置:
- 切换串流显示器:
Ctrl+Alt+Shift+F1到F12可在多个显示器间切换串流目标,双屏党必备; - 隐藏/显示光标:
Ctrl+Alt+Shift+N,串桌面办公时很有用; - HDR 串流:Windows 主机上正式可用,Linux 上实验性支持(需要 KMS 截屏 + 支持 HDR 的桌面合成器)。注意客户端那边也要开 HDR 选项,否则画面会过曝;
- 多配置文件:Web UI 的 Config Files 页签可以保存多套配置按场景切换,比如"4K 电影模式"和"1080p 竞技模式";
- 命令行参数:
sunshine --help可查看全部启动参数,比如指定配置文件路径sunshine /path/to/sunshine.conf。
想更深入理解截屏、编码、虚拟输入是怎么串起来的,可以直接翻源码:核心逻辑集中在 src/(如video.cpp负责编码管线、input.cpp负责输入注入),Linux 各截屏后端的实现在 src/platform/linux/,单元测试在 tests/ 里。
上线前检查表
第一次正式串流前,按这张表过一遍,比事后救火快得多:
- 主机与客户端在同一网段,且优先有线连接
- Web UI 能正常打开,账号密码已抄录到安全的地方
- 至少一个 Moonlight 设备完成 PIN 配对
- Applications 里至少有一个能跑的应用(先试 Desktop 最稳)
- 编码器选的是硬件方案,而非软件编码
- 码率与网络带宽匹配(iperf3 实测丢包 < 5%、抖动 < 1ms)
- Linux 用户已在
input组;Windows 用户已装并激活 Virtual HID Driver - Troubleshooting 页签里没有持续刷新的红色错误
接下来可以做什么
- 把 docs/configuration.md 里你关心的选项逐项过一遍,搜索框能帮你省时间;
- 关注 docs/changelog.md,网络栈和 Linux 截屏相关的能力迭代很快;
- 遇到本文没覆盖的怪问题,带着 Troubleshooting 页里导出的日志去社区提问,效率会高很多。
串流这件事,网络稳、编码硬、参数别乱拉,就成功了一大半。剩下的,交给你的游戏库吧。
【免费下载链接】SunshineSelf-hosted game stream host for Moonlight.项目地址: https://gitcode.com/GitHub_Trending/su/Sunshine
创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考