Я использую 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
Заранее спасибо!