Как вы можете написать файл .mov с libav, который можно воспроизвести, если файл не завершен должным образом - PullRequest
1 голос
/ 04 февраля 2020

Я разрабатываю приложение для записи видео на c ++ с библиотекой libav c, которая записывает и кодирует h265 из канала камеры в контейнер .mov.

Я могу успешно воспроизвести файл .mov на всех стандартных видеопроигрывателях, но только в том случае, если запись завершена должным образом - то есть вызов av_write_trailer и правильное закрытие файла.

Однако одним из важных требований программного обеспечения является воспроизводимый файл .mov даже в событие, при котором запись прекращается ненадлежащим образом - т. е. потеря питания или целевой диск переполняется.

Я предполагаю, что это возможно, поскольку большинство устройств видеозаписи создают действительные файлы .mov, даже если у них заканчивается батарея или они заполняют их. target media.

Я попытался указать следующую опцию AVDictionary, которая предполагает перемещение соответствующей информации о потоке в начало файла:

av_dict_set(&options, "movflags", "faststart", 0);

Однако , это не делает неполные файлы воспроизводимыми.

1 Ответ

1 голос
/ 05 февраля 2020

Я считаю, что это параметры, которые вы ищете:

av_dict_set(&options, "movflags", "+frag_keyframe+empty_moov+faststart", 0);

Это то, что используется для потоковой передачи mp4 , поэтому поток одновременно воспроизводим и прерываем. .

Как недостаток, такой видео файл не будет доступен для поиска. Но вы можете, вероятно, постобработать такие неполные файлы и исправить заголовки после восстановления питания.

...