使用AVFoundation将章节信息添加到现有视频

时间:2014-09-14 07:54:49

标签: ios video metadata avfoundation avassetexportsession

我正在尝试将章节标记(文本+图像)添加到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是否能够合并章节曲目。

在我发疯之前,有没有人找到办法做到这一点?我很想放弃整个章节的想法,只想保存一个引用该视频的特定于应用程序的文件。

1 个答案:

答案 0 :(得分:1)

Apple的WWDC 2014上有一个名为Harvising Metadata in Audiovisual Media的会议。观看视频:https://developer.apple.com/videos/wwdc/2014/

另外,请查看名为AVTimedAnnotationWriter

的示例代码