☰
Sunshine 游戏串流主机一次跑通:装好、连通首条串流并调好常见参数
2026/10/31 1:38:25 网站建设 项目流程

Sunshine 游戏串流主机一次跑通:装好、连通首条串流并调好常见参数

【免费下载链接】SunshineSelf-hosted game stream host for Moonlight.项目地址: https://gitcode.com/GitHub_Trending/su/Sunshine

Sunshine 是一个自托管游戏串流主机:装在你自己的 PC 上,把本机画面、声音和输入打包推给 Moonlight 客户端。本文覆盖安装确认、首条串流连通、按场景预置参数和排障四件事。先说死一条硬边界:一台 Sunshine 只支撑一条活跃串流,第二台设备连进来会直接接管当前会话,"两家人各看各的"做不到,别指望,只能再加一台主机。

值不值得装

适合:

  • 主机带硬件编码器(NVIDIA/Intel/AMD),想低延迟把游戏推到电视、手机或另一台 PC 上玩
  • 要本地化管理:配置页、PIN 配对、实时日志全在浏览器里,不依赖任何云端
  • 各平台安装成本可控:Windows 装 MSI 即带系统服务,Linux 是用户级 systemd 服务,macOS 拖Sunshine.app进 Applications 即可

不适合:

  • 想两台设备同一时间各自独立串流——做不到,别折腾
  • 期望主机关机时还能用——它是本地软件,不是云服务,不开机就串不了
  • 坚持用 Docker 跑——官方文档明确不推荐给普通用户;AppImage 和 Flatpak 也不支持 KMS 采集,有发行版原生包就优先用原生包

动手前核对

碰安装之前先确认这 5 件事,每件都给了验证方式:

  1. 硬件编码器可用:lspci | grep -i vga或nvidia-smi能看到显卡。这决定你能用nvenc、quicksync、amdvce里的哪一个,也是后文调参的前提。
  2. 端口空闲:ss -ltnp | grep 47989无输出。同一台机器只能跑一个 Sunshine 实例,端口被占是首条串流最常见的拦路虎。
  3. 输入权限到位(Linux/FreeBSD):groups $(whoami)输出里含input组;没有就sudo usermod -aG input $USER,然后重新登录生效。
  4. macOS 权限路径:首次启动会请求屏幕录制和麦克风权限,不授权就无法采集,Web UI 的 Troubleshooting > Permissions 可复查。
  5. 包形态与采集方式匹配:需要 KMS 采集就别用 AppImage/Flatpak,装发行版原生包。

场景触发才改参数

先给个总判断:编码器只决定画质和主机负载,帧率和网络稳定性才决定手感。encoder默认留空即自动选第一个可用的硬件编码器,一般不用动。全部参数定义见 docs/configuration.md,配置页顶部有搜索框,直接搜参数名比翻列表快。

  • 如果你只在同一局域网用 → 网络参数一个都不用改,Moonlight 会自动发现主机。
  • 如果你要外网访问 →upnp默认disabled,把它设为enabled让路由器自动端口映射;是否成功以日志为准,"开了"不等于"成了"。路由器不支持 UPnP 就手动转发:port是基点(默认47989,范围 1029–65514),Web 管理在基点+1 即47990,RTSP 在基点+21 即48010,TCP 和 UDP 都把47989–48010整段转掉,改基点会带动整组平移。
  • 如果你想让 Sunshine 兜底限流 →max_bitrate默认0表示完全跟随 Moonlight 客户端请求,设上限就从5000(Kbps)起步;想画面让位于流畅就压到3000,带宽富裕再往上加。
  • 如果你用 NVIDIA 卡想换压缩效率 →nvenc_preset范围 1–7,默认1(最快、延迟最低);官方口径是网络和解码端都不受限时别动它,直接加max_bitrate效果等价。
  • 如果你不想本机喇叭出声 → 用virtual_sink;macOS 14+ 把audio_sink留空即走原生系统音频采集,旧系统要 BlackHole 类虚拟声卡并填设备名。

跑通主链路

装好并确认存活

目标状态:服务在跑,管理界面能打开。

以 Debian/Ubuntu 为例装好发行版包后,启用并启动用户级服务:

systemctl --user --now enable app-dev.lizardbyte.app.Sunshine

怎么判断成了:systemctl --user status app-dev.lizardbyte.app.Sunshine显示active (running);浏览器打开https://localhost:47990,自签证书警告点继续即可进入页面。

走偏时:页面打不开或一直报错,先查上面这条 status 命令,服务没活时网页现象全都没意义。

建好管理员账号并配对设备

目标状态:能登录管理界面,Moonlight 设备被批准并命名。

操作:首次登录按提示创建管理员用户名和密码并记下来。然后在 Moonlight 客户端里添加主机——自动发现不到就手动填主机局域网 IP;发起连接时客户端弹出 PIN,回到 Web UI 顶部 PIN 页面输入并给设备起名。

怎么判断成了:PIN 页面出现成功提示,且之后 Moonlight 重连不再索要 PIN。

走偏时:管理员密码忘了不用翻配置文件,sunshine --creds 新用户 新密码直接重置。

加入第一个应用并连上串流

目标状态:应用出现在列表里,主机画面出现在客户端且输入有响应。

操作:Applications 页面点 "Add New",填名字、图标和启动命令,命令支持$(HOME)展开。"Desktop" 是特殊应用,不启动任何进程、直接推整个桌面,第一次串流连通选它最省事。然后在 Moonlight 里选该应用连接。

怎么判断成了:客户端看到主机桌面,按键和鼠标移动在主机上即时生效。

走偏时:输入没反应,Linux/FreeBSD 下先查"动手前核对"第 3 条,加进input组重新登录。

应用分两种类型,按你要的行为选:cmd型进程退出时串流跟着断;detached型串流结束后进程留在后台。

症状对照表

先拿日志再下判断:Web UI 的 Troubleshooting 页有实时日志,每条 warning/error 带上下文;服务侧日志文件是数据目录下的sunshine.log。拿出问题时间点的 error 行,按下表对照:

症状(日志关键词)可能原因处理动作
Couldn't bind端口被其他进程占用停掉多余实例,或改port基点值
[libvirtualhid]段报错输入链路(虚拟 HID 设备)没建立先查input组权限,仍不行看日志里输入设备初始化段
Buffer overrun客户端侧链路太慢,中间设备缓冲溢出压max_bitrate;根治办法是降主机网卡速率或做流量整形,详见 docs/troubleshooting.md
画面正常但完全没声音audio_sink指错回环设备macOS 14+ 留空走原生采集,其他平台核对回环设备名

交付前自查

  • encoder不是software,确认在跑硬件编码
  • 管理员账号已记录,Moonlight 设备已配对并命名
  • max_bitrate按场景设过值(默认0跟随客户端,兜底5000)
  • 外网场景upnp或手动转发47989–48010端口段已确认生效
  • 主机走有线,客户端在 5 GHz Wi-Fi 或有线环境内

主机亮着、电视黑着——在 Moonlight 上点一下 Desktop,主机画面就该在大屏幕上活过来。

【免费下载链接】SunshineSelf-hosted game stream host for Moonlight.项目地址: https://gitcode.com/GitHub_Trending/su/Sunshine

创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考

需要专业的网站建设服务?

联系我们获取免费的网站建设咨询和方案报价,让我们帮助您实现业务目标

立即咨询