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

搭载nginx-rtmp模块的FFmpeg需多次重启才可工作求助

FFmpeg转RTMP流不稳定,需多次重启才能正常工作的问题排查

问题详情

使用以下命令将RTP流转换为RTMP流:

ffmpeg -i rtp://192.168.1.74:8000/live -vcodec libx264 -f flv rtmp://192.168.1.74:1935/picam/stream

启动后无法通过rtmpdump -z获取视频,必须重启FFmpeg 7-8次才可能正常工作。已完成的排查动作:

  • 重新编译Nginx源码,无效果
  • 端口1935已确认开放
  • 抓包显示RTMP握手完成后无有效流数据返回,客户端请求未得到正常响应

解决建议

1. 修复FLV头缺失问题

RTP流通常无初始时长或文件大小标记,导致FFmpeg生成的FLV头不完整,添加-flvflags no_duration_filesize强制跳过这些字段:

ffmpeg -i rtp://192.168.1.74:8000/live -vcodec libx264 -flvflags no_duration_filesize -f flv rtmp://192.168.1.74:1935/picam/stream

2. 生成连续的时序戳

RTP流可能存在时序混乱,添加-fflags +genpts让FFmpeg生成连续的PTS(显示时间戳),确保RTMP流时序正常:

ffmpeg -fflags +genpts -i rtp://192.168.1.74:8000/live -vcodec libx264 -f flv rtmp://192.168.1.74:1935/picam/stream

3. 调整Nginx-RTMP配置

在Nginx的RTMP模块配置中添加wait_key on,等待关键帧后再向客户端推送流,避免客户端因无关键帧无法解码:

rtmp {
    server {
        listen 1935;
        application picam {
            live on;
            wait_key on;
            meta copy;
        }
    }
}

修改后重启Nginx生效。

4. 验证RTP源稳定性

先使用ffplay rtp://192.168.1.74:8000/live测试RTP输入流是否稳定,若存在丢包、卡顿或无输出,优先修复RTP发送端的配置(如调整发送缓冲、编码参数)。

5. 升级FFmpeg版本

部分旧版FFmpeg的RTMP推流存在握手时序或兼容性bug,升级到最新稳定版(如6.x或7.x分支)可解决此类偶发问题。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.14 19:55:15