ffmpeg读标准输入速度不够快

时间:2019-03-05 05:01:11

标签: ffmpeg pipe stdin live-streaming

我有一个NodeJS程序,该程序启动ffmpeg(带有child_process),然后使用管道协议通过stdin提供实时视频数据。

ffmpeg -nostdin -i pipe:0 -codec libx264 -preset veryfast -tune zerolatency -acodec aac -b:a 128k output/index.m3u8

ffmpeg将视频转码为h264,然后将其复用为HLS实时流。

我的问题是,有时ffmpeg拒绝接受更多输入。 NodeJS的默认行为是缓冲输入,直到子进程可以接受它为止,但是过一会导致我的应用程序内存不足。

我尝试了一个简单的解决方案,如果ffmpeg无法读取输入(如果proc.stdin.write返回false),我将开始丢弃数据,直到在流上引发drain事件为止,但这毫不奇怪,视频输出质量严重下降,伪影也很严重。

数据源的性质使我无法阻止,我的应用程序必须实时处理它。

ffmpeg仅使用系统上可用资源的一小部分(35%CPU,〜1%磁盘),因此我不确定为什么它阻止了stdin。如果我指定了一个要求更高的预设,那么它会愉快地使用更多的CPU,因此CPU速度不应成为限制因素。

有人知道为什么ffmpeg会阻止stdin吗?有什么办法可以告诉ffmpeg如果开始落后,就丢帧?

0 个答案:

没有答案