无法使用媒体录制器android

时间:2015-05-20 09:19:54

标签: android android-mediarecorder

我正在尝试使用媒体录制器录制视频。 当我尝试录制视频时,它会使用以下logcat崩溃。

  

05-20 14:28:43.432:E / MediaRecorder(4281):开始失败:-38 05-20   14:28:43.432:D / AndroidRuntime(4281):关闭VM 05-20   14:28:43.432:W / dalvikvm(4281):threadid = 1:线程退出   未捕获的异常(组= 0x415c5d88)05-20 14:28:43.462:   E / AndroidRuntime(4281):致命异常:主05-20 14:28:43.462:   E / AndroidRuntime(4281):进程:com.abc.def,PID:   4281 05-20 14:28:43.462:E / AndroidRuntime(4281):   java.lang.IllegalStateException 05-20 14:28:43.462:   E / AndroidRuntime(4281):在android.media.MediaRecorder.start(Native   方法)05-20 14:28:43.462:E / AndroidRuntime(4281):at   com.abc.def.PrivateChatDialog.startVideoRecording(PrivateChatDialog.java:1413)   05-20 14:28:43.462:E / AndroidRuntime(4281):at   com.abc.def.PrivateChatDialog $ 3.onClick(PrivateChatDialog.java:198)   05-20 14:28:43.462:E / AndroidRuntime(4281):at   android.view.View.performClick(View.java:4569)05-20 14:28:43.462:   E / AndroidRuntime(4281):at   android.view.View $ PerformClick.run(View.java:18570)05-20   14:28:43.462:E / AndroidRuntime(4281):at   android.os.Handler.handleCallback(Handler.java:743)05-20   14:28:43.462:E / AndroidRuntime(4281):at   android.os.Handler.dispatchMessage(Handler.java:99)05-20   14:28:43.462:E / AndroidRuntime(4281):at   android.os.Looper.loop(Looper.java:136)05-20 14:28:43.462:   E / AndroidRuntime(4281):at   android.app.ActivityThread.main(ActivityThread.java:5212)05-20   14:28:43.462:E / AndroidRuntime(4281):at   java.lang.reflect.Method.invokeNative(Native Method)05-20   14:28:43.462:E / AndroidRuntime(4281):at   java.lang.reflect.Method.invoke(Method.java:515)05-20 14:28:43.462:   E / AndroidRuntime(4281):at   com.android.internal.os.ZygoteInit $ MethodAndArgsCaller.run(ZygoteInit.java:786)   05-20 14:28:43.462:E / AndroidRuntime(4281):at   com.android.internal.os.ZygoteInit.main(ZygoteInit.java:602)05-20   14:28:43.462:E / AndroidRuntime(4281):at   dalvik.system.NativeStart.main(原生方法)

这是我用来捕捉视频的代码。

protected void startVideoRecording() throws IOException {
        if(mrec==null)
        mrec = new MediaRecorder(); // Works well
        mCamera.unlock();
        mrec.setCamera(mCamera);
        mrec.setVideoSource(MediaRecorder.VideoSource.CAMERA);
        mrec.setAudioSource(MediaRecorder.AudioSource.MIC);
      mrec.setProfile(CamcorderProfile.get(CamcorderProfile.QUALITY_LOW));
        mrec.setPreviewDisplay(surfaceHolder.getSurface());
        mrec.setOutputFile(getVideoFileName());
        mrec.setVideoSize(320, 280);
        mrec.prepare();
        mrec.start();
        videoRecording = true;
    }

我已经尝试了很多并且搜索了很多但是找不到解决方案。 我找到了was this SO question

但是我没有录制音频的后台服务。 请帮我找一个解决方案。 谢谢。

1 个答案:

答案 0 :(得分:0)

我修改了这个函数如下:

public void startVideoRecording() throws IOException {
        mrec = new MediaRecorder(); // Works well
        mCamera.unlock();
        mrec.setCamera(mCamera);
        mrec.setVideoSource(MediaRecorder.VideoSource.CAMERA);
        mrec.setAudioSource(MediaRecorder.AudioSource.MIC);
        mrec.setOutputFormat(MediaRecorder.OutputFormat.MPEG_4);
        mrec.setVideoEncoder(MediaRecorder.VideoEncoder.H264);
        mrec.setAudioEncoder(MediaRecorder.AudioEncoder.AAC);
        mrec.setPreviewDisplay(surfaceHolder.getSurface());
        mrec.setOrientationHint(90);
        String path = getVideoFileName();
        mrec.setOutputFile(path);
        mrec.prepare();
        mrec.start();
        videoRecording = true;
    }

此后应用程序崩溃了,然后重新启动手机就行了,现在一切正常。