Steam 的 Remote Play(远程畅玩)主机在 Steam 自己捆绑的 FFmpeg 编码器内部发生 SIGSEGV(段错误)崩溃,而 Valve 已将第二份报告合并进第一份。编号 13704 的问题 于 10 月 8 日提交,带有 Valve 自己的“流媒体”与“SteamOS”标签,报告将故障定位为堆内存损坏——“发生在 Steam 捆绑的 FFmpeg 视频编码器内部,于 avcodec_send_frame 期间释放 AVFrame 时触发”。

报告中的传输路径是 Steam Machine 主机向 Steam Frame 串流。图片来源:Valve
报告中的传输路径是一台 Steam Machine 向 Steam Frame 串流。主机运行稳定分支的 SteamOS 3.8.28,配备 AMD Navi 33 GPU,通过 PipeWire 与 VAAPI 进行采集,使用的是 Steam 捆绑的 libavcodec 62.28.102。报告指出,编解码器的选择只会影响崩溃发生的频率:“H.264 在开始串流后几分钟内即崩溃;HEVC 则可以运行数小时。”
Valve 于 10 月 13 日合并了另一台机器的报告
第二份报告(编号 13731)来自不同的硬件:一台 Ryzen 7 7800X3D 搭配 Radeon RX 9070 XT,使用集成 GPU 编码,客户端是 iPad 上的 Steam Link。Valve 在 13 分钟内就将其关闭:“这看起来与 #13704 是同一个问题。以重复问题关闭。”
该报告作者统计“10 月 13 日连续发生了 7 次”,H.264 与 HEVC 都有,每次崩溃都发生在连接后几秒内。他们将触发点锁定在 Steam 的一次性硬件编码探测上——该探测在客户端日志中表现为尝试 CUDA、加载 libcuda 失败后回退到 VAAPI,且“看起来每个 Steam 进程只运行一次”。
内核日志那一行显示 CGameStreamVideo 在 libc 中发生段错误(segfault),七次崩溃的故障地址分别为 0x440、0x441、0x10 和 0xc51。其上方的调用栈经过 Steam 的 libvideo 进入 av_freep 与 avcodec_send_frame。
证据到此为止:只有两份报告
Valve 已为 13704 打上标签,并判定第二份报告是同一个 bug,这就是它全部公开的立场。它没有说明是什么损坏了堆内存,也没有说明故障出在 Steam 自己的 libvideo 还是 Steam 捆绑的那份 FFmpeg 中,而 13704 在 10 月 14 日仍处于打开状态。
两台机器就是两台机器。这两台主机都运行 AMD 显卡上的 SteamOS,且都通过 Steam 自己捆绑的那份 FFmpeg 进行编码。就现有报告而言,规律只能推到这里。
而这恰恰也是 Valve 一直在推的组合。Valve 在 9 月称 Steam Machine 是 Steam Frame 的完美主机,当时两者之间的 VR 游戏串流尚不可用,而这两份报告用的都是平面游戏的 Remote Play 路径。
Remote Play 自身的设置一直在快速变化:10 月 3 日测试版客户端将上限提高到 1 Gbit/s,Valve 自己还就此发出了关于时延代价的警告。而这两位报告者都无法替换掉的那一环,正是 Steam 自带的那个编码器。
本文来自作者投稿,版权归原作者所有。如需转载,请注明出处:https://www.nxrte.com/zixun/72604.html