IOS 6シミュレーターでアプリ(音楽およびビデオストリームプレーヤー)を実行するのに問題があります。
音楽またはビデオを開始すると、クラッシュして次のスレッドでエラーが表示されます:com.Apple.coremedia.networkbuffering
そしてこれはログ情報にあります:
2012-09-13 17:45:09.260 app[32563:c07] [MPAVController] Autoplay: Disabling autoplay for pause
2012-09-13 17:45:09.260 app[32563:c07] [MPAVController] Autoplay: Disabling autoplay
2012-09-13 17:45:09.305 app[32563:c07] [MPAVController] Autoplay: Enabling autoplay
2012-09-13 17:45:09.307 app[32563:c07] handlePlaybackNowPlayingNotification
2012-09-13 17:45:09.308 app[32563:c07] [MPAVController] Autoplay: Likely to keep up or full buffer: 0
2012-09-13 17:45:09.308 app[32563:c07] [MPAVController] Autoplay: Skipping autoplay, not enough buffered to keep up.
2012-09-13 17:45:09.318 app[32563:c07] [MPAVController] Autoplay: Enabling autoplay
2012-09-13 17:45:09.320 app[32563:c07] [MPCloudAssetDownloadController] Prioritization requested for media item ID: 0
HttpベースのストリームでMPMoviePlayerControllerを使用していますが、iOS4またはiOS5で正常に動作します
それを修正する方法についてのアイデアはありますか?
私はまったく同じ問題を抱えていました...
プレーヤーをインスタンス化した直後にこれを実行してみてください。
[player prepareToPlay];
Playを呼び出すと自動的に呼び出されるはずですが、iOS 6では、明示的に呼び出さないと問題が発生するようです。
私の場合、それは問題を解決しました。
あなたが観察しているのはクラッシュではなく例外です。ほとんどの場合、例外ブレークポイントが有効になっているため、アプリがクラッシュするという想定につながります。
その例外は実際にはSDKによって適切に処理(取得)され、アプリのクラッシュを引き起こしません。
これはシミュレータでのみ発生し、デバイスでは発生しないことに注意してください。
この問題は、この問題と密接に関連しています what-does-this-gdb-output-mean 。違いは、これらのエラーメッセージは表示されなくなりますが、例外はスローされます(ただし、coughtされます)。
xcode 4.5 + SDK6.0とxcode4.4.1 + SDK5.1の組み合わせを使用して、MPMoviePlayerControllerのios6バージョンに問題があることを確認しました。私はiPadでしか作業していません。
これが私の観察です:--- MPMoviePlayerControllerを使用するコードでiOS6.0でビデオが再生されるのを見たことがありません。 --xcode4.4.1およびSDK5.1では、iOSバージョン5.1、5.0、および4.3でコードが機能することを確認しました。 --xcode4.5およびSDK6.0では、プレーヤーは常にシミュレーターで失敗しますが、iOS5.1デバイスへのほとんどのインストールは機能します。 iOS 5.1デバイスにアプリを再インストールし、プレーヤーを試し続けました。一度だけ失敗しました。
プレーヤーが失敗したときの私の観察は次のとおりです。-プレーヤーが失敗したとき、私はあなたが上で述べたログを見ました。また、ログも表示されませんでした。 -MPMoviePlayerPlaybackDidFinishNotification通知を受け取った関数にブレークポイントを設定しました。それから私はプレーヤーでerrorLogを探しましたが、何もありませんでした。 MPMoviePlayerPlaybackDidFinishReasonUserInfoKeyを探しましたが、0(MPMovieFinishReasonPlaybackEnded)でした。したがって、MPMoviePlayerControllerには、何か問題が発生したという手がかりはありませんでした。
結論:ios6やSDK6にはバグがあります。
NSURL *url = [NSURL fileURLWithPath:[[NSBundle mainBundle] pathForResource:@"sample" ofType:@"mp4"]];
MPMoviePlayerViewController *moviePlayer = [[MPMoviePlayerViewController alloc] initWithContentURL:url];
moviePlayer.view.frame = self.view.frame;
moviePlayer.moviePlayer.shouldAutoplay=YES;
moviePlayer.moviePlayer.controlStyle = MPMovieControlStyleNone;
[moviePlayer.moviePlayer setFullscreen:YES animated:YES];
[self.view addSubview:moviePlayer.view];
[moviePlayer.moviePlayer play];
注:iOS 6より前は、[moviePlayer.moviePlayerplay]を呼び出す必要はありません。ビューにプレーヤービューを追加すると、再生が開始されますが、iOS 6では、再生関数を明示的に呼び出す必要があります
ios6用のMPMoviePlayerControllerで同じ問題が発生しています。だから私は私のコードをfllowingに変更しました、そして今それはうまく働いています。
NSURL *url = [NSURL fileURLWithPath:[[NSBundle mainBundle] pathForResource:@"sample" ofType:@"mp4"]];
MPMoviePlayerViewController *moviePlayer = [[MPMoviePlayerViewController alloc] initWithContentURL:url];
moviePlayer.view.frame = self.view.frame;
moviePlayer.moviePlayer.shouldAutoplay=YES;
moviePlayer.moviePlayer.controlStyle = MPMovieControlStyleNone;
[moviePlayer.moviePlayer setFullscreen:YES animated:YES];
[self.view addSubview:moviePlayer.view];
[moviePlayer.moviePlayer play];
私はまだこの問題を解決していませんが、MPMoviePlayerController
が全画面表示になるとき、またはコントローラーに潜在的な遅延があるときの私の特定のケースに関連しているようです。
私はWebからコンテンツをストリーミングしていません。コンテンツはデバイス上にあるため、最初はコンテンツがビューに正常に表示されます。
私の推測では、再生中の「デッドタイム」を防ぐために、MPMoviePlayerController
に新しい機能が実装されていると思います。映画のデータがオフラインになったり、Wi-Fiの範囲外に出たりすると、アプリがハングするのを見たことがあります。」
この問題を解決するための私の試みは、に渡された通知メッセージを確認することです-
(void)moviePlayBackDidFinish: (NSNotification*)notification
これは、ユーザー情報辞書を照会することによって行われます。
NSDictionary *userInfo = [notification userInfo];
このタイプの障害の場合、MPMoviePlayerPlaybackDidFinishReasonUserInfoKey
の値は0です。
それが出発点です。私の考えは、このユニークな失敗でこの時点で映画を復活させることです。
結果をお知らせします。
最初に私は以下のようなことをしました
[self.player.moviePlayer prepareToPlay];
[self.player.moviePlayer play];
self.player.moviePlayer.shouldAutoplay = YES;
以下の行を削除したとき
self.player.moviePlayer.shouldAutoplay = YES;
問題は解決しました。
また、MPMoviePlayerViewController
を使用してアプリにライブビデオを表示していますが、上記と同じエラーのリストが表示されます。 MPMoviePlayer
は、ビデオを表示するための大きなデータをサポートしていないことがわかりましたが、小さなビデオデータを使用すると、エラーは発生せず、正常に機能します。実際、映画プレーヤーのプロパティを再生および再生する準備をすることは問題ではありません。
より大きなデータを表示する必要がある場合は、アプリでwebviewを使用してください。
以下のコードに問題があり、プレーヤーは全画面表示になりますが、その直後に閉じて、ビデオがまったく再生されません。
NSURL * url = [NSURL URLWithString:@ " http://streaming.disponivel.uol.com.br/video360p2/288148-1192657.mp4 "];
_player = [[MPMoviePlayerViewController alloc] initWithContentURL:url];
[_player.moviePlayer setMovieSourceType:MPMovieSourceTypeFile];
[_player.moviePlayer setControlStyle:MPMovieControlStyleDefault];
[_player.moviePlayer setFullscreen:YES animated:YES];
[self presentMoviePlayerViewControllerAnimated:_player];
[_player.moviePlayer prepareToPlay];
[_player.moviePlayer play];