2012-10-14 13 views
22

AVAssetExportSession'u kullanarak meta verileri ayarlamak için bulabildiğim her bir örneğe baktım, ancak ses dışa aktarma işlemi düzgün sonuçlansa bile (sonuçta ses dosyası oynatılıyorsa), dosyayla birlikte meta verisi hala yok. Xcode 4.5 kullanıyorum, iOS 5 hedef test cihazı, iOS 6 cihazını test ediyorum. Lütfen aşağıda kullandığım kodu inceleyin ve lütfen yanlış yaptığımı bildirin.Bir ses varlığı için meta verileri ayarlamak için AVAssetExportSession nasıl düzgün kullanılır?

başlık

// 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

Güncelleme:

gibi

. – user15209

+0

Meta veriler ve ne için kullanılır? – jgvb

+1

@ user15209 Yorumunuzu cevap olarak eklemeli ve kabul etmelisiniz –

cevap

1

Eğer tanımlayıcı ayarı denediniz uygulama? Aynı kodu kullanarak, ama bunun yerine sadece iyi meta ihracatını M4A ihracat ise, CAF ihraç:

let authorMeta = AVMutableMetadataItem() 
    authorMeta.identifier = AVMetadataCommonIdentifierAuthor 
    authorMeta.key = AVMetadataQuickTimeMetadataKeyAuthor 
    authorMeta.keySpace = AVMetadataKeySpaceCommon 
    authorMeta.value = "NFer" 
İlgili konular