20 分钟搭好自己的游戏串流主机:Sunshine 完全上手指南
【免费下载链接】SunshineSelf-hosted game stream host for Moonlight.项目地址: https://gitcode.com/GitHub_Trending/su/Sunshine
手机上的 Moonlight 打开后设备列表空空如也,装好的主机连影子都没有;或者勉强串出画面,一跑游戏就掉线。这类问题十有八九不是软件坏了,而是中间漏了某一步。Sunshine 是一个自托管的游戏串流主机:装在你的游戏 PC 上,它负责采集屏幕、做硬件编码,再把视频流通过局域网推给手机、平板或电视上的 Moonlight 客户端。跨网组网、下载管理它都不管,但把局域网内这第一帧画面串出来,20 分钟足够。
先确认手头有什么
- 一台主机:Windows、Linux 或 macOS 均可,macOS 属于实验性支持且暂不支持手柄模拟
- 一台装好 Moonlight 客户端的设备
- 两台设备在同一局域网内
- 主机有带硬件编码的显卡(NVIDIA、AMD、Intel 都行),没有也能走 CPU 软编码,但帧率会受限
- Linux 主机需已登录桌面环境,采集画面离不开显示器会话
📌 把主机端装好
Windows 去项目 Release 页面拿Sunshine-Windows-AMD64-installer.msi,双击安装,防火墙规则由安装器自动写入,不用手动加。Linux 按发行版走包管理器,Debian/Ubuntu 装完云源配置脚本后执行sudo apt install sunshine。macOS 把 DMG 里的Sunshine.app拖进 Applications。
如果走 Flatpak 安装,装完必须再执行一条命令:
flatpak run --command=additional-install.sh dev.lizardbyte.app.Sunshine⚠️ 坑在这里:Flatpak 沙箱不会同步输入注入用的 udev 规则,跳过这条命令,后面键鼠按下去主机没反应。
检查点:安装过程无报错弹窗,进程能正常退出。
📌 把服务拉起来
Windows 的 MSI 已把 Sunshine 注册成系统服务并开机自启,这步直接跳过。Linux 手动启动:
systemctl --user start app-dev.lizardbyte.app.Sunshine想开机自启再补一条:
systemctl --user --now enable app-dev.lizardbyte.app.SunshinemacOS 首次启动会弹屏幕录制和麦克风授权,两项都点允许,否则后面采不到画面也听不到声音。
检查点:Linux 上执行
systemctl --user status app-dev.lizardbyte.app.Sunshine,状态是 running。
设管理员账号
浏览器打开https://localhost:47990。页面提示"不安全"是自签名证书导致的,忽略即可。首次进入要求设置管理员用户名和密码——记下来,后面全靠它。忘密码不用重装,在主机上执行sunshine --creds 新用户名 新密码直接重置。
📌 第一次配对
客户端设备打开 Moonlight,它会自动扫到局域网里的主机。首次连接时 Moonlight 弹出一个四位 PIN 码:回到 Web UI 顶部导航的 PIN 页把它输进去,顺手给设备起个名字,提示成功即配对完成。
检查点:在 Moonlight 里点自带的Desktop条目,客户端屏幕出现主机桌面的实时画面,声音、鼠标都有响应。第一帧,出来了。
加一个真实游戏
Web UI 的 Applications 页默认自带 Desktop 条目,它不启动任何程序、直接串整个桌面;新串流会自动终止上一个在跑的应用,全局同一时间只有一条流。添加游戏就是填程序路径,两处细节容易翻车:
- 启动命令本身立即退出的程序(典型如 Steam),在应用配置里勾上detached,否则流刚开就断。
- Flatpak 环境里跑宿主程序,命令要加
flatpak-spawn --host前缀,沙箱里直接找不到目标。
路径支持$(HOME)这类环境变量,别写死绝对路径。
配置只动这几个数
配置页顶部有搜索框,输关键词直达条目,几百个设置项不用翻菜单。真正需要碰的只有下面几个,其余全部留默认:
max_bitrate:默认0,含义是码率完全按 Moonlight 的请求走;只有想在主机端给带宽封顶时才填具体数,比如5000(Kbps)。encoder:默认自动选第一个可用编码器;手动填nvenc、amdvce、vaapi、vulkan、software是排障手段,日常留空。nvenc_preset:1 到 7,默认1最快;网络或客户端解码顶不住时才调大,多数情况下提码率比动 preset 划算。upnp:默认disabled;要走出局域网才改成enabled。
容易翻车的点
串流卡顿、掉帧。先查网络,别急着改配置。主机端起iperf3 -s,客户端执行iperf3 -c 主机IP -t 60 -u -R -b 50M,目标是丢包低于 5%、抖动低于 1ms。典型诱因是两头速度不匹配:2.5G 网卡配 WiFi 客户端,把网卡降一档或主机改回有线,通常立刻见效。
https://localhost:47990打不开。防火墙拦了 47990。Windows 先确认 MSI 写入的规则还在,临时关防火墙验证一次,通了再补规则放行 47990。
键鼠在主机上没反应。Linux 大概率是 udev 规则没重载,执行sudo udevadm control --reload-rules后重连;Flatpak 用户先回头确认 additional-install.sh 跑没跑。
串流时想静音主机扬声器。⚠️ 别动audio_sink,它决定采哪个声卡;改用virtual_sink指向虚拟声卡,流里有声音,主机侧保持安静。
卡住时先查这里
| 症状 | 最可能原因 | 一条修复动作 |
|---|---|---|
| Moonlight 发现不了主机 | 服务没在跑,或不在同一局域网 | systemctl --user status app-dev.lizardbyte.app.Sunshine确认 running,再核对两台设备同网段 |
| 忘了管理员密码 | 凭据丢失 | sunshine --creds 新用户名 新密码直接重置 |
| 有画面没声音 | 采集设备没指对 | Linux 用pactl info \| grep Sink查默认声卡名,填进audio_sink |
| 想确认到底卡在哪 | 日志里都有 | Web UI 的 Troubleshooting 页内置日志导航;文件在~/.config/sunshine/sunshine.log(Linux/macOS)或%ProgramFiles%\Sunshine\config\sunshine.log(Windows) |
不同人怎么搭
显卡带不动 3A 的轻薄本,把它当解码显示端,串书房主机跑游戏;前提是同局域网且网络稳,客户端分辨率按自己屏幕设就行。只想要一块大屏的人,让主机当家庭影音节点,串 Desktop 到电视看本地片源,max_bitrate保持默认0,静态内容占的带宽很小。一家人共用一台主机,每个成员在自己的 Moonlight 设备上独立配对、各记各的设备名;唯一前提是同一时间只有一条流,谁在串谁用,用完退出。
跑通之后做两件事
拿第二台设备再配一次对,然后挑一个真实游戏完整走一遍"配对 → 启动 → 串流 → 退出"。完整参数表在 docs/configuration.md,各平台安装细节在 docs/getting_started.md,疑难杂症索引在 docs/troubleshooting.md,编码与采集的各平台实现可以看 src/platform/ 目录。
【免费下载链接】SunshineSelf-hosted game stream host for Moonlight.项目地址: https://gitcode.com/GitHub_Trending/su/Sunshine
创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考