ARTICLE DETAIL

资讯详情

深耕郑州网站建设与运营推广的一线实战洞察。

Sunshine 串流调优:从选编码器到调网络,5 步解决卡顿与延迟的完整实战

Sunshine 串流调优:从选编码器到调网络,5 步解决卡顿与延迟的完整实战 Sunshine 串流调优从选编码器到调网络5 步解决卡顿与延迟的完整实战【免费下载链接】SunshineSelf-hosted game stream host for Moonlight.项目地址: https://gitcode.com/GitHub_Trending/su/Sunshine把 Sunshine 跑起来、用 Moonlight 连上之后大多数人碰到的都是同一批问题画面卡顿、延迟偏高、音画偶尔不同步。Sunshine 的默认配置面向能跑通而不是最优。调对编码器、比特率和网络参数后串流体验能从能玩变成像本地。下面从原理到逐项调参帮你一步步搞定。先搞懂串流链路卡顿到底卡在哪一环这一步的目的是让你在动参数之前知道钱应该花在哪——调错了地方参数改再多也没用。Sunshine 是 Moonlight 的自托管串流端它把主机屏幕和声音实时搬到客户端整个过程分四步采集从显卡显存或桌面合成器直接取画面不经过截图式搬运编码交给 GPU 硬件编码器压成 H.264/HEVC 码流这是最吃硬件的环节传输以 UDP 小包发往客户端追求低延迟丢了就靠纠错包兜底解码Moonlight 在客户端解出来尽量挤进 1–2 帧内显示。哪一环最可能是瓶颈经验上按出现频率排序编码器 网络 采集。编码器撑不住表现为周期性掉帧、编码延迟忽高忽低游戏画面明显慢半拍网络不稳表现为随机花屏、卡顿集中在网络波动时声音画面偶尔错位采集方式不对在 Linux 上尤其明显选错采集方式会白白吃掉帧率。Sunshine 默认会自动挑一套可用组合所以先别急着改配置打开 Web UIlocalhost:47990确认它选了哪个编码器和采集方式再对照 官方配置文档 逐项核对。编码器怎么选、关键参数怎么设这一步的目的是让编码器不再成为瓶颈选对硬件编码路径再用少数几个参数压住延迟。在 Web UI 的 Configuration → Advanced 里encoder决定用哪个编码器。默认由 Sunshine 自动挑选你可以手动指定NVIDIA 卡nvencWindows 和 Linux 下通常都是最优选择Intel 核显quicksyncAMD 卡amdvceAMD 视频编码引擎Linux 上也可选vaapiLinux 通用vulkan编码低延迟且对高负载更稳都没有退回software只适合轻量桌面串流别拿来打游戏。 选编码器的原则很简单有 NVIDIA 就用 NVENCLinux 上遇掉帧优先试 Vulkan别迷信最强预设。值得动的编码器参数只有几个编码器参数就像音量旋钮拧得越多越容易拧过头。真正值得动的屈指可数nvenc_preset数值越高压缩越好代价是延迟增加。官方建议只在网络或解码器顶不住时才改否则提高max_bitrate效果一样nvenc_latency_over_power延迟优先还是功耗优先追求低延迟就选前者nvenc_split_encode、nvenc_twopass多路串流或追求极限画质时才碰AMD 侧的amd_usage在延迟和质量两种取向之间二选一qp只有不支持恒定码率的设备才会用到默认值基本不用动。顺手改掉显卡驱动侧的设置Sunshine 之外显卡控制面板里有三个官方推荐的开关NVIDIA 卡开启Fast Sync可降低延迟用 NVIDIA 串流时如果卡顿把 NVIDIA 控制面板里的vsync:fast 关掉AMD 卡Windows 下开启Enhanced Sync对amfenc和libx264路径可以再省一帧延迟。这几项的完整说明在 性能调优文档两分钟能看完值得先做。网络参数逐项调法先测基线再动手这一步的目的是把玄学延迟变成可测量的数字——串流对网络的要求是稳定而不是快。官方排障文档说得很直白实时串流最看重的不是带宽而是低延迟、低抖动、几乎无丢包。所以先测再调主机端启动iperf3 -s客户端跑iperf3 -c 主机IP -t 60 -u -R -b 50M做 60 秒 UDP 反向测试看两个数丢包低于 5%、抖动低于 1 ms才算合格测公网时记得转发 5201 端口TCP 和 UDP。拿到基线后动这几个参数max_bitrate默认 0 表示跟随 Moonlight 的请求。带宽不够或丢包时主动压到网络实际能稳住的值比调任何编码器参数都立竿见影minimum_fps_target静态画面下 Sunshine 会省带宽、重复发帧这个参数控制最低有效帧率默认取串流帧率的一半通常不用动fec_percentage前向纠错包的比例默认 20。可以理解为随车备胎调高更抗丢包但同样吃带宽默认值已经够日常packetsizeUDP 包大小默认值适配绝大多数网络只在特定客户端异常时才考虑调整lan_encryption_mode/wan_encryption_mode加密有 CPU 开销内网设备都很强时可以关掉省一点跨公网务必保持开启upnp要跨互联网串流时开启让它自动做端口转发bind_address多网卡主机用它把 Sunshine 绑到指定网口。⚠️ 每次只改一两个参数并重新跑一次基线测试否则出了问题你分不清是谁的功劳。多屏与 Wi-Fi两个最折磨人的场景这一步针对两个高频场景多显示器选错串流屏、无线环境下延迟忽高忽低。多显示器先选对串流哪块屏场景主机接了两块屏Moonlight 里看到的不是你想串的那块或者分辨率、刷新率对不上。你该怎么做在 Web UI 的 Audio/Video 面板里用adapter_name显卡和output_name输出接口精确指定目标屏幕串流前想让客户端强制某个规格用dd_manual_resolution和dd_manual_refresh_rate手动指定分辨率与刷新率设dd_config_revert_on_disconnect断开时自动还原主机显示设置不留后患客户端请求的分辨率和显示器支持的对不上时用dd_mode_remapping做映射。预期效果客户端每次连的都是目标屏幕规格一致画面不撕裂。Wi-Fi 环境波动比平均延迟更致命场景客户端走 Wi-Fi延迟时高时低偶尔花屏。你该怎么做先按上一节的方法测出丢包和抖动基线确认锅在网络而不是编码能有线就别无线必须无线就上 5GHz/6GHz并把客户端和主机放在同一路由器下给 Moonlight 设备开 QoS 优先级典型坑主机 2.5G 有线、客户端只有千兆或 Wi-Fi。Sunshine 每 16ms 突发发一包数据慢的那一段缓冲装不下就丢包——把主机网卡降到 1G 试试或升级到 0.23.1 以后的版本官方改进了网络代码来缓解这个问题最后手段把网卡 MTU 从 1500 调到1428。有 LG 电视用户靠这一招把 60% 丢包降到 0但属于个案放在最后试。预期效果抖动收敛到 1 ms 以内卡顿从随机发作变成基本不发作。新手最容易踩的 5 个坑这一步的目的是帮你省掉别人踩过的弯现象都一样原因却常常相反。带宽大就一定流畅→ 真正原因串流要的是稳定50 Mbps 稳如老狗强于 500 Mbps 时好时坏。 → 正确做法用 UDP 基线测试说话达标前别动画质。只改 Sunshine 参数不碰显卡驱动设置→ 真正原因Fast Sync、Enhanced Sync、vsync:fast 这些开关直接影响采集侧帧时序官方性能文档单独列了它们。 → 正确做法驱动侧设置和 Sunshine 参数一起看。日志报 Encoder not found 就以为 Sunshine 坏了→ 真正原因Linux 上 Mesa 出于法律原因默认关闭了硬编码报错长这样Could not open codec [h264_vaapi]: Function not implemented另一种是 Mesa 太旧24.2导致 AMD 编码延迟高且波动。 → 正确做法升级 Mesa 到 24.2 以上必要时按官方说明重编译开启编码器新版 Sunshine 会自动设置AMD_DEBUGlowlatencyenc不用手动配。一次改一堆参数出了问题无从下手→ 真正原因多个变量同时变你无法归因。 → 正确做法一次只改 1–2 个改完测一轮把有效的留档无效的还原。Linux 上装 Flatpak/AppImage 还怪掉帧→ 真正原因沙箱安装缺CAP_SYS_NICE权限EGL 上下文拿不到高优先级高负载时硬件编码掉帧日志里能看到context priority set to HIGH but CAP_SYS_NICE capability is missing。 → 正确做法换vulkan编码通常直接解决或改用非沙箱安装具体对照表在 排障文档 的 Linux 一节。Web UI 的 Troubleshooting 页会实时展示显卡、编码器、驱动状态如上图遇到报错先看这里再用log_path指向日志文件逐行找。从能玩到好玩接下来怎么走调优是个循环测基线 → 改一处 → 再测基线别跳步。下一步建议按 Getting Started 把 Sunshine 装到正式环境避免 Docker再回到 Web UI 走完一遍编码器与网络参数把 排障文档 收藏起来它按平台列好了日志位置、常见报错和标准解法想深入理解每个字段的含义配置文档 对每一项都有默认值和示例。硬件、网络、客户端都在变最优配置也是会过期的东西——半年后重新跑一次基线你会发现很多参数该动了。【免费下载链接】SunshineSelf-hosted game stream host for Moonlight.项目地址: https://gitcode.com/GitHub_Trending/su/Sunshine创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考
返回列表