我正在尝试使用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);
}
});
}
当代码如下所示时,我得到了RuntimeException
(recorder.start()
行)和一个我评论VideoEncoder
和AudioEncoder
并取消评论CamcorderProfile
我得到IllegalStateException
例外(recorder.setProfile(camcorderProfile)
行)。
所以,问题是如何在没有预览的情况下捕获视频?
谢谢!