Android:MediaRecorder stop()冻结app

时间:2018-03-31 15:59:24

标签: android-mediarecorder

我有一个应用程序来录制屏幕视频。在一些设备,例如OnePlus 3t它工作正常,但在其他设备,如三星Galaxy s9,它停止录制后冻结整个应用程序。

这是我初始化录音机的方式:

    private void initRecorder() {

    mediaRecorder = new MediaRecorder();
    mProjectionManager = (MediaProjectionManager) getSystemService(Context.MEDIA_PROJECTION_SERVICE);
    mediaRecorder.setVideoSource(MediaRecorder.VideoSource.SURFACE);
    mediaRecorder.setOutputFormat(MediaRecorder.OutputFormat.MPEG_4);
    String timeStamp = new SimpleDateFormat("ddMMyyyy_HHmmss")
            .format(new Date());
    File storeDirectory = new File(Environment.getExternalStorageDirectory().getAbsolutePath() + "/Videos");
    if (!storeDirectory.exists()) {
        boolean success = storeDirectory.mkdirs();
        if (!success) {
            Log.e(TAG, "failed to create file storage directory.");
            return;
        }
    }
    mediaRecorder.setOutputFile(storeDirectory + "/video" + timeStamp + ".mp4");
    mediaRecorder.setVideoSize(screenWidth, screenHeight);
    mediaRecorder.setVideoEncoder(MediaRecorder.VideoEncoder.H264);
    mediaRecorder.setVideoFrameRate(16);
    mediaRecorder.setVideoEncodingBitRate(3000000);
    int rotation = getWindowManager().getDefaultDisplay().getRotation();
    int orientation = ORIENTATIONS.get(rotation + 90);
    mediaRecorder.setOrientationHint(orientation);
    mediaRecorder.prepare();
}

单击按钮时会调用start方法。再次单击此按钮时,它会停止记录,并调用以下方法。这就是冻结一切的地方。

    private void stopRecording() {
        if (virtualDisplay == null) {
            return;
        }
        virtualDisplay.release();
        mediaRecorder.stop(); --> freeze
        isRecording = false;
}

我还尝试在单独的线程中调用stopRecording()方法。然后它不会冻结,但视频不会保存。它似乎在stop()方法中做了很多东西,永远不会结束。有什么想法吗?

0 个答案:

没有答案