自托管游戏串流入门到进阶:Sunshine + Moonlight 30 分钟把 3A 玩到任何屏幕
【免费下载链接】SunshineSelf-hosted game stream host for Moonlight.项目地址: https://gitcode.com/GitHub_Trending/su/Sunshine
主机在卧室,你想在客厅大屏上开玩——搬它?不现实;再买一台?太贵。多数人的第一反应是"那得用云游戏服务",但反直觉的事实是:完全不必。Sunshine 是一款完全开源、免费的自托管游戏串流服务器,把 PC 画面经家庭网络送到屋里任意一块屏幕上;配上 Moonlight 客户端,就是完整的家庭串流链路。装好、配对,30 分钟后你就能在大屏上玩 3A。
四步搞懂原理:你的 PC 是一座家庭电视台
整个链路可以压成一条箭头流程:
画面采集 → 硬件编码 → 局域网传输 → 屏幕解码
每一步用大白话解释一下它在干嘛:
- 画面采集:系统实时抓取屏幕内容,相当于"每秒给屏幕拍 60 张照片"
- 硬件编码:GPU 上的专用编码芯片(NVIDIA 是 NVENC、AMD 是 AMF、Intel 是 QuickSync)把这堆照片压缩成一路很小的码流,CPU 基本不参与
- 局域网传输:码流经家里路由器送到 Moonlight 客户端,这里拼的是稳定低延迟,不是裸带宽
- 屏幕解码:客户端把码流解码成可玩的画面,手柄输入走反向通道回来
你可以把全过程想象成一座微型电视台:PC 是演播室,屋里每块屏幕都是电视机。数据全程不出家门,隐私、画质、延迟都只取决于你和家庭网络,没有月费,也没有第三方机房。
下一步:原理不用背,直接进入下一节,把第一帧画面串出来。
最小可行串流:三个动作,串出第一帧
安装:按系统选一条路,装完即用
- Windows:官方
.msi安装器双击安装,防火墙规则由安装器自动写好,最省心 - Linux:Debian/Ubuntu 用
.deb,Fedora 启用官方 Copr 后安装,Arch 用 pacman,或走通用 AppImage;用 Flatpak 的话,装完必须补跑一次flatpak run --command=additional-install.sh dev.lizardbyte.app.Sunshine补输入依赖 - macOS:DMG 拖进 Applications,或
brew install sunshine;注意 macOS 版暂不支持手柄模拟 - Linux 的画面采集(KMS / X11 / Wayland)会按你的会话自动选择,AppImage 不支持 KMS 采集
- 想从源码构建:
git clone https://gitcode.com/GitHub_Trending/su/Sunshine,方法见 docs/building.md
启动:打开 Web 控制台
浏览器访问https://localhost:47990。首次打开会要求你设置管理员用户名和密码,页面会明确提示凭据之后不会再显示——先抄下来再输。
Windows 上安装器已把 Sunshine 注册为服务、开机自启;Linux 手动启动:systemctl --user start app-dev.lizardbyte.app.Sunshine(加--now enable可设为开机自启)。
配对:4 位 PIN 码让 Moonlight 认主机
- 在客户端设备装 Moonlight(Windows / Android / Apple TV / Steam Deck 等都有)。Web 控制台的 "Featured Apps" 页聚合了官方客户端入口,不用自己满世界找
- 打开 Moonlight,它会自动发现局域网里的 Sunshine,点进去连接,界面会显示一个 4 位 PIN
- 回 Web 控制台的 PIN 页输入该 PIN 确认,配对完成
控制台里预置了两个应用:Desktop(串整个桌面,办公、看片都合适)和Steam Big Picture(大屏模式,启动后直接手柄操作)。任何可执行程序都能加进来当应用,各自独立配启动参数。
下一步:点一次 Desktop 串出去。看到第一帧画面,后面就只是调优问题了。
按目标调优:只改该改的 🎯
所有参数都在 Web 控制台的 Configuration 页。几百个听着吓人,但搜索框是捷径:输关键词直达,比如搜 "UPnP" 直接定位到端口转发选项。
想要更低延迟:先动网络,再动参数
- 延迟杀手几乎总在网络上:2.4GHz WiFi 或信道拥堵。主机端改有线、客户端上 5GHz 或有线,先赢一半
nvenc_preset从 1 到 7:1 编码延迟最低,数字越大压缩效率越高、编码延迟越高。默认就是 1,追延迟时保持别动- 客户端侧:分辨率先于码率降(手持设备 1080p 足够),客户端里关掉"高质量模式"
下一步:把两端网络固定住再试一局,手柄操作仍觉得"慢一拍"才轮到碰 preset。
想要更好画质:码率是唯一王道
max_bitrate默认 0,表示"完全听客户端的";想由主机端封顶就填一个数(单位 Kbps)- 有线千兆下,4K 可以放心拉到 40–80 Mbps;走 WiFi 就降一档
- 码率不够用时:把
nvenc_preset提到 2–7 档,同码率下画质更足;新一代编码芯片的压缩效率也更高
下一步:从 30 Mbps 起步,每次加 10,加到画面不再出现糊块为止。
想省带宽:让静止画面降帧
minimum_fps_target控制"画面静止时帧率最低能掉到多少"。默认 0 表示用串流帧率的一半兜底;想省得更多就设个更低的值,代价是画面一动帧率回升会有顿挫感- 带宽的两个主阀门就是"码率上限 + 降帧下限",为省带宽别去动编码质量类参数
下一步:移动端设备用 1080p + 15–20 Mbps 试一轮,这是体验和带宽的平衡点。
想远程串流:开 UPnP,从外面找回家
- 在 Web 控制台(Network 选项卡)打开
upnp,Sunshine 会替路由器自动配置端口转发 - Moonlight 里手动添加家里的公网 IP(或域名),移动数据网络下也能连回家
- 远程对抖动敏感:码率主动调低换稳定,客户端延迟档位调低
下一步:先用手机移动数据测一次连家;连不上就先确认端口转发真的生效了,而不是反复重连。
决策树式排查:30 秒定位问题 🧭
别背报错,学顺着树走。
打不开 Web 控制台(localhost:47990)?
- 服务在跑吗 → Linux 看
systemctl --user status app-dev.lizardbyte.app.Sunshine,Windows 看任务管理器 - 在跑但页面进不去 → 防火墙拦了 47990 端口;Windows 一般由 MSI 自动放行,Linux/AppImage 需手动放行
- 忘记密码 → 用
sunshine --creds {新用户名} {新密码}直接重置凭据,不用重装(AppImage、Flatpak 换成对应启动方式)
Moonlight 搜不到 Sunshine?
- 两台设备真的在同一局域网吗(一个在 5GHz、一个在访客网络,就搜不到)
- 服务在跑吗(同上)
- 重启路由器——发现机制和 UPnP 缓存问题,重启经常就好
- 最后手段:在 Moonlight 里手动添加 Sunshine 的内网 IP
卡顿、掉帧、丢包?
- 先量网络:主机端
iperf3 -s,客户端iperf3 -c {主机IP} -t 60 -u -R -b 50M,看丢包和抖动;目标丢包低于 5%、抖动低于 1ms - 测出丢包高 → 主机网卡速率降一档(2.5G 降到 1G)或改有线,同时把码率调低
- 网络没问题还卡 → 看编码器是否回退成了软编码,日志是最直接的证据
- 日志位置:Windows 在
%ProgramFiles%\Sunshine\config\sunshine.log,Linux/macOS 在~/.config/sunshine/sunshine.log;Web 控制台的 Logs 页也能直接看
下一步:任何问题,先翻出日志里那行红色报错,拿这句话去搜文档,比凭感觉重试快得多。
上线前体检清单:逐项打勾再开播 ✅
正式开玩之前,把这张清单过一遍:
- 网络:主机端有线千兆起步;客户端 5GHz WiFi 或有线;两端同网段
- 测速:iPerf3 跑过 60 秒 UDP 测试,丢包 < 5%、抖动 < 1ms
- 编码器:确认在用硬件编码(nvenc / amdvce / quicksync / vaapi),日志里没有出现软编码回退
- 码率:
max_bitrate保持默认 0,或按网络设了合理值(4K 桌面 40–80 Mbps、移动端 10–25 Mbps) - 帧率:
minimum_fps_target与用途匹配(默认 0 = 串流帧率一半兜底) - 端口:需要远程时 UPnP 已开启,且从外网验证过转发有效
- 日志:知道 Logs 页和本地日志文件在哪,出问题不慌
- 配对:至少一台设备已配对,重启后能直接重连
更细的内容:安装指南 · 完整配置手册 · 排查指南。
清单勾完,书房角落那台 PC 就正式成为全家的游戏主机了——玩在哪里,从今往后由你说了算。
【免费下载链接】SunshineSelf-hosted game stream host for Moonlight.项目地址: https://gitcode.com/GitHub_Trending/su/Sunshine
创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考