0

MediaRecorder に画面の内容を記録させようとしています。初めて録画を行うときは機能しますが、2 回目に画面を録画しようとすると失敗します。関連するコードは次のとおりです。

void startRecording(String directory,String filename,MediaProjection mediaProjection) {
    this.mediaProjection=mediaProjection;
    this.directory=directory;
    this.filename=filename;
    initRecorder();
    prepareRecorder();
    virtualDisplay = createVirtualDisplay();
    mediaRecorder.start();
}

void stopRecording() {
    mediaRecorder.stop();
    mediaRecorder.reset();
    if (virtualDisplay != null) {
        virtualDisplay.release();
    }
    if (mediaProjection != null) {
        mediaProjection.stop();
        mediaProjection = null;
    }
    initRecorder();
    prepareRecorder();

}

void setScreen(int screenWidth, int screenHeight, int screenDensity) {
    this.screenWidth = screenWidth;
    this.screenHeight = screenHeight;
    this.screenDensity = screenDensity;
}

void prepareRecorder() {
    try {
        mediaRecorder.prepare();
    } catch (IllegalStateException e) {
        e.printStackTrace();
    } catch (IOException e) {
        e.printStackTrace();
    }
}

void initRecorder() {
    mediaRecorder.setAudioSource(MediaRecorder.AudioSource.MIC);
    mediaRecorder.setVideoSource(MediaRecorder.VideoSource.SURFACE);
    mediaRecorder.setOutputFormat(MediaRecorder.OutputFormat.MPEG_4);
    mediaRecorder.setVideoEncoder(MediaRecorder.VideoEncoder.H264);
    mediaRecorder.setAudioEncoder(MediaRecorder.AudioEncoder.AMR_NB);
    mediaRecorder.setVideoEncodingBitRate(512 * 1000);
    mediaRecorder.setVideoFrameRate(30);
    mediaRecorder.setVideoSize(screenWidth, screenHeight);
    mediaRecorder.setOutputFile(directory + "/" + filename + ".mp4");
    //mediaRecorder.setOutputFile(Environment.getExternalStoragePublicDirectory(Environment.DIRECTORY_MOVIES).getAbsolutePath()+"/vitalij.mp4");
}

したがって、私のアクティビティでは、このクラスの新しいインスタンスを一度作成し、ボタンを押した後に startRecording メソッドが呼び出されます。その後、ユーザーは stopRecording メソッドを呼び出す記録の停止を押すことができます。アプリが破棄されると、mediaRecorder オブジェクトを解放します。これは私が得るエラーです:

 Caused by: java.lang.IllegalStateException
        at android.media.MediaRecorder.setAudioSource(Native Method)
        at com.example.xxx.myapplication.VideoRecorder.initRecorder(VideoRecorder.java:77)
        at com.example.xxx.myapplication.VideoRecorder.startRecording(VideoRecorder.java:30)
        at com.example.xxx.myapplication.MainActivity.onActivityResult(MainActivity.java:134)

正しい権限が設定されていると確信しており、最初のビデオは正常に作成されます。2回目の録音時にのみ問題が発生。

4

1 に答える 1