一、本文重点说明
- 本文基于 android camera2 实现视频预览,暂未兼容 camera1 API,基础实现可以参考 googlesample Camera2 例子 android-Camera2Basic ,本文以工具类形式实现一步调用。
- 谷歌例子中没有具体指明预览帧的获取,即 camera1 setPreviewCallback 类似功能实现,具体是通过
ImageReader
中的 OnImageAvailableListener
来实现的,重点来了,获取帧数据不能用 ImageFormat.JPEG
格式,否则你会发现预览非常卡的,因为渲染 JPEG 数据量过大,导致掉帧,所以预览帧请使用其他编码格式。简单代码如下:
public void init(){
ImageReader imageReader = ImageReader.newInstance(width, height, ImageFormat.YV12, 1);
imageReader.setOnImageAvailableListener(new OnImageAvailableListener() {
@Override
public void onImageAvailable(ImageReader reader) {
Image image = reader.acquireLatestImage();
int len = image.getPlanes().length;
byte[][] bytes = new byte[len][];
int count = 0;
for