1

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 でこのエラーが発生する理由を推測できる人はいますか?

よろしく、

ツェマン

4

1 に答える 1