Sunshine 自托管游戏串流完整指南:4 步跑通第一条 Moonlight 串流

发布时间:2026/10/27 9:39:01
Sunshine 自托管游戏串流完整指南:4 步跑通第一条 Moonlight 串流

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 48010upnp开了不代表映射成功,看日志里的映射结果
忘了管理员密码命令行执行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),仅供参考