0

로컬 itunes 노래에 대한 ISRC 코드를 가져오고 싶습니다. 다음 코드에 따라 metaData를 얻을 수 있습니다.ISRC 코드 from 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 (국제 표준 레코드 코딩)을 얻는 방법에 대해 궁금합니다.

답변

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); 
} 

편집 : ISRC가의 일부가 아니므로 내가 언급해야한다, 원래 코드가 ISRC의 값을 출력하지 않은 이유는 공통 메타 데이터 공간이며 [asset commonMetadata]에 의해 반환 된 배열에 포함되지 않습니다. ISRC 키는 ID3 메타 데이터에만 해당되므로 자산에 ID3 메타 데이터가 연결되어 있지 않으면 해당 정보를 검색 할 수 없습니다.

+0

안녕하세요, 답변 해 주셔서 감사합니다 ... 출력 시간이 "ISRC 없음"입니다 ... "Desinapster.com"과 같은 웹 사이트 이름이 인쇄 될 때가 있습니다. –

+0

"No ISRC found"가 인쇄되면 해당 자산에 대해 ISRC 메타 데이터가 설정되지 않았고 ISRC 메타 데이터 필드의 값이 인쇄 된 것입니다. 'filteredMetadata' 배열을 로깅하여 거기에 메타 데이터 항목이 두 개 이상 있는지 알아야하지만, 없어야합니다. – indragie

+0

또한'AVMetadataKeySpaceID3'을'AVMetadataItem + metadataItemsFromArray : withKey : keySpace'의 keySpace 매개 변수에 전달하여 어떻게 든 필터링 된 결과가 변경되는지 확인할 수 있습니다. – indragie