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];
Update: utilizzando lo stesso codice, ma invece di esportare CAF, se esporto a M4A esportazioni metadati bene. – user15209
qual è il metadata e a cosa serve? – jgvb
@ user15209 dovresti aggiungere il tuo commento come risposta e accettarlo –