AVAudioPlayer を使用してオーディオ ストリーミングを実行しています。ロック画面にいくつかのオーディオ メタデータ (アーティスト、アルバム名、タイトル、アートワークなど) を表示したいと思います。ただし、次のような問題が発生しています。
• ステートメントを使用する場合
NSURL *url = [NSURL URLWithString:urlString];
URL を作成すると、メタデータを取得できます。しかし、オーディオ プレーヤーは停止し (数秒間のオーディオを再生するだけ)、オーディオを終了しません。
• ステートメントを使用する場合
NSURL *url = [[NSURL alloc] initWithString:urlString];
URL を作成するために、オーディオ プレーヤーは正常に動作します。しかし、コードはメタデータを取得するために for (NSString *format in [asset availableMetadataFormats]) ループに入りません。
以下は、メタデータを取得するために使用しているコードです。上記の 2 つの 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];
}