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

使用FFmpeg向Mediasoup注入RTMP流时出现随机卡顿该如何解决

可行修复方案

方案1:配置折中(改造成本最低)

  • 先修改Mediasoup对应Producer的配置,关闭NACK、PLI检测:因FFmpeg不会响应这两类RTCP重传请求,Mediasoup等待重传超时时会触发卡顿,关闭后会直接跳过丢包数据,借助视频编码的错误隐藏能力恢复,避免长时间卡顿
  • 调整FFmpeg推流参数:
    1. 缩短关键帧间隔,将原命令的-g 60改为-g 30,每1秒生成一个关键帧,就算出现严重丢包也能更快恢复画面
    2. 给每个RTP输出地址添加发送缓冲区和分片优化参数,避免IP分片丢包,优化后输出部分改为:
    "[select=a:f=rtp:ssrc=11111111:payload_type=101]rtp://52.29.30.225:41299?rtcpport=40612&pkt_size=1200&sndbuf=1048576|[select=v:f=rtp:ssrc=22222222:payload_type=102]rtp://52.29.30.225:44083?rtcpport=48791&pkt_size=1200&sndbuf=1048576"
    
  • 开启Mediasoup Producer的错误隐藏配置,降低丢包对画面的影响

方案2:新增RTP代理层(改造成本中等,完全解决重传问题)

在FFmpeg和Mediasoup之间部署一个轻量RTP代理服务:

  • 代理侧缓存最近10秒的音视频RTP包
  • 代理负责和Mediasoup交互RTCP信令,收到NACK请求时直接从缓存中返回对应序号的RTP包
  • 收到PLI请求时,可通过FFmpeg的远程控制接口触发实时生成关键帧,推送到Mediasoup完成画面刷新

方案3:更换推送链路(无需修改FFmpeg逻辑)

不直接用FFmpeg输出RTP到Mediasoup,调整推送链路:

  • FFmpeg先把编码好的流以RTSP/SRT/本地RTP协议推到本机的libmediasoupclient进程
  • 由原生支持WebRTC重传机制的libmediasoupclient将流推送到Mediasoup,完全兼容Mediasoup的NACK、PLI逻辑

方案4:使用带RTP重传补丁的FFmpeg

目前社区已有开源补丁为FFmpeg的RTP复用器增加NACK响应、PLI处理能力,自行编译打了对应补丁的FFmpeg版本即可直接支持重传机制,无需调整现有推送流程。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.25 15:54:07