Добавить вложение в Матроску (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 для чтения/записи видеоданных из/в mkv. Поэтому мое любимое решение также будет зависеть только от libav. Если это невозможно, я бы рассмотрел возможность введения libEBML и libMatroska в качестве новых зависимостей (таких же, как MKVToolNix).

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


person Faber    schedule 01.10.2015    source источник


Ответы (1)


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

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

person uli m.    schedule 02.05.2016