Восстановление записанных данных mpeg через gstreamer

Я создал приложение, которое использует appsrc для записи файлов mp4 / mpeg. Событие EOS отправляется всякий раз, когда мне нужно остановить запись и файл создается успешно. Все идет хорошо, мой конвейер

appsrc! очередь ! видеорейт! ffmpegcolorspace! x264enc! mp4mux! расположение файловой ссылки = video.mp4

Случайно, если мое приложение выйдет из строя (не сможет успешно сгенерировать EOS), объем записанных данных будет полностью утерян.

Есть ли способ восстановить такие файлы в gstreamer. Я подумал, могу ли я добавить EOS, прочитав такие файлы в gstreamer. Есть ли возможность сделать это или что-то подобное, чтобы я не потерял данные.

Спасибо,

Рахул


person user2019276    schedule 28.01.2013    source источник


Ответы (2)


Вы можете объединить данные в транспортный поток MPEG (.ts) вместо файла MP4. Причина, по которой файл MP4 не читается после сбоя приложения, заключается в том, что mp4mux не имеет возможности записать атом moov файла, что можно сделать только после того, как все мультимедийные данные будут записаны (то есть, когда EOS обрабатывается). . Файл .ts создан для потоковой передачи и может быть прочитан, даже если конец файла не завершен.

Чтобы вызвать его, измените конец конвейера на:

... ! x264enc ! mpegtsmux ! filesink location=video.ts

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

person Multimedia Mike    schedule 30.01.2013

Вы можете использовать свойство «moov-recovery-file» и иметь возможность восстановить файл в случае сбоя. Подробнее см. atomrecovery.

person ensonic    schedule 31.01.2013