2015-09-17 4 views
0

Есть ли способ написать поле метаданных программного обеспечения в mp4 в Android? В API-интерфейсах я вижу класс MediaMetadata (https://developer.android.com/reference/android/media/MediaMetadata.html), но, похоже, это в основном сосредоточено на метаданных музыки (исполнителя, альбома и т. Д.).Поддерживает ли поддержка Android «поле метаданных« Software »в Mp4s?

Короче говоря, я ищу эквивалент AVMetadataCommonKeySoftware над в прошивкой: https://developer.apple.com/library/prerelease/ios/documentation/AVFoundation/Reference/AVFoundationMetadataKeyReference/index.html#//apple_ref/doc/constant_group/Common_Metadata_Keys

ответ

0

Нет, если я правильно Вас понял, вы хотите добавить/изменить тег метаданных? Сам Android не поддерживает изменение файлов mp4. MP4 имеет стандартное место для размещения метаданных, но нет стандарта для использования тегов. Он имеет только тег copywrite. В файловой структуре mp4 есть атомы/ящики, и она использует под-ящик UTDA из разных других ящиков, таких как MOOV для пользовательских данных. Некоторые mp4s написаны с полем ID32, содержащим теги id3.2. Таким образом, не все mp4s гарантированно имеют программный тег или даже те же метаданные. Apple работает с быстрыми метаданными (поле «MOOV»). Вы можете использовать библиотеку java, такую ​​как mp4parser (see this answer), чтобы получить информацию о ящике, использовать другую библиотеку для разбора информации тега для (moov, ID32, ect), а затем вы вернете ее вместе со своим программным тегом и напишите обратно файл с помощью mp4parser.

0

JCodec теперь предоставляет API и средство CLI для добавления/редактирования/удаления метаданных iTunes в файлах MP4. Узнайте больше об этом: http://jcodec.org/docs/working_with_mp4_metadata.html

CLI находится в org.jcodec.movtool.MetadataEditorMain и API находится в org.jcodec.movtool.MetadataEditor.

Вот пример использования:

# Changes the author of the movie 
./metaedit -f -si ©ART=New\ value file.mov 

или же с помощью Java API:

MetadataEditor mediaMeta = MetadataEditor.createFrom(new 
    File("file.mp4")); 
Map<Integer, MetaValue> meta = mediaMeta.getItunesMeta(); 
meta.put(0xa9415254, MetaValue.createString("New value")); // fourcc for '©ART' 
mediaMeta.save(false); // fast mode is off 

Чтобы преобразовать строку в целое число FourCC вы можете использовать что-то вроде:

byte[] bytes = "©ART".getBytes("iso8859-1"); 
int fourcc = 
    ByteBuffer.wrap(bytes).order(ByteOrder.BIG_ENDIAN).getInt(); 

Однако, если вы берете только что перекодированный файл и повторно добавляете туда метаданные, iTunes и QuickTime не будут видеть он (хотя он появится в mediainfo). Это известная ошибка, и команда JCodec работает над этим.

Смежные вопросы