2012-10-14 13 views
22

Ho esaminato ogni esempio che posso trovare per l'impostazione dei metadati utilizzando AVAssetExportSession, ma anche se l'esportazione audio funziona correttamente (il file audio risultante funziona correttamente), non sono ancora stati esportati metadati con il file. Sto usando Xcode 4.5, build di destinazione iOS 5, dispositivo di prova iOS 6. Si prega di vedere il codice che sto usando qui sotto, e per favore fatemi sapere cosa sto facendo male.Come utilizzare correttamente AVAssetExportSession per impostare i metadati per una risorsa audio?

intestazione

// for metadata export 

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

implementazione

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

Update: utilizzando lo stesso codice, ma invece di esportare CAF, se esporto a M4A esportazioni metadati bene. – user15209

+0

qual è il metadata e a cosa serve? – jgvb

+1

@ user15209 dovresti aggiungere il tuo commento come risposta e accettarlo –

risposta

1

Hai provato impostando l'identificatore?

come:

let authorMeta = AVMutableMetadataItem() 
    authorMeta.identifier = AVMetadataCommonIdentifierAuthor 
    authorMeta.key = AVMetadataQuickTimeMetadataKeyAuthor 
    authorMeta.keySpace = AVMetadataKeySpaceCommon 
    authorMeta.value = "NFer" 
Problemi correlati