我正在关注https://developer.android.com/guide/topics/media/camera.html#capture-video上的教程
因此,尝试启动相机时,请遵循以下顺序:
> Camera.open
> camera.unlock
> mediaRecorder.setCamera
> mediaRecorder.setAudioSource
> mediaRecorder.setVideoSource
> mediaRecorder.setProfile
> mediaRecorder.setOutputFile
> mediaRecorder.prepare
> mediaRecorder.start由于遵循了运行5.0.2的指南,因此我可以找出可能出了什么问题.
private Camera mCamera;
private MediaRecorder mMediaRecorder;
public CameraActivity() {
mCamera = getCameraInstance();
mMediaRecorder = new MediaRecorder();
}
public static Camera getCameraInstance(){
Camera c = null;
try {
c = Camera.open();
}
catch (Exception e) { ... }
return c;
}
public void startRecording() {
mCamera.unlock();
mMediaRecorder.setCamera(mCamera);
mMediaRecorder.setAudioSource(MediaRecorder.AudioSource.CAMCORDER);
mMediaRecorder.setVideoSource(MediaRecorder.VideoSource.CAMERA);
mMediaRecorder.setProfile(CamcorderProfile.get(CamcorderProfile.QUALITY_LOW));
mMediaRecorder.setOutputFile(getOutputMediaFile(MEDIA_TYPE_VIDEO).toString());
try {
mMediaRecorder.prepare();
}
catch (IOException e) { ... }
catch (IllegalStateException e) { ... }
try {
mMediaRecorder.start();
}
catch (Exception e) {
Log.d(TAG, "exception on mediaRecorder.start" + e.toString()); // This is the exception that gets thrown on .start
}
}
我的清单包含所有必要的权限
我也尝试过手动设置格式,而不是使用.setProfile,结果相同
mMediaRecorder.setOutputFormat(MediaRecorder.OutputFormat.MPEG_4);
mMediaRecorder.setAudioEncoder(MediaRecorder.AudioEncoder.AAC);
mMediaRecorder.setVideoEncoder(MediaRecorder.VideoEncoder.DEFAULT);
更新
该文件确实已创建,尽管它当然无法播放,所以我知道它可以正常工作.准备调用不会引发异常,而是在启动之前发生.在start()上抛出相同的异常