我有一個適用於iPhone的視頻錄製應用程序。我正在使用AVAssetWriter
將錄製的視頻數據寫入文件。我也有興趣將自定義元數據嵌入到文件中。例如:我想將我的應用程序標識爲視頻的創建者。設置和檢索AVMetadataCommonKeyCreator的值的問題
因此,創建資產編寫器後,我將使用密鑰AVMetadataCommonKeyCreator
的創建者值添加到資產編寫器的元數據中。
代碼片段如下:
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
設置應用特定值?這個鍵實際代表什麼?
我仍然有對什麼事上iOS7同樣的問題,AVMetadataCommonKeyCreator不會被保存。有時間向蘋果報告我想。 – Dado 2014-04-21 03:17:52
無法通過iOS 8.1中的'AVAssetWriter'獲取任何類型的元數據以保存爲任何文件格式。 @Dado做了什麼來自您的報告? – OrangeDog 2014-12-22 13:29:16