Sunshine 自托管游戏串流完整指南:4 步跑通第一条 Moonlight 串流
【免费下载链接】SunshineSelf-hosted game stream host for Moonlight.项目地址: https://gitcode.com/GitHub_Trending/su/Sunshine
Sunshine 是一台跑在你自己电脑上的自托管游戏串流主机:抓取主机画面、音频和手柄输入,推流给任意 Moonlight 客户端(电视、手机、平板都行)。先说清一条最容易误解的边界——同一时刻 Sunshine 只维持一条活跃串流,第二台设备发起连接会直接挤掉当前会话。想让"两家人各看各的",趁早别折腾。
🧭 Sunshine 能做什么、不能做什么
- 支持:Windows / macOS / Linux / FreeBSD 主机端;客户端即 Moonlight,覆盖 Android、iOS、TV、PC 各平台
- 支持:硬件编码
nvenc、quicksync、amdvce,Linux 另有vulkan、vaapi;HDR 在 Windows 正式支持、Linux 实验性支持 - 不支持:多路并发串流,永远只有一条流
- 有条件支持:手柄输入。macOS 和 Windows 上虚拟手柄依赖另装的 Virtual HID Broker(付费许可),macOS 老版本甚至不支持手柄;Linux 需用户加入
input组
🔍 开工前核对 5 件事
| 核对项 | 怎么确认 |
|---|---|
| 显卡有硬件编码器 | 装完进 Web 配置页看encoder是否自动选到了nvenc/quicksync/amdvce;空着或只剩software就别上大屏 |
| 主机到路由器链路质量 | 主机跑iperf3 -s,客户端跑iperf3 -c <主机IP> -t 60 -u -R -b 50M,丢包 < 5%、jitter < 1 ms 才算合格 |
| Linux 输入权限 | groups $USER里有input,没有就sudo usermod -aG input $USER后重新登录 |
| macOS 系统权限 | 首次启动会要屏幕录制、麦克风,照给;Web UI 的 Troubleshooting > Permissions 里复查 |
| Linux 捕获方式 | KMS 捕获需要原生包安装,Flatpak / AppImage 用不了 KMS,需要就换发行版包 |
🚀 首次配对到第一条串流:4 步操作对照
每一步都给你"怎样算成功"的判断点,别跳着做。
第 1 步:装好并让它常驻。Windows 装 MSI(自带系统服务,装完自启);macOS 把Sunshine.app拖进 Applications;Linux 加官方源后:
sudo apt update && sudo apt install sunshine systemctl --user --now enable app-dev.lizardbyte.app.Sunshine验证信号:Windows 托盘出现 Sunshine 图标;Linux 执行systemctl --user status app-dev.lizardbyte.app.Sunshine显示 active (running)。
第 2 步:设管理员账号。浏览器打开https://localhost:47990,自签证书报警告点继续即可。首次进入是 Welcome 页,设定管理员用户名和密码——写下来,忘了只能命令行找回。
验证信号:登录成功,能进 Applications 页面。
第 3 步:批准 Moonlight 设备。客户端里手动添加主机(填 Sunshine 本机的局域网 IP),发起连接时它会弹一串 PIN。回 Web UI 顶部导航进 PIN 页,输入这串码、给设备起个名字、回车。
验证信号:Moonlight 端弹出设备上的应用列表,而不是转圈。此后该设备被记住,不用再输 PIN。
第 4 步:添加第一个应用。Applications 页点 Add New,填名字、图标和启动命令。命令支持$(HOME)环境变量展开,Steam 游戏直接填steam://rungameid/xxx这种 URI(参考 docs/app_examples.md)。
验证信号:Moonlight 里点这个应用,画面推过来了。
容易翻车的地方:应用分类型。普通cmd应用退出时串流跟着断;detached类(比如拉 Steam 本体这种会自我更新、杀原始进程的程序)串流结束后不会被杀,游戏挂在后台。你要"关游戏就断流"还是"挂着后台",按行为选类型。
📺 按场景选参数:先给结论再解释
一句话结论:编码器只决定画质和负载,帧率才决定手感。进配置页(顶部有搜索框,直接搜bitrate、encoder比翻长列表快得多),按"串给谁看"来定:
| 你的场景 | 推荐配置 | 为什么 |
|---|---|---|
| 客厅电视 | encoder留空(自动选第一个硬件编码器),max_bitrate5000,nvenc_preset1,1080p/60 起步再上 4K/60 | 大屏分辨率可以妥协,帧率不能;preset 数字越大压缩越好但延迟越高,追求低延迟就保持 1 |
| 手机/平板 | 分辨率压到 720p 或 1080p,帧率 60,nvenc_preset保持最小值 | 手机解码器和屏幕都小,参数往低延迟、低负载偏;Wi-Fi 差就先 720p 测稳不稳 |
| 外网远程 | max_bitrate限 5000、上行差压到 3000,帧率 30 起步,nvenc_preset调大换压缩效率 | 外网带宽是硬瓶颈,画质全给帧率让路 |
两个默认值要心里有数:max_bitrate默认0,含义是完全跟随 Moonlight 客户端的请求,填了才是 Sunshine 侧兜底限流;encoder默认自动选第一个可用的,NVIDIA 一般落到nvenc,别去选software,大屏分辨率下 CPU 会先崩。
外网接入再补一档:配置里开启upnp(默认关闭)让路由器自动映射;路由器不支持就手动转发TCP 47984–47990(Web 管理界面是 47990)和UDP 48010,光猫加路由的双层结构两层都得转。
🔧 出问题时按症状查
先别猜,打开 Web UI 的Troubleshooting页看实时日志,每条 warning/error 都带上下文,还能打包拿去社区问。
| 症状 | 第一步动作 | 还不行再查什么 |
|---|---|---|
| 延迟高 | 主机插网线、客户端走 5 GHz 或有线;先降到 720p 测帧率是否稳定 | 稳了再逐级升分辨率定位瓶颈;编码器过载就nvenc_preset降档或降到 30 帧 |
| 完全没声音 | 检查audio_sink是否指到正确回环设备;macOS 用 BlackHole,或 14+ 系统把 Audio Sink 留空走原生捕获 | 想同时静音本机喇叭改用virtual_sink |
| 音画不同步 | 在 Moonlight 客户端设置里调同步偏移 | 以百毫秒为单位逼近,正负都试 |
| 键鼠/手柄没反应(Linux) | 用户加入input组后重新登录生效 | 看日志里输入设备初始化段 |
| 外网连不上 | 确认端口转发生效:TCP 47984–47990、UDP 48010 | upnp开了不代表映射成功,看日志里的映射结果 |
| 忘了管理员密码 | 命令行执行sunshine --creds 新用户名 新密码重置 | 详见 docs/troubleshooting.md |
✅ 上线前自查清单
- 主机走有线,所有客户端在 5 GHz Wi-Fi 或有线内
- 管理员密码已记下来,Moonlight 设备已批准并命名
encoder是硬件编码,max_bitrate按需限定(兜底 5000)- 外网场景已确认 TCP 47984–47990 / UDP 48010 转发生效
- 应用类型选对了:后台常驻的用
detached,随流断的用普通命令
电视黑着屏,遥控器一按,主机风扇转起来——加载页出现在大屏上,链路就成了。
【免费下载链接】SunshineSelf-hosted game stream host for Moonlight.项目地址: https://gitcode.com/GitHub_Trending/su/Sunshine
创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考