0

Я хочу получить код ISRC для локальных песен itunes. Я могу получить метаданные следующих кодов:Код ISRC из объекта AVMetadataItem c

MPMusicPlayerController *mp= mp = [MPMusicPlayerController applicationMusicPlayer]; 
    NSURL *assetURL = [mp.nowPlayingItem valueForProperty:MPMediaItemPropertyAssetURL]; 
    AVAsset *asset = [AVAsset assetWithURL:assetURL]; 
    NSArray *metadata = [asset commonMetadata]; 
     for (AVMetadataItem* item in metadata) { 
      NSString *key = [item commonKey]; 
      NSString *value = [item stringValue]; 
      NSLog(@"extra iptions %@",[item extraAttributes]); 
      NSLog(@"key = %@, value = %@", key, value); 

      NSLog(@"keyspace and Local %@ %@",[item keySpace],[item key]); 

     } 

Но я действительно интересно, о том, как получить ISRC (International Standard Record Coding).

ответ

3

Попробуйте это (предупреждение: набранное в браузер)

NSArray *metadata = [asset metadataForFormat:AVMetadataFormatID3Metadata]; 
if (metadata == nil) { 
    NSLog(@"No ID3 metadata for asset: %@", asset); 
} 
// From https://developer.apple.com/library/ios/documentation/AVFoundation/Reference/AVFoundation_ID3Constants/Reference/reference.html 

NSArray *filteredMetadata = [AVMetadataItem metadataItemsFromArray:metadata withKey:AVMetadataID3MetadataKeyInternationalStandardRecordingCode keySpace:nil]; 
AVMetadataItem *item = [filteredMetadata firstObject]; 
if (item != nil) { 
    NSLog(@"ISRC: %@", item.stringValue); 
} else { 
    NSLog(@"No ISRC found for: %@", asset); 
} 

EDIT: Я должен упомянуть, почему исходный код не печатал значение МНИКА потому, что ISRC не является частью общее пространство метаданных и не будет включено в массив, возвращаемый [asset commonMetadata]. Ключ ISRC специфичен для метаданных ID3, поэтому, если ваш актив не имеет связанных с ним метаданных ID3, вы не сможете получить эту информацию.

+0

Hi indragie Спасибо за ваш ответ ... Несколько раз вывод «Нет ISRC найден» ... Некоторое время он печатает название веб-сайта, например «Desinapster.com» .. что это значит? –

+0

Если это печать «Нет ISRC found», это означает, что метаданные ISRC не были установлены для этого актива, и независимо от того, что его печать является значением поля метаданных ISRC. Возможно, вы захотите записать массив 'filterMetadata', чтобы увидеть, есть ли что-то более одного элемента метаданных, но не должно быть. – indragie

+0

Кроме того, вы можете попробовать перейти в «AVMetadataKeySpaceID3» к параметру keySpace в «AVMetadataItem + metadataItemsFromArray: withKey: keySpace», чтобы узнать, как это каким-то образом изменяет отфильтрованные результаты. – indragie