# Moonlight 客户端渲染 profile ## 目的 统一 `kiosk-shell` 产品入口与现场调试入口的 Moonlight 呈现参数,避免测试时只改了 `vdi-moonlight` 脚本而正式页面仍使用另一套 VSync、Frame Pacing 和解码器配置。 代码默认 profile 是 `smooth`;RK3528现场在硬解与EGL验证通过后,通过render.conf 选择了 `low-latency` 和2K30。软件基线和其他未验证设备仍使用smooth。 不把关闭同步当成通用修复,现场对照与风险见 `rendering-execution-20261102.md`。 ## 产品入口环境变量 这些变量由 `kiosk-shell` 和 `vdi-moonlight` 调试启动器读取,重启串流进程后生效: ```text VDI_STREAM_PROFILE=smooth # 默认,VSync + Frame Pacing VDI_STREAM_PROFILE=low-latency # 关闭 VSync + Frame Pacing,减少呈现等待 VDI_STREAM_PROFILE=diagnostic # smooth + Moonlight 性能叠图 VDI_STREAM_STATS=1 # 独立开启叠图,可同时比较smooth和low-latency VDI_MOONLIGHT_DECODER=software # 系统客户端默认;RKMPP现场配置使用 hardware VDI_MOONLIGHT_CODEC=H.264 # 当前默认,先不切换 HEVC/AV1 VDI_MOONLIGHT_PROGRAM=... # 可指定独立构建的Moonlight启动器,不覆盖系统二进制 VDI_SDL_FORCE_EGL=1 # 仅现场验证 SDL X11 EGL 时设置 VDI_SDL_VIDEODRIVER=wayland # 仅实验;正式入口的X11窗口激活逻辑尚需适配 ``` 每次会话启动时,最终 profile、解码器、编解码器、同步开关、SDL renderer 和完整参数 会写入 `~/vdi-terminal/logs/moonlight-YYYYMMDD.log` 的 `[VDI launch]` 段落。 ## A/B 顺序 1. 先恢复并确认 Sunshine 使用 `h264_nvenc`,否则客户端 A/B 不能说明服务端问题已经解决。 2. 1080p60:比较 `smooth` 与 `low-latency`,两组都设置 `VDI_STREAM_STATS=1` 收集 queue/render/jitter。 3. RK3528 硬解与 EGL/GLES 现场路径已验证;后续仍需单独完成 2K60 验收,不能由 2K30 结果推断。 4. 任何 profile 都必须保留 `--absolute-mouse`;当前已解决的双光标行为不应回退。 ## GPU 重启故障边界 `gpu-restart-diagnosis-20261102.md` 已确认当前没有经过验证的重启后软件恢复办法。profile 只改变客户端呈现,不会修复 Windows Code 43、NVML 失败或 Sunshine 回退 `libx264`。 GPU 修复仍需设备厂商提供匹配的 GM204M/13D9 生产版 vBIOS,并在维护窗口内按验收标准 重复验证 `nvidia-smi`、DXGI、`h264_nvenc` 和 Windows/VM 重启后的持久性。 ## RK3528现场配置与回退 `~/.config/vdi-terminal/render.conf` 当前内容: ```ini profile=low-latency stats=0 program=/home/armbian/vdi-terminal/bin/vdi-moonlight-rkmpp decoder=hardware codec=H.264 ``` Windows桌面卡当前请求2560x1440@30、30Mbps,实际持续动画约23FPS; 虚拟屏仍为30Hz。私有构建位于 `~/vdi-build/rkmpp-experiment`,不要删除该目录。 目前是用户目录内的POC部署,尚未打包为完整OTA镜像。 如现场发现关闭同步导致明显撕裂,可先将profile改为smooth,并将桌面卡FPS改回20。 如需彻底退回系统客户端,退出串流后将render.conf改名保存,并恢复 `desktops.before-rkmpp-20261102.json` 为desktops.json,然后重新启动kiosk受管栈。 系统 `/usr/bin/moonlight-qt` 未被覆盖,不需要卸载MPP或替换系统FFmpeg。 设备访问规则是 `/etc/udev/rules.d/70-vdi-rockchip-video.rules`,限定video组0660; 部署工具会安装并重载规则。udev匹配已验证,本轮未重启盒子做重启后串流复验。