设置和获取AVMetadataCommonKeyCreator的值时出现问题

|| 我有一个用于iPhone的视频录制应用程序。我正在使用
AVAssetWriter
将录制的视频数据写入文件。我也有兴趣将自定义元数据嵌入文件中。例如:我想将我的应用程序标识为视频的创建者。 因此,在创建资产编写器之后,我将使用键“ 1”将创建者值添加到资产编写器的元数据中。 程式码片段如下:
AVAssetWriter *assetWrtr = [[AVAssetWriter alloc] initWithURL:inURL fileType:AVFileTypeQuickTimeMovie error:&error];
self.assetWriter = assetWrtr;
[assetWrtr release];

NSArray *existingMetadataArray = self.assetWriter.metadata;
NSMutableArray *newMetadataArray = nil;
if (existingMetadataArray) 
{
    newMetadataArray = [existingMetadataArray mutableCopy]; // To prevent overriding of existing metadata
}
else 
{
    newMetadataArray = [[NSMutableArray alloc] init];
}

AVMutableMetadataItem *item = [[AVMutableMetadataItem alloc] init];
item.keySpace = AVMetadataKeySpaceCommon;
item.key = AVMetadataCommonKeyCreator;
item.value = @\"My App\";

[newMetadataArray addObject:item];
self.assetWriter.metadata = newMetadataArray;
[newMetadataArray release];
[item release];
录制完成后,我试图使用AVURLAsset读取文件的内容。
NSURL *outputFileURL = [self.assetWriter outputURL];
AVURLAsset *asset = [AVURLAsset URLAssetWithURL:outputFileURL options:nil];
NSArray *keys = [NSArray arrayWithObject:@\"commonMetadata\"];

[asset loadValuesAsynchronouslyForKeys:keys completionHandler:^(void) {

    NSError *error = nil;
    AVKeyValueStatus durationStatus = [asset statusOfValueForKey:@\"commonMetadata\" error:&error];
    switch (durationStatus) {
        case AVKeyValueStatusLoaded:
            NSLog(@\"AVKeyValueStatusLoaded\");
            NSLog(@\"commonMetadata:%@\", [asset commonMetadata]);
            break;
        case AVKeyValueStatusFailed:
            NSLog(@\"AVKeyValueStatusFailed\");
            break;
        case AVKeyValueStatusCancelled:
            NSLog(@\"AVKeyValueStatusCancelled\");
            break;
    }
}];
但是,
[asset commonMetadata]
不返回任何
AVMetadataItems
。它返回一个空数组。 我可以设置其他元数据对象的值,例如
AVMetadataCommonKeyTitle
AVMetadataCommonKeyModel
AVMetadataCommonKeySource
。这些值被正确检索。问题仅在于
AVMetadataCommonKeyCreator
。请让我知道这种现象的原因。无法为
AVMetadataCommonKeyCreator
设置应用专用值吗?该密钥实际上代表什么?     
已邀请:
大约一年前,我也遇到了同样的问题。使用AVFoundation编写音频文件时,没有看到任何元数据。我认为AVMetadataCommonKeyCreator不起作用。我现在不能说,但这是事实。 我通过使用C库taglib http://taglib.github.com解决了这个问题 建立适用于iOS的程式库真的很容易。我认为如果无法编译,则可以删除一些文件。     
我还要确认ѭ1不会保存到视频资产的元数据中。我尝试过的其他工具(
AVMetadataCommonKeyTitle
AVMetadataCommonKeyDescription
等)都可以工作。我的基本SDK是iOS 8.2。 创建者密钥有什么特别之处吗?苹果是否将其保留作其他用途?还有其他限制于我们的键(或者就是不起作用)吗? (我没有足够的时间来测试23个AVMetadataCommonKeys中的每一个。。)     

要回复问题请先登录注册