一夜打通 Sunshine 游戏串流:Moonlight 配对到出画面的全流程实操
【免费下载链接】SunshineSelf-hosted game stream host for Moonlight.项目地址: https://gitcode.com/GitHub_Trending/su/Sunshine
手机上播着主机屏幕里的 3A 大作,键盘鼠标手柄都能实时操作。Sunshine 是自托管的游戏串流服务端,和 Moonlight 客户端配对后,画面走网络,主机不用搬、HDMI 不用拉。读完你能独立做到四步:装好主机端、配对设备、加应用、串出第一帧。
先问自己三个问题
你主机的显卡能硬件编码吗?NVIDIA 走 NVENC、Intel 走 QuickSync、AMD 走 AMF,Linux 还有 VAAPI 和 Vulkan Video 可选,都不可用时用 CPU 软编码兜底。不用你挑,系统自动选第一个可用的编码器。
主机能一直开着吗?串流期间主机进程必须常驻。Windows 的 MSI 安装会注册成服务并开机自启,Linux 是用户级 systemd 服务,装完就在后台跑。做不到常开,这条链路就走不通。
数据会出你的局域网吗?没有账号、没有订阅、没有云端中继。局域网串流全在自己网段内,只有你手动启用upnp才会向公网转发端口,它默认是disabled。
五个节点把第一帧串出来
装主机端
Windows 去 Release 页下载Sunshine-Windows-AMD64-installer.msi双击安装,组件按需勾选,防火墙规则安装器自己写。Linux 按发行版选包:Debian/Ubuntu 配好 Cloudsmith 源后执行sudo apt install sunshine,Fedora 用sudo dnf install Sunshine。用 Flatpak 装的话,装完必须补跑一次flatpak run --command=additional-install.sh dev.lizardbyte.app.Sunshine同步输入依赖。macOS 把 DMG 里的Sunshine.app拖进 Applications,注意它是实验性的,手柄暂不支持。各平台细节见 docs/getting_started.md。
怎么算过关:安装走完无报错,终端执行sunshine --help能打出参数列表。
把服务拉起来
Linux 上执行:
systemctl --user start app-dev.lizardbyte.app.Sunshine想开机自启就改用systemctl --user --now enable app-dev.lizardbyte.app.Sunshine。Windows 装完即已在跑,macOS 直接启动Sunshine.app。
怎么算过关:systemctl --user status app-dev.lizardbyte.app.Sunshine显示 running;Windows 看托盘图标出现。
建管理账号
浏览器打开https://localhost:47990。浏览器提示"不安全"是正常的,自签名证书所致,点继续。首次进入会让你设管理员用户名和密码,记牢它,后面配对全靠它。
怎么算过关:看到欢迎页,能进各功能标签页。
加第一个应用
Applications 页默认自带一条 "Desktop",串整个桌面,不启动任何程序。要串游戏就新建:填应用路径、工作目录、启动参数,值里支持$(HOME)这类环境变量。三条容易踩的:
- 启动方式分
detached和普通命令。steam这类秒退进程选普通命令会立刻断流,得用detached。 - Flatpak 版应用命令加
flatpak-spawn --host前缀,否则沙箱里找不到宿主程序。 - 新串流会结束上一个正在跑的应用,同一时间只有一条串流。
怎么算过关:应用列表里出现新条目,Moonlight 端能看到它。
配对客户端,出第一帧
Moonlight 客户端会自动发现局域网里的 Sunshine。首次连接它会要一个四位 PIN:登录 Web UI,点顶部导航的 PIN 页,输入 PIN 回车,给设备起个名,出现成功提示就跑通了。回 Moonlight 选刚加的应用点开始。
怎么算过关:客户端出画面、有声音,手柄键盘的操作在主机上实时生效。
参数只挑三个讲
配置页顶部有搜索框,几百个设置项输关键词直达,不用一页页翻。
encoder:默认自动,用第一个可用的编码器;可选项是nvenc、quicksync、amdvce、vaapi、vulkan(仅 Linux)、software(CPU)。什么情况下动它:想锁死某条通路,或者排障时怀疑选错了编码器。拿不准就留空。
max_bitrate:单位 Kbps,默认0。0的含义是码率完全听 Moonlight 端请求的,主机端不设上限。什么情况下动它:你想给主机端封顶带宽时,比如改成5000。
upnp:默认disabled,不会向公网转发任何端口。什么情况下动它:只有需要跨网络串流时才设enabled,它会自动转发 47990 等端口;一直待在局域网就别碰。
按你的情况挑一条路
手机当瘦终端(主机留在客厅,出门在外想串回家那台):客户端分辨率按自身屏幕设就行,encoder保持自动。要跨网串回主机,把upnp改成enabled;只在同一 WiFi 下用就别动它。
电视当第二屏(放本地片源、看网页、跑桌面应用):直接串自带的 "Desktop" 应用,max_bitrate保持默认0,静态画面占的带宽很小,不用设上限。
一家人共用一台主机(每个成员各自一台 Moonlight 设备):每台设备独立走一遍 PIN 配对,各起各的设备名,互不影响。注意同一时间只能有一条串流,第二个人连上来会掐掉第一个人的应用。
故障速查
| 症状 | 处置动作 |
|---|---|
https://localhost:47990打不开 | 先确认服务在跑(systemctl --user status app-dev.lizardbyte.app.Sunshine);Windows 上确认安装时防火墙规则已写入,临时关防火墙验证一次,通了就回头放行 47990 |
| 客户端发现不了主机 | 确认两台同网段;systemctl --user restart app-dev.lizardbyte.app.Sunshine重启服务,还不行重启路由器 |
| 串流卡顿掉帧 | 跑 iPerf3 六十秒 UDP 反向体检:服务端iperf3 -s,客户端iperf3 -c {主机IP} -t 60 -u -R -b 50M;丢包超 5% 或抖动超 1ms 就查网络,别动 Sunshine |
| 忘了 Web UI 密码 | sunshine --creds {new-username} {new-password}重置凭据,不用重装 |
| 串流时要静音主机扬声器 | 别改audio_sink(默认选系统默认音频设备),在virtual_sink填虚拟设备,如Steam Streaming Speakers |
还搞不定就翻日志:Web UI 的 Troubleshooting 页内置日志和告警,每条都能点开看线索;日志文件在 Windows 位于%ProgramFiles%\Sunshine\config\sunshine.log,Linux / macOS / FreeBSD 在~/.config/sunshine/sunshine.log。各采集和编码后端具体怎么实现的,可以看 src/platform/ 里的源码。
三句话带走
- 卡顿先查网络,再查软件,iPerf3 反向 UDP 测一次再谈画质。
encoder留空走自动,手动指定是排障手段,不是日常操作。max_bitrate为0就是码率听 Moonlight 的,只有想封顶带宽才去碰它。
下一步就做
打开 Web UI 的 Applications 页,给一条真实游戏填上路径和工作目录,再拿第二台设备走一遍 Moonlight 配对,把"配对、启动、串流、退出"完整跑一圈。
继续深入
- docs/getting_started.md:各平台安装、服务管理与初始设置
- docs/configuration.md:完整参数表,含每项默认值
- docs/troubleshooting.md:疑难杂症索引
【免费下载链接】SunshineSelf-hosted game stream host for Moonlight.项目地址: https://gitcode.com/GitHub_Trending/su/Sunshine
创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考