Android支持是否正在编写'软件' Mp4s中的元数据字段?

时间:2015-09-17 22:09:03

标签: android metadata mp4

有没有办法编写'软件' Android中mp4的元数据字段?在API中,我看到了MediaMetadata类(https://developer.android.com/reference/android/media/MediaMetadata.html),但它似乎主要关注音乐的元数据(艺术家,专辑等)。

简而言之,我在iOS中寻找相当于AVMetadataCommonKeySoftware的东西:https://developer.apple.com/library/prerelease/ios/documentation/AVFoundation/Reference/AVFoundationMetadataKeyReference/index.html#//apple_ref/doc/constant_group/Common_Metadata_Keys

2 个答案:

答案 0 :(得分:0)

没有。如果我理解你,你想要添加/修改元数据标签吗? Android本身并不支持修改mp4文件。 MP4有一个放置元数据的标准位置,但没有使用标记的标准。它只有一个copywrite标签。 mp4文件结构有原子/盒子,它使用各种其他盒子的UTDA子盒,如MOOV,用于自定义数据。有些mp4是用包含id3.2标签的ID32盒写的。因此,并非所有mp4都能保证拥有软件标签或甚至相同的元数据。 Apple使用quicktime元数据(' MOOV'框)。你可以使用像mp4parsersee this answer)之类的java库来获取盒子信息,使用另一个库来解析(moov,ID32,ect)的标签信息,然后你可以把它放回原处。您的软件标签并使用mp4parser将其写回文件。

答案 1 :(得分:0)

JCodec现在提供API和CLI工具,用于在MP4文件中添加/编辑/删除iTunes元数据。阅读更多相关信息: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团队正在研究它。