2

AVPlayer を使用して iPod の曲を再生できることはわかっていますが、をAVAudioPlayer使用して iPod の曲の URL でを初期化する方法がわかりませんinitWithContentsOfURL。試してみると、AVAudioPlayer初期化時に NULL が返されます。

アプリがバックグラウンドで実行されている場合、さらに処理するためAVAudioPlayerにデリゲート メソッドを使用する必要があるため、使用する必要があります (つまり、アプリがバックグラウンドで実行されている場合、デリゲート メソッドが呼び出されます。ただし、デリゲート メソッドは提供されないため、バックグラウンドで実行されない通知を使用します)。audioPlayerDidFinishPlayingAVAudioPlayeraudioPlayerDidFinishPlayingAVPlayer

次のコードは、AVPlayer で iPod の曲を再生するためのものです。

- (void)viewDidLoad {

    [super viewDidLoad];
    AVAudioSession *session = [AVAudioSession sharedInstance];
    [session setCategory:AVAudioSessionCategoryPlayback error:nil];
    NSError *error = nil;

    [session setActive:YES error:&error];
    MPMediaQuery *query = [MPMediaQuery songsQuery];
    NSArray *collection = [query items];
    MPMediaItem *item = [collection objectAtIndex:0];
    NSLog(@"%@",[item valueForProperty:MPMediaItemPropertyTitle]);
    NSURL *url = [item valueForProperty:MPMediaItemPropertyAssetURL];
    AVPlayer *player = [[AVPlayer alloc]initWithURL:url];   // <-- Line to Replace
    [player play];
}

これはうまくいきます。しかし、最後から 2 番目の行を次のように置き換えると:

    AVAudioPlayer *player = [[AVAudioPlayer alloc]initWithContentsOfURL:url error:nil];

への呼び出しinitWithContentsOfURLは NULL を返します。

を使用すると NULL が返されるのに、使用AVAudioPlayerすると初期化されたプレーヤーが返される理由について何か考えはありますAVPlayerか?

Technical Q&A http://developer.apple.com/library/ios/#qa/qa1634/_index.htmlによると、「initWithContentsOfURL で使用される URL: はファイル URL (file://) である必要があります。つまり、ローカル パス。」

iPod ライブラリ内の曲の URL を取得すると、パスは次のようになります。

ipod-library://item/item.mp3?id=-4017276016911605928

私の iPod ライブラリへのこのパスは「ローカル パス」とは見なされないということですか、initWithContentsOfURLそれとも NULL を返すバグと見なされますか?

誰か考えますか?

4

1 に答える 1

1

私が収集できることから、重要なのは url パスでありAVAudioPlayer、バンドルに対してローカルである必要があるため、あなたは自分の質問に答えました。AVPlayer通知、検索AVPlayerDemoで使用する例がありplayerItemDidReachEndますが、バックグラウンドで実行されるかフォアグラウンドで実行されるかはわかりません。

于 2012-02-22T16:00:39.413 に答える