【问题标题】:How can I write XMP metadata to a QuickTime video on iOS?如何在 iOS 上将 XMP 元数据写入 QuickTime 视频?
【发布时间】:2020-09-10 21:18:32
【问题描述】:

我正在尝试将一些 XMP 元数据附加到我使用 AVAssetExportSession 导出的 QuickTime 视频中。

AVFoundation 确实支持写入元数据 (AVMetadataItem),并且我已成功导出简单值,随后可以使用 exiftool 进行检查:

AVMutableMetadataItem *item = [AVMutableMetadataItem metadataItem];
item.identifier = [AVMetadataItem identifierForKey:AVMetadataCommonKeyTitle keySpace:AVMetadataKeySpaceCommon];
item.value = @"My Title";

exportSession.metadata = @[item];

但我无法配置我的 AVMetadataItem 以正确编码 XMP。根据Adobe XMP spec,QuickTime 视频中的 XMP 应该在 moov / udta / XMP_ 原子下,但我看不到使用 AVFoundation API 或任何对应的键空间制作分层元数据的方法到这部分元数据。

我还需要将 XMP 元数据写入图像,图像 I/O 确实对此有直接支持 (CGImageMetadataCreateFromXMPData),但我在 AVFoundation 中找不到任何等效项。

如果无法使用 AVFoundation(或类似的),我可能会考虑集成 XMP-Toolkit-SDK,但是当 AVFoundation几乎似乎可以满足我的需要时,这感觉就像一个笨拙的解决方案。 p>

【问题讨论】:

    标签: ios avfoundation metadata quicktime xmp


    【解决方案1】:

    在尝试了AVMetadataItem 的许多键/键空间和其他属性的变化后,我终于设法解决了这个问题:

    • AVMetadataKeySpaceQuickTimeUserData 键空间中使用自定义XMP_
    • 不要将值设置为NSString,而是设置为包含有效负载的UTF-8数据的NSData
    • dataType 设置为原始数据

    这导致 exiftool 可以按预期读取 XMP 属性。

    NSString *payload =
      @"<x:xmpmeta xmlns:x=\"adobe:ns:meta/\" x:xmptk=\"MyAppXMPLibrary\">"
        "<rdf:RDF xmlns:rdf=\"http://www.w3.org/1999/02/22-rdf-syntax-ns#\">"
          "<rdf:Description rdf:about=\"\" xmlns:xmp=\"http://ns.adobe.com/xap/1.0/\">"
            "<xmp:CreatorTool>My App</xmp:CreatorTool>"
          "</rdf:Description>"
        "</rdf:RDF>"
      "</x:xmpmeta>";
    
    NSData *data = [payload dataUsingEncoding:kCFStringEncodingUTF8];
    
    AVMutableMetadataItem *item = [AVMutableMetadataItem metadataItem];
    item.identifier = [AVMetadataItem identifierForKey:@"XMP_"
                                              keySpace:AVMetadataKeySpaceQuickTimeUserData];
    item.dataType = (NSString *)kCMMetadataBaseDataType_RawData;
    item.value = data;
    
    exportSession.metadata = @[item];
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2012-09-01
      • 1970-01-01
      • 1970-01-01
      • 2015-11-03
      • 2010-10-02
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多