Добавить вложение в Matroska (mkv) программно после записи видео

Я хочу добавить protobuf сообщение в виде вложения в видеофайл Matroska (mkv) после того, как все видеокадры были записаны без копирования видео данных. Это должно быть возможно, потому что присоединение произвольного файла к MKV может быть достигнуто с помощью пакета MKVToolNix (для JPG):

# add attachment, no copy according to man page
mkvpropedit out.mkv --add-attachment ~/Downloads/hummingbird.jpg
.
.
# get attachment id
mkvmerge -i out.mkv
.
Attachment ID 1: type 'image/jpeg', size 821740 bytes, file name 'hummingbird.jpg'
.
# extract attachment
mkvextract attachments out.mkv 1:./test.jpg

Я хочу быть в состоянии выполнить тот же цикл чтения-записи, вызывая методы библиотеки. Желательно без необходимости писать protobuf сообщение в файл первым (например, путем передачи байтового массива сериализованного protobuf сообщение).

В настоящее время я использую libav для чтения / записи видеоданных с / на мкв. Поэтому мое любимое решение будет зависеть только от libav, Если это невозможно, я бы рассмотрел введение libEBML а также libMatroska как новые зависимости (так же, как MKVToolNix).

Какие ключевые функции в рамках должны быть вызваны для достижения цели? я точно уверен mbunkus знает решение …

0

Решение

Я еще не вложил файл программно, но смог прочитать вложение. Собранная при этом информация может, по крайней мере, помочь в реализации письма.

Вложения обрабатываются как дополнительные потоки. Поток для вложения не содержит фреймы. Вместо этого данные сохраняются как экстраданные для кодека для этого потока. Имя файла и тип MIME передаются кодеку в качестве метаданных.

0

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]