我正在尝试将章节标记(文本+图像)添加到iOS中的现有视频中。使用内置函数读取它们非常简单:
NSLocale * locale = [chapterLocalications lastObject];
NSLog(@"Locale: %@", [locale localeIdentifier]);
NSArray *keys = @[AVMetadataCommonKeyTitle, AVMetadataCommonKeyArtwork];
NSArray *chapters = [asset chapterMetadataGroupsWithTitleLocale:locale containingItemsWithCommonKeys:keys];
for (AVTimedMetadataGroup * metadataGroup in chapters) {
NSArray * items = metadataGroup.items;
CMTimeRange timeRange = metadataGroup.timeRange;
NSLog(@"time: %@", CMTimeCopyDescription(NULL, timeRange.start));
for (AVMetadataItem * metadataItem in items) {
NSLog(@"key: %@", metadataItem.commonKey);
NSLog(@"value: %@", metadataItem.value);
}
}
到目前为止,我还没有找到将定时元数据写入文件的方法。我可以使用AVAssetExportSession和AVMutableMetadataItem轻松编写普通元数据(如标题文本或图片)。有一个AVMutableTimedMetadataGroup,但令人沮丧的是,似乎没有办法将这些实际写入轨道。
我目前的想法是我需要将章节信息写入临时文件,然后使用AVMutableComposition将章节轨道合并到现有视频中。当然,这留下了写章信息的问题。我可以手动编写MP4容器或者使用第三方库(我想避免使用),或者我可以尝试说服AVAssetWriter以某种方式编写定时元数据轨道,但也没有记录。然后我还不知道AVMutableComposition是否能够合并章节曲目。
在我发疯之前,有没有人找到办法做到这一点?我很想放弃整个章节的想法,只想保存一个引用该视频的特定于应用程序的文件。
答案 0 :(得分:1)
Apple的WWDC 2014上有一个名为Harvising Metadata in Audiovisual Media的会议。观看视频:https://developer.apple.com/videos/wwdc/2014/
另外,请查看名为AVTimedAnnotationWriter
的示例代码