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

2020-02-18 17:12:12 +08:00
 ReZer0

原问题是这个: 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 是否可以设置等待超时或其它有效的参数。

感谢!

965 次点击
所在节点    问与答
0 条回复

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/645584

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX