V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
V2EX 提问指南
ReZer0
V2EX  ›  问与答

[求助] 一个关于 FFMPEG 和 nginx-rtmp-module 断流问题的后续

  •  1
     
  •   ReZer0 · 2020-02-18 17:12:12 +08:00 · 964 次点击
    这是一个创建于 1700 天前的主题,其中的信息可能已经有所发展或是发生改变。

    原问题是这个: https://www.v2ex.com/t/644672

    起初我以为是网络问题,后来排查过后排除了服务机与接收机之间的网络故障。

    环境:
    远程的服务器接收推流然后广播(广播信号正常,中断报错发生在本地接收端,服务端使用 nginx-rtmp-module )
    本地接收端同时接收广播进行转码同时推流到指定播放器(转码 CPU 占用率 70%-80%)

    排查结果:
    因为服务端是国外线路,所以我尝试用另外一台国外线路的机器同时获取服务端的流,但同样在一段时间后报错,于是排除了网络问题。(已排除服务商网络问题,因为只推流服务器内的本地文件一切正常)
    分析服务端进程发现,当出现问题的时候,进程内 nginx 和 ffmpeg 的 CPU 占用率突降为 0,等待一段时间后恢复,但并不是进程重启,PID 没变。
    ffmpeg 曾有报错:
    [aac @ 0x67fca40] Number of bands (48) exceeds limit (44)
    Error while decoding stream #0:0: Invalid data found when processing input

    报错期间 nginx 用于生成.ts 分段的缓存文件夹内的所有缓存被清空(一般来说重启或重新推流才会导致缓存清空,也因为如此接收端获取不到片段报 404 )

    ffmpeg 的报错去搜索了下,但产生的原因有太多。个人猜测是因为是获取网络流媒体的流推送给 nginx,该网络流媒体也是.ts 分段,所以可能在获取的时候产生了无效信息(?不知道这个说法怎么形容)但 ffmpeg 会重试继续获取所以不会直接退出,但 nginx 有没有可能这一秒没等待到数据于是判定重新推流顺便清空了缓存?(以上是猜测,因为我实在找不到原因)

    为了验证测试,我用本地文件推流 nginx 就不会出现断流的情况,所以问题应该还是出在 FFMPEG 获取网络流文件时的问题。

    nginx 的 conf 是参照教程内的配置: https://www.cnblogs.com/liangblog/p/11122237.html

    希望能有熟悉的朋友帮我分析一下是什么问题,因为知识水平不足,所以至今没找到问题关键,也不清楚 nginx 是否可以设置等待超时或其它有效的参数。

    感谢!

    第 1 条附言  ·  2020-02-18 19:17:42 +08:00
    尝试在配置文件里加如下参数,但貌似没效果:
    chunk_size 4000;
    ping 30s;
    notify_method get;


    接收端提示:(在出问题时不断 reading )
    [http @ 0x74e0f00] Opening 'http://example.com/hls/live.m3u8' for reading
    [hls @ 0x7297c40] Skip ('#EXT-X-VERSION:3')
    [hls @ 0x7297c40] Skip ('#EXT-X-DISCONTINUITY')
    目前尚无回复
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   5916 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 35ms · UTC 02:12 · PVG 10:12 · LAX 19:12 · JFK 22:12
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.