Как правильно использовать AVAssetExportSession для установки метаданных для аудиоактива?

Я просмотрел все примеры установки метаданных с помощью AVAssetExportSession, но даже несмотря на то, что экспорт аудио работает нормально (результирующий аудиофайл воспроизводится нормально), метаданные по-прежнему не экспортируются вместе с файлом. Я использую Xcode 4.5, целевая сборка iOS 5, тестовое устройство iOS 6. Пожалуйста, посмотрите код, который я использую ниже, и сообщите мне, что я делаю неправильно.

заголовок

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

person user15209    schedule 14.10.2012    source источник
comment
Обновление: используя тот же код, но вместо экспорта CAF, если я экспортирую в M4A, метаданные экспортируются просто отлично.   -  person user15209    schedule 16.10.2012
comment
что такое метаданные и для чего они используются?   -  person jgvb    schedule 27.06.2014
comment
@ user15209, вы должны добавить свой комментарий в качестве ответа и принять его.   -  person Rhythmic Fistman    schedule 02.04.2015


Ответы (1)


Вы пробовали установить идентификатор?

как:

    let authorMeta = AVMutableMetadataItem()
    authorMeta.identifier = AVMetadataCommonIdentifierAuthor
    authorMeta.key = AVMetadataQuickTimeMetadataKeyAuthor
    authorMeta.keySpace = AVMetadataKeySpaceCommon
    authorMeta.value = "NFer"
person NFerocious    schedule 18.08.2015