ffmpeg в «потоковом режиме» внезапно останавливает запись выходного файла и возобновляет работу через несколько минут - PullRequest
0 голосов
/ 29 июня 2018

Я использую ffmpeg для преобразования фрагментов мультимедиа в формате webm в файл wav в режиме «непрерывного потока».

Используя оболочку Python, я передаю ffmpeg веб-чанк (скажем, 1 чанк каждую секунду), а ffmpeg непрерывно записывает вывод wav (затем в отдельном потоке я читаю этот wav-файл и передаю новые данные. вперед).

В большинстве случаев это работает хорошо, но иногда я получаю странное поведение:

  • после обработки некоторых чанков и их вывода в файл wav, ffmpeg прекращает запись в выходной файл (файл перестает расти, но ffmpeg продолжает получать чанки webm)
  • это может продолжаться несколько минут, а затем ffmpeg возобновляет запись в файл wav
  • в конце концов, полный файл WAV записывается успешно, но это вызывает огромные задержки в процессе потоковой передачи.

С точки зрения использования процессора и памяти, это не проблема.

Есть какие-нибудь идеи относительно того, что может заставить 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.6 и ffmpeg version 2.8.14-0ubuntu0.16.04.1

Заранее спасибо!

...