处于“流式传输”模式的ffmpeg突然停止写入输出文件,并在几分钟后恢复运行

时间:2018-06-29 19:15:34

标签: python ffmpeg subprocess streaming webm

我正在使用ffmpeg以“连续流”模式将webm格式的媒体块转换为wav文件。

使用python包装器,我向ffmpeg提供了一个webm块(假设每秒1个块),并且ffmpeg不断写入输出wav(然后,在一个单独的线程中,我正在读取该wav文件并传递新数据向前)。

这在大多数情况下都能正常工作,但是有时候,我会得到这种奇怪的行为:

  • 在处理了一些块并将其输出到wav文件之后,ffmpeg停止写入输出文件(文件停止增长,但ffmpeg不断获取webm块)
  • 这样可以持续几分钟,然后ffmpeg恢复写入wav文件
  • 最终,完整的wav文件被成功写入,但这会导致流处理过程中的巨大延迟。

查看CPU和内存使用情况,这似乎不是问题。

关于什么会导致ffmpeg停止流播放几分钟然后恢复播放的想法? 这种情况可能会在30秒之后,3分钟之后或一个小时的流媒体块之后发生,并且ffmpeg恢复的时间也有所不同。

在我的python代码中,我基本上是打开一个subprocess.Popen()进程并写入该进程的stdin,以馈送ffmpeg媒体块。

所以我的代码如下:

ffmpeg_proc = subprocess.Popen('ffmpeg -y -f webm -i - -ac 1 -ar 16000  -f wav /tmp/out.wav', shell=True, stdin=subprocess.PIPE)

for chunk in chunks:
    ffmpeg_proc.stdin.write(chunk)

我正在使用python 3.6ffmpeg version 2.8.14-0ubuntu0.16.04.1

谢谢!

0 个答案:

没有答案