2012-10-14 1 views
22

私はAVAssetExportSessionを使用してメタデータを設定するためのすべての例を見てきましたが、オーディオの書き出しはうまくいきますが(結果としてオーディオファイルは正常に再生されます)、ファイルにエクスポートされたメタデータはありません。私はXcode 4.5を使用しています。ターゲットiOS 5をビルドし、iOS 6をテストします。私が使用しているコードを見てください。私が間違っていることを教えてください。AVAssetExportSessionを使用してオーディオアセットのメタデータを正しく設定するにはどうすればよいですか?

ヘッダ

// for metadata export 

NSArray *MyMetadata; 
AVMutableMetadataItem *common1; 
AVMutableMetadataItem *common2; 
AVMutableMetadataItem *common3; 
AVMutableMetadataItem *common4; 

実装

AVAsset *asset = [AVAsset assetWithURL:audioFileInput]; 
AVAssetExportSession *exportSession = [AVAssetExportSession exportSessionWithAsset:asset presetName:AVAssetExportPresetPassthrough]; 

if (!exportSession) { 
    return; 
} 

CMTime startTime = CMTimeMake((int)(floor(fileStartMarker * 100)), 100); 
CMTime stopTime = CMTimeMake((int)(ceil(fileEndMarker * 100)), 100); 
CMTimeRange exportTimeRange = CMTimeRangeFromTimeToTime(startTime, stopTime); 

exportSession.outputURL = audioFileOutput; 
exportSession.outputFileType = @"com.apple.coreaudio-format"; 
exportSession.timeRange = exportTimeRange; 

// define meta data for file 
// Common metadata 
common1 = [[AVMutableMetadataItem alloc] init]; // Title 
common1.keySpace = AVMetadataKeySpaceCommon; 
common1.key = AVMetadataCommonKeyTitle; 
common1.value = @"Title Test Value"; 

common2 = [[AVMutableMetadataItem alloc] init]; // Description 
common2.keySpace = AVMetadataKeySpaceCommon; 
common2.key = AVMetadataCommonKeyDescription; 
common2.value = @"Description Test Value"; 

common3 = [[AVMutableMetadataItem alloc] init]; // Creation Date 
common3.keySpace = AVMetadataKeySpaceCommon; 
common3.key = AVMetadataCommonKeyCreationDate; 
common3.value = @"Creation Date Test Value"; 

common4 = [[AVMutableMetadataItem alloc] init]; // Software 
common4.keySpace = AVMetadataKeySpaceCommon; 
common4.key = AVMetadataCommonKeySoftware; 
common4.value = @"My File Trimmer"; 

MyMetadata = [[NSArray alloc] initWithObjects:common1, common2, common3, common4, nil]; 
exportSession.metadata = MyMetadata; 

[common1 release]; 
[common2 release]; 
[common3 release]; 
[common4 release]; 

[exportSession exportAsynchronouslyWithCompletionHandler:^{ 
    if (exportSession.status == AVAssetExportSessionStatusCompleted) { 
     // export done 
    } 
    else if (exportSession.status == AVAssetExportSessionStatusFailed)  { 
     // export failed 
    } 
}]; 

[MyMetadata release]; 
+0

更新:

よう

。 – user15209

+0

メタデータは何ですか?それは何のために使用されていますか? – jgvb

+1

@ user15209あなたはあなたのコメントを回答として追加し、それを受け入れるべきです –

答えて

1

あなたは識別子を設定しようとしたことがありますか?同じコードを使用して、代わりに私はうまくメタデータの輸出をM4Aにエクスポートする場合は、CAFのエクスポート:

let authorMeta = AVMutableMetadataItem() 
    authorMeta.identifier = AVMetadataCommonIdentifierAuthor 
    authorMeta.key = AVMetadataQuickTimeMetadataKeyAuthor 
    authorMeta.keySpace = AVMetadataKeySpaceCommon 
    authorMeta.value = "NFer" 
関連する問題