另有通过监控网卡实现的方法,见:
最近在用ffmpeg对b站进行推流直播,发现存在ffmpeg随机卡死的现象(症状是控制台信息不再变化),在相当长(大于10分钟)的时间后,提示错误并结束进程。
av_interleaved_write_frame(): Connection timed
而此时,因为断流太久,b站已经自动关闭了直播间,所以无法通过简单重启ffmpeg进行推流。
这就导致开播后,必须时刻关注直播间状态,一旦断流,就得马上进服务器重启ffmpeg以防止自动关播。
而ffmpeg卡死是随机的,可能几小时,可能几天,可能在白天,可能在半夜,时刻盯着它简直是无比糟心。
在网上查了N久,有人说要加“-rw_timeout”参数,让ffmpeg不要等待太久,但我试过,无效。
有人则说应该修改ffmpeg代码并重新编译,这个工程有些过于浩大,不到最后一刻还是不要祭出这个法宝为好。
于是我就把焦点转移出去,想一想能不能变通地解决问题。
终于,让我发现了解决方案。
ffmpeg在卡死的时候,cpu占用率为0!
这就意味着,如果有一个程序去检测ffmpeg进程的cpu占用,如果持续一段时间为0的话,就干掉它并重启进程,问题也就解