我正在尝试为Android设备构建一个简单的录像机,但我的成功有限并且结果好坏参半。它工作一次,但现在,没有改变任何东西,我得到一个“相机不可用”错误,然后“准备失败-2147483648”错误
预览器的构造函数看起来像
private SurfaceHolder holder_;
private MediaRecorder r_;
public CameraPreview(Context context, AttributeSet attrs) {
super(context, attrs);
holder_ = getHolder();
holder_.addCallback(this);
holder_.setType(SurfaceHolder.SURFACE_TYPE_PUSH_BUFFERS);
r_ = new MediaRecorder();
r_.setAudioSource(MediaRecorder.AudioSource.MIC);
r_.setVideoSource(MediaRecorder.VideoSource.CAMERA);
r_.setOutputFormat(MediaRecorder.OutputFormat.MPEG_4);
r_.setAudioEncoder(MediaRecorder.AudioEncoder.AMR_NB);
r_.setVideoEncoder(MediaRecorder.VideoEncoder.MPEG_4_SP);
}
和我的
surfaceCreated()
方法看起来像
@Override
public void surfaceCreated(SurfaceHolder holder) {
r_.setPreviewDisplay(holder_.getSurface());
r_.setOutputFile("/sdcard/test.mpg");
if (r_ != null){
try{
r_.prepare();
r_.start();
}catch(Exception e){
e.printStackTrace();
}
}
}
有什么想法吗?
谢谢,克里斯
答案 0 :(得分:5)
我没有使用过视频录制功能,但是对于静态图片使用Camera
课程,您必须通过Camera
明确释放release()
对象。如果不这样做意味着相机将被无限期捆绑(可能直到重启)。
如果您未在release()
上致电MediaRecorder
,则可能会遇到同样的问题。
答案 1 :(得分:0)
您需要致电camera.unlock()
。
您需要呼叫MediaRecorder
对象:
setCamera(theCameraObject)
// I have this after 'new MediaRecorder' and before 'setAudioSource()
//everything u wrote goes in here and then:
setVideoSize()
setVideoFrameRate()