VLC推流SRT流时srt-live-transmit报No room to store incoming packets错误如何解决
No room to store incoming packet 错误产生原因
核心为srt-live-transmit进程的内部接收缓冲区被占满,无法继续容纳新传入的UDP数据包,常见触发场景如下:
- 入站UDP流的码率超过SRT输出链路的实际承载上限,数据包入栈速度远大于出栈转发速度,持续挤压缓冲区空间
- srt-live-transmit默认的接收缓冲区配置过小,无法适配当前mpegts流的突发码率
- SRT传输参数配置不合理:延迟设置过低、重传逻辑占满缓冲区空间,或是未开启速率控制导致数据包突发涌入
- 宿主机CPU/IO负载过高,srt-live-transmit进程调度优先级不足,无法及时消费缓冲区中堆积的数据包
对应解决方案
- 调整srt-live-transmit的缓冲区配置,启动时添加缓冲区参数,示例命令如下:
srt-live-transmit udp://0.0.0.0:你的UDP端口 srt://0.0.0.0:你的SRT端口?srctime=1&recv_buffer_size=16777216&send_buffer_size=16777216
上述配置将收发缓冲区均设置为16MB,可根据实际流码率适当上调,最高不建议超过64MB - 对VLC输出的UDP流做码率限制:推流时添加
--sout-ts-cbr参数开启TS流恒定码率输出,同时设置匹配输出链路带宽的码率值,避免码率突发 - 调整SRT延迟参数:在SRT输出地址后追加
latency=200配置(单位为毫秒,可根据网络抖动情况在100~1000区间调整),适当增大延迟可以给缓冲区预留足够的消峰空间 - 排查宿主机资源占用情况,若CPU/IO负载过高,可调高srt-live-transmit进程的调度优先级,或更换性能更强的设备运行该服务
内容的提问来源于stack exchange,提问作者Shankar
相关产品推荐
相关产品推荐

