1

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];
}
4

1 に答える 1