You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

多客户端接收subprocess输出流式传输时冻结问题排查

问题原因分析

这既不是subprocess的Bug,也不是它的局限性,完全是代码设计上的问题:

  • 你用了**全局变量stream**让所有客户端共享同一个ffmpeg子进程的标准输出管道。
  • 操作系统的管道是单读取者模型,当多个客户端同时调用stream.stdout.read(1024)时,管道里的二进制流会被多个读取操作强行拆分——每个客户端只能拿到零碎的、不连续的数据包。而流媒体(比如你转的MPEG-TS)需要连续完整的数据包才能解码播放,所以所有客户端的流都会因为数据不完整而冻结。
  • 当你关闭所有客户端后,重新请求时只有一个读取者,能完整连续地读取管道输出,自然就能正常播放了。
修复思路参考

如果要支持多客户端同时播放,有两种常见方案:

  1. 每个客户端启动独立的ffmpeg子进程:去掉全局stream,每个请求都创建新的子进程。缺点是如果客户端多,会消耗大量系统资源。
  2. 单进程+中间缓存分发:启动一个全局的ffmpeg子进程,把它的输出写入一个线程安全的队列,然后每个客户端从队列里取数据分发。这种方式能节省资源,但需要处理队列的缓存边界和客户端断开后的资源清理。

内容的提问来源于stack exchange,提问作者Chris

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.16 05:32:45