AVAudioPlayer를 사용하여 오디오 스트리밍을 수행하고 있습니다. 이제 일부 오디오 메타 데이터 (예 : 아티스트, 앨범 이름, 제목 및 아트 워크)를 잠금 화면에 표시하고 싶습니다. 그러나 나는 다음과 같은 문제를 받고 있어요 :AVAudioPlayer, MPNowPlayingInfoCenter 및 오디오 메타 데이터
•를 그때 내가 메타 데이터를 얻을 수 있습니다, URL을 생성하기 위해 문을
NSURL *url = [NSURL URLWithString:urlString];
를 사용하는 경우. 그러나 오디오 플레이어가 멈추고 (단지 몇 초간의 오디오 재생) 오디오를 끝내지 못합니다. 나는 URL을 생성하기 위해 문
NSURL *url = [[NSURL alloc] initWithString:urlString];
를 사용하는 경우
•은 오디오 플레이어 잘 작동합니다. 그러나 메타 데이터를 얻기 위해 코드는 ([asset availableMetadataFormats]의 NSString * 형식) 루프에 포함되지 않습니다.
아래는 메타 데이터를 얻기 위해 사용하는 코드입니다. 위의 두 NSURL 작성 사이의 차이점을 알고 싶습니다. 또한 오디오 플레이어가 메타 데이터를 가져올 때 제대로 작동 할 수 있도록이 문제를 해결하는 방법. 많은 감사드립니다.
Class playingInfoCenter = NSClassFromString(@"MPNowPlayingInfoCenter");
if (playingInfoCenter)
{
//NSURL *url = [NSURL URLWithString:urlString];
NSURL *url = [[NSURL alloc] initWithString:urlString];
AVURLAsset *asset = [AVURLAsset URLAssetWithURL:url options:nil];
NSMutableDictionary *songInfo = [[NSMutableDictionary alloc] init];
for (NSString *format in [asset availableMetadataFormats])
{
for (AVMetadataItem *metadataItem in [asset metadataForFormat:format])
{
if ([metadataItem.commonKey isEqualToString:@"artwork"])
{
UIImage* image = [UIImage imageWithData:[(NSDictionary*)metadataItem.value objectForKey:@"data"]];
MPMediaItemArtwork *albumArt = [[MPMediaItemArtwork alloc] initWithImage:image];
[songInfo setObject:albumArt forKey:MPMediaItemPropertyArtwork];
}
else if ([metadataItem.commonKey isEqualToString:@"title"])
{
[songInfo setObject:metadataItem.value forKey:MPMediaItemPropertyTitle];
}
else if ([metadataItem.commonKey isEqualToString:@"albumName"])
{
[songInfo setObject:metadataItem.value forKey:MPMediaItemPropertyAlbumTitle];
}
else if ([metadataItem.commonKey isEqualToString:@"artist"])
{
[songInfo setObject:metadataItem.value forKey:MPMediaItemPropertyArtist];
}
}
}
[[MPNowPlayingInfoCenter defaultCenter] setNowPlayingInfo:songInfo];
}