MediaPlayer(Android ICS)を使用して複数のビデオをループ再生し、oncompletion()が呼び出されるたびにビデオを変更しようとしています。
それはうまく機能しますが、ランダムな時間の後にアプリケーションがフリーズし、エラーが発生します:
[SurfaceView]接続:すでに接続されています(cur = 3、req = 3)setVideoSurfaceTextureが失敗しました:-22
このエラーが発生すると、内部的にリセットプレーヤーが呼び出されます
ref:mediaplayer.cpp
if (err != OK) {
LOGE("setVideoSurfaceTexture failed: %d", err);
// Note that we must do the reset before disconnecting from the ANW.
// Otherwise queue/dequeue calls could be made on the disconnected
// ANW, which may result in errors.
reset();
disconnectNativeWindow();
return err;
}
私のコードに従って、onprepared()の通知を受け取り、再生を開始します。
実際には、このエラーのために再生はありません。
したがって、この問題が発生し、メディアプレーヤーが再生されていないときに、メディアプレーヤーをリセットしてprepare()を呼び出そうとしますが、このバグをキャプチャできません(mp.isPlaying()-> true(bec'zはonpreparedでstart()と呼ばれます) ())。
私は次のようなロジックを試します
onprepared() {
mp.start();
if (pbm : [SurfaceView] connect : already connected (cur=3, req=3)
setVideoSurfaceTexture failed : -22 ) {
reset the mediaplayer source and call prepare
}
}
このバグを見つけてメディアプレーヤーを再起動するにはどうすればよいですか?