SurfaceView と組み合わせた MediaPlayer に関するエラーが発生しました。
次のようにインターネットからストリーミングして、サーフェスビューでビデオを再生しています。
mPreview = (SurfaceView) findViewById(R.id.surface);
videoFL = (FrameLayout) findViewById(R.id.videoFL);
SurfaceHolder holder = mPreview.getHolder();
holder.addCallback(this);
holder.setType(SurfaceHolder.SURFACE_TYPE_PUSH_BUFFERS);
その後、最初の MediaPlayer をそれに接続しようとしました。
MediaPlayer mediaPlayer = new MediaPlayer();
mediaPlayer.setDataSource(videos.get(position));
mediaPlayer.prepareAsync();
mediaPlayer.setOnBufferingUpdateListener(this);
mediaPlayer.setOnCompletionListener(this);
mediaPlayer.setOnPreparedListener(this);
mediaPlayer.setOnVideoSizeChangedListener(this);
mediaPlayer.setAudioStreamType(AudioManager.STREAM_MUSIC);
mediaPlayer.setDisplay(holder);
最初のビデオをストリーミングしている間、ユーザーの時間を節約するために、2 番目のビデオを既にバッファリングしています。2 番目の準備済みの MediaPlayer インスタンスを SurfaceView にアタッチするには、次のようにして古いインスタンスをリリースします。
mediaPlayer.release();
mediaPlayer = null;
....
mediaPlayer2.setDisplay(holder);
ICS と Jelly Bean ではこのソリューションは問題なく機能しますが、Gingerbread では計画どおりに機能しません。ビデオは再生されていますが、表示されていません (黒い画面で、ビデオ内のどこかに写真が一度だけ表示されます)。
mediaPlayer2.getCurrentPosition();
ここで、SeekBar で常に正しい位置を取得します。HTC Wildfire S で試してみました。
Gingerbread でこのエラーが発生する理由を推測できる人はいますか?
よろしく、
ツェマン