Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/solr/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Android MediaRecoder.stop()花费的时间太长_Android_Mediarecorder - Fatal编程技术网

Android MediaRecoder.stop()花费的时间太长

Android MediaRecoder.stop()花费的时间太长,android,mediarecorder,Android,Mediarecorder,当我使用MediaRecorder录制完视频后,函数stop()花费了我太长的时间来关闭文件流,我的代码怎么了 我已尝试重置MediaRecorder的所有配置,并检查了框架代码,本机函数stop也需要很长时间,但当我使用其他摄像头(如“OpenCamera”)时,停止录制需要很短的时间。同时我检查了项目“OpenCamera”代码,并复制了MediaRecorder的配置,它对我不起作用 这是我关于开始和停止的代码 public void startRecord(String path) {

当我使用MediaRecorder录制完视频后,函数stop()花费了我太长的时间来关闭文件流,我的代码怎么了

我已尝试重置MediaRecorder的所有配置,并检查了框架代码,本机函数stop也需要很长时间,但当我使用其他摄像头(如“OpenCamera”)时,停止录制需要很短的时间。同时我检查了项目“OpenCamera”代码,并复制了MediaRecorder的配置,它对我不起作用

这是我关于开始和停止的代码

public void startRecord(String path) {
        if (currentState.compareTo(State.previewing) == 0) {
            this.mediaPath = path;
            currentState = State.recording;
            mediaRecorder = new MediaRecorder();
            mCamera.unlock();

            mediaRecorder.setCamera(mCamera);
            mediaRecorder.setAudioSource(MediaRecorder.AudioSource.CAMCORDER);
            mediaRecorder.setVideoSource(MediaRecorder.VideoSource.CAMERA);
            mediaRecorder.setProfile(CamcorderProfile.get(CamcorderProfile.QUALITY_LOW));
            mediaRecorder.setVideoSize(videoSize.width, videoSize.height);
            mediaRecorder.setOrientationHint(videoRotation);

            mediaRecorder.setOutputFile(path);
            File file = new File(Environment.getExternalStorageDirectory().getAbsoluteFile() + "/DCIM/Camera");
            if (!file.exists()) {
                file.mkdirs();
            }
            try {
                mediaRecorder.prepare();
                mediaRecorder.start();
                audioManager.requestAudioFocus(audioChangeListener, AudioManager.STREAM_MUSIC, AudioManager.AUDIOFOCUS_GAIN);
            } catch (Exception e) {
                LogTool.e(this, "error !!!", e);
                mCamera.lock();
                clearException(path);
                if (cameraCallback != null) {
                    cameraCallback.onRecordError();
                }
            }
        }
    }

    public void stopRecord(boolean force) {
        if (currentState.compareTo(State.recording) == 0) {
            audioManager.abandonAudioFocus(audioChangeListener);
            currentState = force ? State.previewing : State.showing;

            if (mediaRecorder != null) {
                try {
                    mediaRecorder.stop();
                    mediaRecorder.reset();
                    mediaRecorder.release();
                    mediaRecorder = null;
                } catch (Exception e) {
                    clearException(mediaPath);
                    if (!force) {
                        Toast.makeText(mContext, mContext.getResources().getString(R.string.video_tool_short),
                                Toast.LENGTH_SHORT).show();
                    }
                    if (cameraCallback != null) {
                        cameraCallback.onRecordError();
                    }
                    return;
                }

                if (force) {
                    File errorFile = new File(mediaPath);
                    if (errorFile.exists()) {
                        errorFile.delete();
                    }
                    if (cameraCallback != null) {
                        cameraCallback.onRecordError();
                    }
                } else {
                    if (cameraCallback != null) {
                        cameraCallback.onMediaSaved(mediaPath);
                    }
                }
            }
        }
    }
关于框架的日志显示在那里:

01-01 13:32:08.650 4129-4129/? D/MediaRecorder: start begin
01-01 13:32:09.150 4129-4129/? D/MediaRecorder: start end
01-01 13:32:12.620 4129-4129/? D/MediaRecorder: stop start
01-01 13:32:17.770 4129-4129/? D/MediaRecorder: stop end

您可以看到系统日志显示停止该操作需要5秒。

可能是设备错误。当我设置setRecordingHint(true)时,它为我解决了这个问题