
Sunshine 串流实战把 PC 变成 Moonlight 串流服务器的完整手册【免费下载链接】SunshineSelf-hosted game stream host for Moonlight.项目地址: https://gitcode.com/GitHub_Trending/su/Sunshine客厅电视只连得了游戏机PC 上的 3A 大作全被隔在书房里Sunshine 就是拆掉这堵墙的——自托管的游戏串流主机跑在 Windows、Linux、macOS、FreeBSD 上画面经硬件编码推给 Moonlight 客户端开源免费、无订阅费。维度说明支持平台Windows / Linux / macOS(实验) / FreeBSD客户端任意设备上的 Moonlight硬件编码NVENC、QuickSync、AMF、VAAPI、VideoToolboxCPU 软编兜底管理入口浏览器https://localhost:47990默认端口47990(Web) / 47989(串流)授权开源免费无订阅零到一跑通第一次分 4 步走完安装、首次配置、配对、第一次串流。多平台命令按系统分组推荐路径加粗备选路径用也可以引出。1. 安装 Sunshine做什么装官方包。# Windows 推荐 winget winget install LizardByte.Sunshine # Linux 推荐 Flatpak flatpak install --system flathub dev.lizardbyte.app.Sunshine flatpak run --commandadditional-install.sh dev.lizardbyte.app.Sunshine # Linux 也可以走发行版包 sudo dpkg -i ./sunshine-ubuntu-24.04-amd64.deb # macOS brew tap LizardByte/homebrew brew install sunshine装完sunshine命令就能在终端调起。也可以直接 clone 仓库自行构建见 docs/getting_started.md 的 Build 章节。2. 启动服务并打开 Web UI做什么让 Sunshine 常驻并进入浏览器后台。# Linux 起用户服务 systemctl --user --now enable app-dev.lizardbyte.app.Sunshine # Windows 安装为服务 sunshinesvc install # 任意平台手动跑未装服务时 sunshine浏览器访问https://localhost:47990。首次会提示不安全网站直接点继续就行——这是自签名证书不影响使用。3. 首次设置创建账号做什么浏览器会要求你创建用户名和密码。当场记下来忘了进不去后台重置要用sunshine --creds {新用户名} {新密码}。4. 客户端配对做什么在 Moonlight 客户端里添加主机客户端会显示一个 PIN。打开 Sunshine Web UI 顶部导航的PIN页把客户端显示的 PIN 填进去给设备起个名字配对完成。Moonlight 端立刻能看到这台主机选 Desktop 即可开始第一次串流。原理拆解它是怎么工作的沿数据流讲 3 个核心机制。你不需要看懂全部实现但知道这些排障速度能快 3 倍。机制 1屏幕捕获一句话概括主机侧按你选的后端把画面抓出来。Linux 下可选 KMS / NvFBC / X11 / PortalWindows 下是 WGC。核心路径在 src/platform/linux/每个后端一个独立文件。Linux 无头主机走 NvFBCNVIDIA 显卡专用或 KMS有桌面环境优先 KMS能拿到最高刷新率。// src/platform/linux/kmsgrab.cpp 简化示意 // 通过 DRM 的 page-flip 回调逐帧拷贝 framebuffer // 每帧捕获后交给编码器机制 2硬件编码一句话概括把 RGB 画面转成 YUV 后塞进显卡的硬编单元省 CPU。核心路径在 src/nvenc/NVENC和 src/platform/linux/ 的vaapi.cpp、vulkan_encode.cppVAAPI / Vulkan Video。Web UI 的 AudioVideo 页签切的就是这几个后端。// src/nvenc/nvenc_config.h 简化示意 // 按 GPU 型号选择编码预设、速率控制模式、帧率上限机制 3输入虚拟化一句话概括Moonlight 端的手柄在主机侧被虚拟成同型号物理手柄传给游戏。核心路径在 src/platform/virtualhid_input.cpp底层驱动层是 third-party/libvirtualhid。Windows 需要装 Virtual HID DriverLinux 走 uinput。// src/platform/virtualhid_input.cpp 简化示意 // 收到客户端手柄事件 → 构造对应虚拟手柄的 HID 报告 → 投递给系统场景演练3 个真实用法场景 1客厅电视串流 Steam 大屏目标电视上的 Moonlight 直接进 Steam 大屏模式。前置Web UI 账号已建好Moonlight 端已配对。操作Web UI → Applications确认 Steam Big Picture 存在默认自带来自 src_assets/linux/assets/apps.json。AudioVideo 页签分辨率改成电视原生如 3840×2160码率参考 docs/performance_tuning.md。电视 Moonlight 里选 Steam Big Picture 启动。预期效果电视上直接进 Steam 大屏界面键鼠/手柄输入正常。场景 2无头主机远程串流目标主机不接显示器人在别处 SSH 拉起串流。前置主机已能 SSH 登录Sunshine 已装好。操作# 主机侧拉起来 ssh {user}{主机IP} export DISPLAY:0; sunshineNVIDIA 显卡走 NVFBC 捕获X11 下不接显示器可能需要 HDMI 欺骗器或 EDID 模拟器让显卡保持输出状态否则画面是黑的。预期效果客户端能看到桌面输入正常。场景 3串流前先量一次网络目标先确认带宽瓶颈再谈码率。前置主机和客户端都能跑iperf3。操作# 主机 iperf3 -s # 客户端 iperf3 -c {主机IP} -t 60 -u -R -b 50M看客户端输出里的丢包和抖动理想值丢包 5%、抖动 1ms。预期效果拿到一组基线数据后续卡顿能对照判断是网络还是编码。排坑速查⚠️ 现象忘了 Web UI 账号密码根因凭据只存在本地浏览器不缓存。 解法停掉 Sunshine跑sunshine --creds {新用户名} {新密码}。Flatpak 用flatpak run --commandsunshine dev.lizardbyte.app.Sunshine --creds {新用户名} {新密码}。详见 docs/troubleshooting.md。现象浏览器访问 47990 打不开根因47990 端口被防火墙拦或 Sunshine 根本没在跑。 解法先systemctl --user status app-dev.lizardbyte.app.SunshineLinux确认服务活着再查防火墙规则放行 47990 和 47989。现象画面卡顿、丢包根因Sunshine 每 16ms 突发一帧60fps串流路径上某一段比主机慢很多中间设备缓冲不够就丢数据。 解法先用场景 3 的 iPerf3 定位瓶颈确认是速率差就降速2.5G→1G或升级 Sunshine 到 0.23.1 之后。现象Linux 上连上后键鼠/手柄没反应根因运行 Sunshine 的用户没有 uinput 权限。 解法把该用户加进input组并重新登录。FreeBSD 用pw groupmod input -m $USER。现象主机开了 HDR串出来的画面发白过曝根因Moonlight 客户端侧没开 HDR流按 SDR 解码主机开 HDR 时过曝。 解法客户端设置里启用 HDR主机端确认 HDR 已激活必要时接 EDID 模拟器。Linux 上还要求 KMS 捕获后端NvFBC/X11 不支持 HDR。不确定是哪种情况先打开 Web UI 的 Troubleshooting 页看第一条 warning/error 点开的详情。延伸导航docs/getting_started.md各平台安装、首次设置、快捷键CtrlAltShiftN隐藏光标、CtrlAltShiftF1/F12切显示器docs/configuration.md全部配置项port、locale、编码器、音频设备…逐项说明docs/troubleshooting.md凭据重置、网络测试、丢包处理src/platform/各平台屏幕捕获与编码实现KMS、NvFBC、WGC、VAAPI…tests/单元测试与集成测试想了解内部行为从这里入手【免费下载链接】SunshineSelf-hosted game stream host for Moonlight.项目地址: https://gitcode.com/GitHub_Trending/su/Sunshine创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考