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

我正在尝试将章节标记(文本+图像)添加到iOS中的现有video。 使用内置函数读取它们非常简单:

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); } } 

到目前为止,我还没有find一种将定时元数据写入文件的方法。 我可以使用AVAssetExportSession和AVMutableMetadataItem轻松地编写普通的元数据(如标题文本或图片)。 有一个AVMutableTimedMetadataGroup,但令人沮丧的是似乎没有办法将这些写入轨道。

我目前的想法是,我需要将章节信息写入临时文件,然后使用AVMutableComposition将章节轨道合并到现有video中。 当然,这留下了写章节信息的问题。 我可以手动编写一个MP4容器,也可以使用第三方库(我想避免这样做),或者我可以尝试说服AVAssetWriter以某种方式写定时元数据轨道,尽pipe没有logging。 然后,我仍然不知道AVMutableComposition是否能够合并章节轨道。

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

苹果公司的WWDC 2014上有一个名为Harnessing Metadata的video媒体会议。 看看这里的video: https : //developer.apple.com/videos/wwdc/2014/

另外,请查看名为AVTimedAnnotationWriter的示例代码