ARTICLE DETAIL

资讯详情

深耕网站建设、视觉设计与SEO优化的一线实战洞察。

Sunshine+Moonlight自托管串流:从搭建到调优的完整指南

Sunshine+Moonlight自托管串流:从搭建到调优的完整指南 1. 为什么我最终选择了 Sunshine 加 Moonlight 这套自托管串流方案1.1 从被串流软件折腾到自建主机的心路历程最早接触游戏串流我用的是显卡厂商自带的那套方案。刚开始确实省心装完驱动、打开开关、客户端扫码就能连上延迟也还能接受。但后来问题一个接一个冒出来驱动更新之后串流功能时好时坏有时候干脆连不上客户端只支持特定几个平台我想在客厅的电视盒子或者旧笔记本上跑都费劲最要命的是画质和码率几乎没法细调网络稍微波动一下就糊成一片。折腾了几次之后我就想能不能找一套完全跑在自己机器上、不依赖厂商生态的方案。后来在几个技术社区里看到有人推荐 Sunshine 加 Moonlight 的组合我抱着试一试的心态搭了一套结果用下来就再也没换回去。Sunshine 是跑在主机端的串流服务端负责采集画面、编码、推流Moonlight 是客户端负责接收、解码、显示。两者都是开源项目协议兼容性做得很好而且几乎覆盖了所有主流平台——Windows、Linux、macOS 主机端都能跑客户端从手机、平板到电视盒子、树莓派都有对应版本。最关键的是所有参数都摊在你面前码率、编码器、分辨率、帧率、音频通道想怎么调就怎么调这种掌控感是闭源方案给不了的。这套方案适合什么人我觉得有三类。第一类是家里有台性能不错的台式机想躺在床上用平板或者客厅电视接着玩的第二类是想把旧电脑、旧手机利用起来当串流终端的第三类就是像我这样对画质和延迟有要求、又不想被厂商生态绑死的折腾党。整个搭建过程如果顺利半小时以内能跑通但中间有几个坑点我下面会一个个拆开讲。1.2 Sunshine 与 Moonlight 各自扮演什么角色很多人一开始会搞混这两个东西的分工我用一个生活化的类比来解释。Sunshine 就像是家里的自来水厂它负责把水画面和声音处理好、加压然后通过管道网络送出去Moonlight 则是你家里的水龙头负责把水接出来、调节冷热画质和音量最后呈现给你。水厂和水龙头之间靠一套标准协议通信这套协议就是 NVIDIA GameStream 协议的开源实现。具体到技术层面Sunshine 在主机端做的事情包括调用系统的图形接口抓取屏幕或指定窗口的画面交给 GPU 或 CPU 编码成 H.264、HEVC 或者 AV1 码流再通过 RTSP 和 RTP 把码流打包发送同时它还要处理输入事件的反向传输也就是把客户端的手柄、键鼠操作传回主机。Moonlight 在客户端做的事情相对简单建立连接、协商参数、接收码流、硬件解码、渲染显示再把本地输入采集后发回去。这里有个关键点值得展开说编码这一步是整套方案里最吃性能的环节。如果你用的是带硬件编码器的显卡比如支持 NVENC 的 N 卡或者支持 AMF 的 A 卡编码开销几乎可以忽略主机该干嘛干嘛但如果只能走 CPU 软编那主机在串流时基本就没法同时干别的重活了。所以选主机的时候显卡的编码能力比游戏性能本身更值得关注。1.3 自托管方案相比商业串流的真实优势商业串流方案的优势是开箱即用但代价是你得接受它的规则。我总结下来自托管这套方案的核心优势集中在四个方面。第一是参数完全可控。码率可以从 1Mbps 一路拉到 150Mbps分辨率支持到 4K 甚至更高帧率能上 120fps编码器可以在 H.264、HEVC、AV1 之间切换。网络好的时候我把码率拉到 80Mbps 走局域网画质几乎和本地直连没区别出门在外用移动网络降到 10Mbps 也能凑合玩。第二是平台覆盖广。Moonlight 客户端官方支持 Windows、macOS、Linux、Android、iOS还有树莓派和各类电视盒子的版本。我家里一台老款安卓平板、一台装了 Linux 的迷你主机、还有客厅的电视盒子全都能连上同一台 Sunshine 主机这在闭源方案里几乎不可能。第三是没有账号和云依赖。所有数据都在你自己的局域网里跑不经过任何第三方服务器。主机和客户端配对之后连接是点对点的断网了照样能用只要局域网通。这一点对隐私敏感或者网络环境不稳定的用户特别友好。第四是可定制和可扩展。Sunshine 支持自定义应用列表你可以把任意程序加进去不只是游戏。我甚至把一些需要远程操作的软件也配了进去用平板就能控制主机上的程序。后面我还会讲怎么配置开机自启让主机一开机串流服务就待命。当然自托管也有代价初次配置需要动手遇到问题得自己排查没有官方客服。但只要你跟着下面的步骤走一遍这些门槛其实都不高。2. 搭建前的准备工作与核心概念梳理2.1 主机端硬件与系统的选择建议主机端是整个串流链路的核心它的编码能力直接决定了画质上限和延迟表现。我先把选择逻辑讲清楚再给具体建议。显卡是重中之重。如果你用 NVIDIA 显卡从 GTX 10 系开始就支持 NVENC 硬件编码HEVC 编码从 10 系开始支持AV1 编码需要 RTX 40 系及以上。AMD 显卡对应的是 AMF 编码器从 RX 5000 系开始支持得比较好。Intel 核显的 Quick Sync 其实也很能打尤其是 11 代以后的核显HEVC 和 AV1 编码都支持如果你手头是带核显的 Intel 平台完全可以先用核显试试。CPU 不用太强但也不能太弱。因为编码主要交给显卡CPU 主要负责协议处理和系统调度。四核八线程以上的现代处理器基本够用。但如果你的显卡不支持硬件编码只能走 CPU 软编那就得另说了——软编 1080p60 至少需要六核以上的性能而且主机基本没法同时做别的事。内存和网络。内存 8GB 起步16GB 更稳妥因为串流本身会占用一部分内存做缓冲。网络方面主机最好走有线千兆网口这是保证稳定低延迟的基础。如果主机只能走无线那至少要是 Wi-Fi 6 且离路由器近否则延迟和丢包会让你怀疑人生。系统方面Windows 10/11 是最省心的选择驱动和编码器支持最完善。Linux 也能跑Ubuntu 22.04 及以上版本我实测过配合合适的驱动也能正常工作但配置过程会多一些步骤后面我会单独讲。2.2 客户端设备的兼容性盘点客户端的选择就灵活多了基本上只要 Moonlight 有对应版本设备性能过得去就行。我把常见设备类型和注意事项列一下。设备类型推荐程度关键注意点Windows 笔记本/台式机高支持硬件解码画质和延迟表现最好macOS 设备高M 系列芯片解码能力强Intel 机型也够用Android 手机/平板高建议 Android 8.0 以上支持硬件解码iOS/iPadOS 设备高需要从应用商店安装解码性能优秀树莓派 4/5中需要配置硬件解码性能有限但可用电视盒子中芯片方案差异大建议选支持 HEVC 硬解的Linux 迷你主机中配置稍复杂但可控性强这里有个经验客户端的解码能力比它的 CPU 性能更重要。一台老款手机如果支持 HEVC 硬件解码串流 1080p60 的体验可能比一台不支持硬解的新电脑还流畅。所以选客户端的时候先查一下它的芯片支持哪些解码格式。2.3 网络环境对串流质量的决定性影响网络这块我要单独拎出来讲因为太多人栽在这上面。串流对网络的要求可以概括为三个词带宽够、延迟低、抖动小。带宽方面1080p60 的 H.264 码流大概需要 20-30MbpsHEVC 因为压缩效率更高15-20Mbps 就能达到相近画质。4K60 的话H.264 要 60Mbps 以上HEVC 大概 40MbpsAV1 能压到 30Mbps 左右。所以局域网千兆是基本盘Wi-Fi 的话至少要有稳定的 5GHz 频段。延迟和抖动比带宽更关键。串流是实时交互网络抖动超过 10ms 你就能感觉到操作延迟。有线连接天然占优无线的话要确保客户端和主机在同一个路由器下尽量避开 2.4GHz 频段和拥挤的信道。我实测下来主机有线加客户端 Wi-Fi 6 的组合在路由器同一房间内延迟可以控制在 10ms 以内隔一堵墙大概 15-20ms隔两堵墙就开始不稳定了。提示如果你的路由器支持 QoS 或者流量优先级设置把主机的 IP 设为高优先级能明显改善串流稳定性。还有一个容易被忽略的点MTU 和分片。有些网络环境下大包会被分片导致延迟飙升。如果遇到莫名其妙的卡顿可以尝试在主机和客户端都把 MTU 调小到 1400 试试。3. Sunshine 主机端的完整安装与配置流程3.1 Windows 平台安装 Sunshine 的详细步骤Windows 是最好上手的平台我以 Windows 11 为例走一遍流程。第一步去 Sunshine 的官方发布页面下载最新的 Windows 安装包。文件名通常形如Sunshine-Windows-Installer-x.x.x.exe下载后双击运行。安装过程中会提示你安装一个虚拟显示驱动这个驱动的作用是让主机在没有物理显示器连接时也能正常输出画面强烈建议安装。安装完成后Sunshine 会自动注册为系统服务并启动。第二步打开浏览器访问https://localhost:47990这是 Sunshine 的 Web 管理界面。首次访问会要求你设置用户名和密码这个凭据用于管理界面登录和客户端配对务必记牢。设置完成后进入主界面你会看到 Applications、Configuration、Troubleshooting 等几个标签页。第三步配置基础参数。进入 Configuration 标签重点看这几个选项Sunshine Name主机在客户端上显示的名字改成你容易识别的比如MyGamePC。Port默认 47989一般不用改除非端口冲突。Encoder编码器选择N 卡选nvencA 卡选amfIntel 核显选quicksync不确定就选auto。Adapter Name多显卡时指定用哪块卡编码单卡不用管。第四步添加应用。进入 Applications 标签点击 Add 新建一个应用条目。Name 填应用名比如Desktop表示串流整个桌面Command 填要启动的程序路径如果只想串流桌面可以留空或者填cmd.exe。我建议至少配一个 Desktop 条目方便随时串流整个屏幕。第五步配对客户端。在客户端上打开 Moonlight它会自动搜索局域网内的 Sunshine 主机。选中你的主机后Moonlight 会显示一个四位数的 PIN 码。回到 Sunshine 的 Web 界面在 PIN 页面输入这个码配对就完成了。3.2 Linux 平台Ubuntu安装与自启配置Ubuntu 上的安装稍微复杂一点但也不难。我以 Ubuntu 22.04 为例。首先安装依赖。Sunshine 需要一些图形和编码相关的库执行sudo apt update sudo apt install -y curl wget libssl-dev libavcodec-dev libavutil-dev libavformat-dev libswscale-dev libx11-dev libxfixes-dev libxrandr-dev libxcb1-dev libxcb-shm0-dev libxcb-xfixes0-dev libdrm-dev libcap-dev libpulse-dev libopus-dev libevdev-dev libwayland-dev然后下载 Sunshine 的 Linux 安装包。官方提供.deb包下载后执行sudo dpkg -i sunshine-*.deb sudo apt install -f安装完成后Sunshine 会注册为 systemd 服务。但默认情况下它可能不会自动启动需要手动启用sudo systemctl enable sunshine sudo systemctl start sunshine这里有个坑Sunshine 在 Linux 下需要访问图形会话如果它以系统服务方式运行可能拿不到当前用户的显示环境。解决办法是把它配置成用户级服务。具体做法是在~/.config/systemd/user/下创建sunshine.service内容大致如下[Unit] DescriptionSunshine Game Streaming Aftergraphical-session.target [Service] ExecStart/usr/bin/sunshine Restarton-failure EnvironmentDISPLAY:0 [Install] WantedBydefault.target然后执行systemctl --user enable sunshine systemctl --user start sunshine。这样 Sunshine 就会跟着你的图形会话一起启动。注意Linux 下编码器支持取决于驱动。N 卡需要安装专有驱动并确保 NVENC 可用A 卡需要较新的 Mesa 驱动。装完后可以在 Sunshine 日志里确认编码器是否被正确识别。3.3 编码器与画质参数的取舍逻辑配置 Sunshine 的时候编码器和画质参数是最需要动脑子的部分。我把选择逻辑拆开讲。编码器选择。优先级是AV1 HEVC H.264。AV1 压缩效率最高同画质下码率最低但需要 RTX 40 系或同代以上的硬件支持客户端也要能解 AV1。HEVC 是目前的甜点压缩效率比 H.264 高 30% 左右绝大多数现代设备都支持。H.264 兼容性最好但同画质需要更高码率。如果你不确定客户端支持什么先用 HEVC不行再退到 H.264。码率设置。这是画质和流畅度的平衡点。局域网千兆环境下1080p60 我建议设 30-50Mbps1440p60 设 50-80Mbps4K60 设 80-150Mbps。如果是无线或者外网按实际带宽的 60% 来设留出余量应对波动。帧率。能上 60 就别用 30能上 120 就更好但前提是主机能稳定输出这个帧率。如果游戏本身跑不到 60 帧串流设 60 也没意义反而增加编码负担。其他参数。Video Frame Rate和Video Bitrate在 Sunshine 里是全局默认值但 Moonlight 客户端连接时可以覆盖。FEC前向纠错建议开启能提升弱网下的稳定性代价是略微增加带宽开销。Audio部分如果客户端支持多声道就选 5.1否则选立体声。我自己的配置是HEVC 编码1080p60码率 40MbpsFEC 开启。这套参数在局域网下画质几乎无损延迟稳定在 8-12ms。4. Moonlight 客户端的安装、配对与画质调优4.1 各平台客户端安装要点Moonlight 的安装比 Sunshine 简单得多各平台基本都是一路下一步。Windows 和 macOS 去官网下载安装包双击安装即可。Android 在应用商店搜索 Moonlight 安装注意认准开发者是 Moonlight Game Streaming Project。iOS 和 iPadOS 在 App Store 搜索安装国区可能搜不到需要切换到其他区。Linux 用户可以通过 Flatpak 或者发行版仓库安装比如flatpak install flathub com.moonlight_stream.Moonlight。树莓派有专门的镜像和安装脚本官方文档写得很清楚。安装完成后第一次打开Moonlight 会自动扫描局域网内的 Sunshine 主机。如果没扫到可以手动添加主机 IP。选中主机后进入配对流程前面已经讲过输入 PIN 码即可。4.2 配对失败与连接异常的排查思路配对和连接是新手最容易卡住的地方我把常见问题和排查顺序整理一下。扫不到主机。先确认主机和客户端在同一个局域网且没有开启 AP 隔离。然后检查主机的防火墙Sunshine 需要放行 47984-47990 这几个端口。Windows 上可以在防火墙高级设置里添加入站规则Linux 上用ufw allow 47984:47990/tcp和对应的 UDP 规则。配对时 PIN 码无效。这种情况通常是主机和客户端时间不同步导致的。检查两边系统时间是否准确时区是否一致。另外Sunshine 的 Web 界面如果长时间没操作会登出重新登录再输入 PIN。连接后黑屏或者闪退。多半是编码器或者解码器不匹配。先在 Sunshine 里把编码器换成 H.264 试试如果好了说明是 HEVC 兼容性问题。客户端这边也可以在设置里强制指定解码器。连接成功但延迟很高。先看是不是走了无线能插网线就插网线。然后检查主机是不是在跑其他吃性能的任务。最后看码率是不是设太高了降一半试试。提示Sunshine 的 Troubleshooting 标签页里有详细的日志遇到问题先看日志大部分错误信息都能直接定位原因。4.3 画质与延迟的平衡调优实战Moonlight 客户端的设置项不多但每一项都影响体验。我按重要性排序讲。分辨率。客户端设置里的分辨率要和主机输出匹配。如果主机是 1080p 显示器客户端设 4K 也没用反而增加解码负担。正确做法是让主机输出分辨率等于或高于客户端需求然后在 Moonlight 里选对应分辨率。帧率。和分辨率同理选主机能稳定输出的帧率。60fps 是甜点120fps 适合竞技类游戏但需要主机和客户端都支持高刷。码率。Moonlight 里可以覆盖 Sunshine 的默认码率。局域网下我一般设 40-60Mbps外网按带宽设。有个技巧先设高一点如果出现卡顿再逐步降找到稳定运行的临界值。V-Sync 和帧同步。V-Sync 开启能消除画面撕裂但会增加一点延迟。如果玩竞技游戏可以关掉 V-Sync 换取更低延迟。Moonlight 还有Frame Pacing选项能改善帧生成时间的均匀性建议开启。HDR。如果主机和客户端都支持 HDR开启后画质提升明显但会占用更多带宽。SDR 显示器就别开了颜色会发灰。我实测下来1080p60、40Mbps、HEVC、V-Sync 开启这套组合在千兆局域网下延迟约 10ms画质和本地直连几乎看不出区别。如果换成 4K60、100Mbps延迟会升到 15-20ms但画质提升对大多数游戏来说感知不强所以我一般还是用 1080p。5. 常见问题排查与长期使用经验5.1 串流过程中的典型故障速查用了大半年我踩过的坑不算少整理成一张速查表遇到问题可以对照排查。现象可能原因解决办法画面卡顿但声音正常网络带宽不足或抖动大降码率检查网络优先有线声音卡顿但画面正常音频缓冲设置问题调整 Sunshine 音频缓冲或换音频通道手柄无响应输入设备未正确映射检查 Sunshine 输入设置重新配对画面偏色或发灰HDR/SDR 不匹配统一主机和客户端的 HDR 设置连接后主机黑屏虚拟显示驱动问题重装虚拟显示驱动或接一个物理显示器延迟突然飙升主机后台任务抢占资源关闭后台下载、更新等任务频繁断连无线信号不稳定换有线或调整路由器信道这张表覆盖了我遇到过的九成问题。剩下的一成基本都能在 Sunshine 日志里找到线索。5.2 提升串流稳定性的几个实操技巧除了基础配置还有几个技巧能明显提升体验都是我反复试出来的。固定主机 IP。在路由器里给主机分配静态 IP避免 DHCP 续约导致 IP 变化客户端就不用反复重新配对。关闭主机的自动更新和后台同步。Windows 的自动更新、OneDrive 同步、Steam 后台下载这些都会在你不注意的时候抢占带宽和 CPU导致串流卡顿。串流前手动关掉或者设置成手动更新。给 Sunshine 进程设高优先级。在任务管理器里把 Sunshine 相关进程的优先级设为“高”能减少被其他任务抢占的概率。客户端开启硬件解码。Moonlight 默认会尝试硬件解码但有些设备需要手动开启。在设置里确认Decoder选的是硬件解码器比如Hardware或具体的芯片型号。定期更新 Sunshine 和 Moonlight。这两个项目更新挺频繁新版本经常修复兼容性问题和提升性能。但注意别在串流前更新更新完先本地测试一下再连客户端。5.3 关于自托管串流的一些个人体会搭这套东西之前我以为最大的难点是技术配置实际用下来发现真正的门槛在于理解整个链路的瓶颈在哪。刚开始我总以为是软件问题折腾了半天编码器设置最后发现是路由器无线信号不稳。后来我养成了一个习惯遇到问题先分层排查——网络层、编码层、解码层、显示层一层层往下查基本都能定位到根因。另一个体会是不要追求极致参数。我一开始非要把码率拉到 100Mbps 以上结果网络稍微波动就卡。后来降到 40Mbps画质肉眼几乎没差别稳定性却好了很多。串流这件事稳定比极限更重要。最后说个扩展方向。Sunshine 的应用列表其实可以玩出很多花样不只是游戏。我把一些需要长时间运行的任务也配了进去用平板就能监控和操作。还有人用它做远程桌面、远程剪辑思路都是一样的。这套方案的上限取决于你怎么用它。
返回列表