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 を使用してラジオ ストリーミング アプリを開発するためのより良いアプローチがあるかどうかを提案してください。
ありがとうございました :)