2011-04-25 4 views
9

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에 앱 특정 값을 설정할 수 있습니까? 이 열쇠는 실제로 무엇을 나타 냅니까?

+0

는 AVMetadataCommonKeyCreator는 저장되지 않습니다. Apple에보고 할 시간. – Dado

+0

iOS 8.1에서 'AVAssetWriter'로 파일 형식에 저장할 메타 데이터를 가져올 수 없습니다. @Dado가 귀하의 보고서에서 얻은 것이 있습니까? – OrangeDog

답변

2

약 1 년 전에 같은 문제가있었습니다. AVFoundation을 사용하여 오디오 파일을 작성했을 때 메타 데이터가 표시되지 않았습니다. 나는 AVMetadataCommonKeyCreator가 작동하지 않는다고 생각한다. 나는 지금은 말할 수 없다. 그러나 그렇다.

C 라이브러리 taglib을 사용하여이 문제를 해결했습니다. http://taglib.github.com iOS 용으로이 라이브러리를 만드는 것은 정말 쉽습니다. 나는 당신이 그것을 컴파일 할 수 없다면 당신이 몇몇 파일들을 삭제할 수 있다고 생각한다.

1

또한 AVMetadataCommonKeyCreator이 동영상 저작물의 메타 데이터에 저장되지 않는다는 것을 확인하고자합니다. 내가 시도한 다른 것들 (AVMetadataCommonKeyTitle, AVMetadataCommonKeyDescription, 등등)이 효과가있다. 내 기본 SDK는 iOS 8.2입니다.

제작자 키에는 특별한 것이 있습니까? 애플은 다른 용도로 그것을 예약합니까? 우리에게 제한된 다른 키가 있습니까 (아니면 그냥 작동하지 않는 것입니까?)?

(I은 23 AVMetadataCommonKeys의 모든 일을 테스트하는 시간의 사치가 없었어요 ..)

난 아직 어떤 문제에 대한 iOS7에에 같은 문제에 봉착
관련 문제