Переполнение байта в ffmpeg stdin - PullRequest
0 голосов
/ 01 марта 2019

Я пытаюсь передать необработанные кадры h264 через STDIN в ffmpeg, но получаю

 [h264 @ 0x3ced540] bytestream overread -28
 [h264 @ 0x3ced540] error while decoding MB 52 6, bytestream -28

Когда я использую файл на диске, ошибок нет.

fd_ffmpeg = popen("/root/ffmpeg -y -hide_banner -loglevel trace -f h264 -i pipe:0 -vcodec copy -an -movflags +frag_keyframe+empty_moov+default_base_moof -threads 1 -f mp4 \"/root/out.mp4\"", "w");

fwrite(p.data(), 1, p.size(), fd_ffmpeg);

Я пытаюсь создать mp4 в реальном времени, так как кадры приходят для потоковой передачи.

РЕДАКТИРОВАТЬ: У меня был некоторый прогресс, это было потому, что fwrite возвращал частичную запись.Теперь ошибка:

Could not write header for output file #0 (incorrect codec parameters ?): Immediate exit requested

EDIT2: Хорошо, проблема теперь в том, что FFMPEG начинает обрабатывать и выводить видео, только если STDIN закрывается.Есть ли способ запустить его в потоковом режиме, кадр за кадром, чтобы получить вывод ffmpeg?

...