Android MediaRecorder启动失败

Android MediaRecorder启动失败,android,android-camera,surfaceview,Android,Android Camera,Surfaceview,我得到启动失败:-19当我尝试运行以下代码时,我非常确定我有开始视频捕获所需的所有元素,我有一个surfaceview,我将camera preview设置为,下面是在中初始化的其余代码 @Override public void surfaceCreated( SurfaceHolder surfaceHolder ) 我经常收到E/MediaRecorder﹕ 启动失败:-19尝试运行启动记录器的方法时。在启动实际的录音机之前,我还需要添加其他内容吗 if(mCame

我得到
启动失败:-19
当我尝试运行以下代码时,我非常确定我有开始视频捕获所需的所有元素,我有一个surfaceview,我将camera preview设置为,下面是在中初始化的其余代码

   @Override
    public void surfaceCreated( SurfaceHolder surfaceHolder )
我经常收到
E/MediaRecorder﹕ 启动失败:-19
尝试运行启动记录器的方法时。在启动实际的录音机之前,我还需要添加其他内容吗

    if(mCamera == null) {
        mCamera = Camera.open();
        mCamera.unlock();
     }

    if(mRecorder == null)
        mRecorder = new MediaRecorder();

    try {
        mRecorder.setCamera( mCamera );
        mRecorder.setVideoSource(MediaRecorder.VideoSource.CAMERA);
        mRecorder.setAudioSource(MediaRecorder.AudioSource.MIC);
        mRecorder.setOutputFormat(MediaRecorder.OutputFormat.MPEG_4);

        //AUDIO
        mRecorder.setAudioEncoder(MediaRecorder.AudioEncoder.AMR_NB);
        //VIDEO
        mRecorder.setVideoEncoder(MediaRecorder.VideoEncoder.MPEG_4_SP);
        mRecorder.setVideoSize(640, 480);
        mRecorder.setVideoFrameRate( 15 );
        
       
        mRecorder.setOutputFile( createNewFile() );
        mRecorder.setPreviewDisplay( mHolder.getSurface() );
        mRecorder.setMaxDuration(10000);
     
    } catch (Exception e) {
        Log.e( getString( R.string.app_name ), "failed to open Camera" );
        e.printStackTrace();
    }
然后在一个按钮点击方法中,我有
mRecorder.prepare();mRecorder.start()

编辑 现在,当我尝试启动录像机
E/MediaRecorder时,我经常会遇到这个错误﹕ 启动失败:-2147483648
在设置大小之前设置视频编码器之后


另一个观察结果是,在启动录像机之前,我是否必须调用相机对象上的
startPreview()

    if(mCamera == null) {
        mCamera = Camera.open();
        mCamera.unlock();
     }

    if(mRecorder == null)
        mRecorder = new MediaRecorder();

    try {
        mRecorder.setCamera( mCamera );
        mRecorder.setVideoSource(MediaRecorder.VideoSource.CAMERA);
        mRecorder.setAudioSource(MediaRecorder.AudioSource.MIC);
        mRecorder.setOutputFormat(MediaRecorder.OutputFormat.MPEG_4);

        //AUDIO
        mRecorder.setAudioEncoder(MediaRecorder.AudioEncoder.AMR_NB);
        //VIDEO
        mRecorder.setVideoEncoder(MediaRecorder.VideoEncoder.MPEG_4_SP);
        mRecorder.setVideoSize(640, 480);
        mRecorder.setVideoFrameRate( 15 );
        
       
        mRecorder.setOutputFile( createNewFile() );
        mRecorder.setPreviewDisplay( mHolder.getSurface() );
        mRecorder.setMaxDuration(10000);
     
    } catch (Exception e) {
        Log.e( getString( R.string.app_name ), "failed to open Camera" );
        e.printStackTrace();
    }
  • 缺少
    mCamera.unlock()
    。在媒体录制器中设置摄像头之前,必须完成此操作
  • 在设置视频大小之前,必须先设置视频编码器
  • mRecorder.setVideoSize(640460)
    在大多数设备上不起作用。假设您要设置VGA格式,它将是
    mRecorder.setVideoSize(640480)
    ,但这假设相机支持VGA格式的视频。大多数相机都有,但不是全部。要了解支持的视频大小,需要检查
    mCamera.getParameters().getSupportedVideoSizes()
    ,如果此函数返回空指针,则需要检查
    mCamera.getParameters().getSupportedPreviewSizes()

  • 我会试试这些调整的。我已经按照你说的改变了顺序,但现在是E/MediaRecorder﹕ 启动失败:-2147483648`引发错误。您是否检查了640x480是否在支持的视频大小范围内?我实际上已注释掉了该大小,但录像机仍然存在故障。这在许多设备上不起作用,您必须设置该大小。我建议您检查支持的视频大小,或者在相机中设置预览显示的曲面保持架后,使用mCamera.getParameters().getPreviewSize()获取预览大小。