0

MediaPlayer (Android ICS) を使用して 2 つの動画をループ再生し、毎回入れ替えようとしています。

それはうまく機能しますが、ランダムな時間の後にアプリケーションがフリーズし、エラーが発生します:

[SurfaceView] connect : already connected (cur=3, req=3)
setVideoSurfaceTexture failed : -22

これが私のコードです:

public void onCreate(Bundle savedInstanceState) {

        ...
        mMediaPlayer = new MediaPlayer();

        try {

            mMediaPlayer.setDataSource( currentPath );

            mMediaPlayer.setDisplay(mPreview.getHolder());

            mMediaPlayer.setOnBufferingUpdateListener(this);
            mMediaPlayer.setOnCompletionListener(this);
            mMediaPlayer.setOnPreparedListener(this);
            mMediaPlayer.setOnVideoSizeChangedListener(this);
            mMediaPlayer.setOnErrorListener(this);

            mMediaPlayer.prepare();


        } catch (Exception e) {
    }

    public void onPrepared(MediaPlayer mp) {

       mp.start();
    }


    public void onCompletion(MediaPlayer mp) {

    try {
        mMediaPlayer.reset();

        if (mCurrentPath == mPath1)
         mCurrentPath = mPath2;
        else
         mCurrentPath = mPath1;

        mMediaPlayer.setDataSource( mCurrentPath );

        mMediaPlayer.prepare();

    } catch (Exception e) {
    }

}

何か案は ?

4

3 に答える 3

0

この問題を回避するには、次の手順を実行します

mediaPlayer に setOnErrorListener を設定し、 onErorr メソッド内で次の操作を行います

mediaPlayer.setDisplay(null);
mediaPlayer.reset();

この後、メディアプレーヤーを開始する前にサーフェスホルダーを再度設定します

mediaPlayer.setDisplay(surfaceHolder1);
mediaPlayer.start();  in onPrepared
于 2012-09-12T19:20:51.107 に答える