1

私の質問は、MediaPlayers が多すぎると IOException preparefailed: status= 0x1 がログに記録される原因になりますか?

私のプログラムの実行方法は、再生するビデオごとに Media Player の個別のインスタンスを使用することです。実行の最後に、videoPlayer を停止して解放し、null にします。これで問題ない場合もありますが、ビデオ間を移動する速度が速すぎると IO 例外が発生し、ビデオが再生されないこともあります。また、サービスでバックグラウンド ミュージックを再生する mediaPlayer もあります。

基本的に、私の動画アクティビティは、ファイルの再生が終了するたびに新しい呼び出しを取得します。これはエラーであり、同じメディア プレーヤーを別のファイルで再利用する必要がありますか?

前もって感謝します

4

1 に答える 1

1

私は自分の答えを見つけました。これが良い方法かどうかはわかりませんが、次のようにします。

if(videoFile != null)
        {
            Log.i("INITPLAYER", videoFile);
            afd = getAssets().openFd(videoFile);

            instructionVideoPlayer = new MediaPlayer();

            instructionVideoPlayer.setDataSource(afd.getFileDescriptor(), afd.getStartOffset(), afd.getDeclaredLength());

            instructionVideoPlayer.setDisplay(holder);

            instructionVideoPlayer.prepare();

            instructionVideoPlayer.setOnCompletionListener(instructionVideoComplete);
            instructionVideoPlayer.setOnPreparedListener(this);
        }
        else
            Log.i("VideoPlayer", "noVideoFile");

    } catch (IllegalArgumentException e) {
        e.printStackTrace();
    } catch (IllegalStateException e) {
        e.printStackTrace();
    } catch (IOException e) {
        Log.i(this.toString(), "IOEXception");
        e.printStackTrace();

//Here is the fix:
        instructionVideoPlayer.release();
        instructionVideoPlayer = null;
        initPlayer();
// reinit after prepare failed. although this can bring in an infinte loop if video file does not exits
    } catch (Exception e)
    {
        Log.i("InitPlayer", e.getClass().toString());
        e.printStackTrace();
    }
于 2012-06-07T13:40:39.913 に答える