最近改代码,删掉了原来录制视频做处理的逻辑,改用onPreviewFrame来回调到预览帧处理。
修改后出现了这个错误getParameters failed (empty parameters)
出现这个错误大概率是在采集视频,需要认真的管理Camera对象,以及跟MediaRecorder类的协调。当使用Camera对象记录视频时,除了Camera.open()和Camera.release()方法的调用以外,还必须管理Camera.lock()和Camera.unlock()方法的调用,从而允许MediaRecorder对象访问Camera硬件。
unlock 应放置在 camera.setParameters(parameters); 后面
//设置Camera 的代码
camera = Camera.open(Camera.CameraInfo.CAMERA_FACING_FRONT);
camera.lock();
Camera.Parameters parameters = camera.getParameters();
camera.setDisplayOrientation(90);
camera.enableShutterSound(false);
parameters.setPreviewFrameRate(25);
camera.setParameters(parameters);
camera.unlock();
//后面跟设置MediaRecorder的代码
<center>
- Probably the most common reason would be closing/releasing the camera while still using it afterward.
- This can be especially problematic if you are using the Camera object on multiple threads without synchronizing access to the Camera.
- Make sure you only ever have a single thread accessing the Camera at a time.
最大的可能是Camera释放不彻底,关闭或释放后仍旧在使用。或者是多个线程可能在不加锁的情况下争用Camera。应保证每个时间最多只有一个线程访问Camera。
此处参考Correct handling of exception: “getParameters failed (empty parameters)”
解决这个问题,可以在出问题的代码前后加上lock和unlock,在声明Parameters前加lock,防止其他的线程访问,在 camera.setParameters(parameters); 后面设置unlock,使mediarecorder可以访问。
在出错的地方,看下是否没有设置,加这两行试一下。