10

iOS6 デバイス用のオンライン ラジオ アプリを開発しています。このタスクを達成するために、さまざまなラッパーを探しました。AVPlayer、MPMoviePlayerController など。

AVPlayer はオーディオのみのアプリケーションなので、私の目的に使用する方が正しいように聞こえるので、AVPlayer を使用してみました。しかし、すぐにこの問題に遭遇しました:ここ

したがって、私は MPMoviePlayerController に切り替えました。これが私がやろうとしていることです:

    pPlayer = [[MPMoviePlayerController alloc] initWithContentURL:[NSURL URLWithString:@"http://launch.fusionradio.fm:8004"]];
    pPlayer.movieSourceType = MPMovieSourceTypeStreaming;
    pPlayer.view.hidden = YES;

    [[AVAudioSession sharedInstance] setCategory:AVAudioSessionCategoryPlayback error:nil];
    [[AVAudioSession sharedInstance] setActive:YES error:nil];

    [pPlayer prepareToPlay];
    [pPlayer play];

    pPlayer.shouldAutoplay = YES;

    [[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(StreamStateChanged) name:MPMoviePlayerLoadStateDidChangeNotification object:pPlayer];

私の StreamStateChanged メソッドで私がやっている:

NSLog(@"Trying to replay");
[pPlayer pause];

[pPlayer play];

pPlayer は MPMoviePlayer です。割り込みがある場合を除いて、すべて問題ありません。コンソールは次のメッセージを吐き出します。

    Took background task assertion (1) for playback stall.
    Ending background task assertion (1) for playback stall.

アサーション後の数は増加し続けます。その後、インターネット接続が安定すると回復します。

私の質問は: このアプローチは正しいですか? 途中で何か間違ったことをしていますか?そして、そのアサート メッセージを無視してもよろしいですか?

PS : MPMoviePlayerController とは対照的に、別の API を使用してラジオ ストリーミング アプリを開発するためのより良いアプローチがあるかどうかを提案してください。

ありがとうございました :)

4

1 に答える 1

9

これらの内部アサート メッセージを無視することは完全に正しいです。それらについてあなたができることは何もありません。

于 2013-02-18T10:18:15.397 に答える