Пишу полученные пакеты в двоичных файлах. Когда запись первого файла завершена, я вызываю flush:
avcodec_send_frame(context, NULL);
Это сигнал окончания потока. Но когда я отправляю новый кадр в кодировщик, функция возвращает AVERROR_EOF (man: кодировщик сброшен, и новые кадры не могут быть отправлены на него) . Что нужно сделать, чтобы кодировщик взял кадры после очистки?
Пример: при декодировании вы можете позвонить:
avcodec_flush_buffers(context);
Эта функция изменяет поток, но только для декодирования.
Может быть, аналоговая функция для кодирования?
Идеи:
1) не вызывать флеш. Но кодер буферизует кадры внутри и выдает некоторые пакеты только после сброса (используя h.264 с b-кадрами) , тогда как некоторые пакеты попадают в следующий файл.
2) Восстановить контекст кодека?
Подробности: использовать Win 7, Qt 5.10, ffmpeg 4.0.2