使用Media Recorder无需预览即可捕获视频

时间:2015-10-18 09:46:44

标签: android video android-camera android-mediarecorder

我正在尝试使用Media Recorder捕获视频(在棒棒糖上),因为我理解这个类支持捕获没有预览(link,注释中的#7):

  

可以在不创建相机预览的情况下使用MediaRecorder   首先,跳过此过程的前几个步骤。但是,自从   用户通常更喜欢在开始录制之前看到预览,   这个过程不在这里讨论。

所以,我构建的应用程序会自动启动捕获视频并通过按钮单击停止,但我随时都会遇到异常,这是我的代码:

protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);


    recorder.setAudioSource(MediaRecorder.AudioSource.MIC);
    recorder.setVideoSource(MediaRecorder.VideoSource.CAMERA);
    recorder.setOutputFormat(MediaRecorder.OutputFormat.THREE_GPP);
    recorder.setVideoSize(640, 480);
    recorder.setVideoEncoder(MediaRecorder.VideoEncoder.DEFAULT); // Tried to put this line in comment 
    recorder.setAudioEncoder(MediaRecorder.AudioEncoder.DEFAULT); // Tried to put this line in comment 

    /*CamcorderProfile camcorderProfile = CamcorderProfile.get(CamcorderProfile.QUALITY_HIGH);
    recorder.setProfile(camcorderProfile);*/

    recorder.setOutputFile(Environment.getExternalStorageDirectory().getAbsolutePath() + "/MyVideo.gpp");

    try {
        recorder.prepare();
    } catch (IOException e) {
        e.printStackTrace();
    }

    recorder.start();

    final Button btnStopCaptureVideo = (Button) findViewById(R.id.bu_StopCapture);
    btnStopCaptureVideo.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View v) {
            recorder.stop();
            recorder.reset();   // You can reuse the object by going back to setAudioSource() step
            recorder.release(); // Now the object cannot be reused
            Toast.makeText(MainActivity.this, "Video create successfully", Toast.LENGTH_SHORT).show();
            btnStopCaptureVideo.setEnabled(false);
        }
    });
}

当代码如下所示时,我得到了RuntimeExceptionrecorder.start()行)和一个我评论VideoEncoderAudioEncoder并取消评论CamcorderProfile我得到IllegalStateException例外(recorder.setProfile(camcorderProfile)行)。

所以,问题是如何在没有预览的情况下捕获视频?

谢谢!

0 个答案:

没有答案