Camera.onPreviewFrame 无法回调,无法获取帧

项目本来是采用MediaRecorder来录制视频并对视频进行处理获取信息。后改变方式转用onPreviewFrame来获取预览帧直接处理。但是始终无法进入到onPreviewFrame函数内部,无法正确回调。

我已经用camera.setPreviewCallback(this);触发了回调函数(这里常用的有三种回调函数,不在此处详细说了),但是依旧没有办法进入onPreviewFrame函数。

在我单独写的demo程序中是可以成功的,故将问题定位在预览帧的回调与录制视频类的不兼容(估计是删的不干净)在仔细排查了代码的不同和查了很多资料发现:

使用到MediaRecorder时需要camera.unlock();导致了onPreviewFrame()不会被调用到,所以在录制视频时不能同时形成帧图片。


Camera.onPreviewFrame 无法回调,无法获取帧_第1张图片

注释掉上图两行代码,可以获取到预览帧。

总结:

  1. 是否使用了三种回调函数触发了onPreviewFrame
//一直调用
void setPreviewCallback (Camera.PreviewCallback cb) 
//回调一帧,只返回一帧,shot
void setOneShotPreviewCallback (Camera.PreviewCallback cb) 
//与1一样,但是指定一个字节数组作为缓冲区,可以更好地管理内存,一般搭配addCallbackBuffer方法使用
void setPreviewCallbackWithBuffer (Camera.PreviewCallback cb) 
  1. 是否正确继承了Camera.PreviewCallback的接口
    Camera.onPreviewFrame 无法回调,无法获取帧_第2张图片
  2. 是否与MediaRecorder类录制视频冲突了

你可能感兴趣的:(Android开发)