参考

https://blog.csdn.net/afei__/article/details/92102775

https://blog.csdn.net/ganfanzhou/article/details/83721750

https://blog.csdn.net/afei__/article/details/92102775

https://blog.csdn.net/tong5956/article/details/82688886

https://blog.csdn.net/qq_31939617/article/details/86492025

概念:

ImageReader 通过这个类进行读取码流。具体流程如下:

步骤一:新建ImageReader类,设置回调摄像机分辨率,以及回调图像格式

        mPreviewImageReader = ImageReader.newInstance(1280,720,ImageFormat.YUV_420_888,2);

步骤二:设置数据回调

mPreviewImageReader.setOnImageAvailableListener(videoCallback,null);
    ImageReader.OnImageAvailableListener videoCallback = new ImageReader.OnImageAvailableListener() {        @Override        public void onImageAvailable(ImageReader reader) {            Image image = reader.acquireNextImage();            Log.i(tag,"image format: " +image.getHeight()+" "+image.getWidth());            Image.Plane[] planes = image.getPlanes();            int n_image_size = image.getWidth()*image.getHeight()*3/2;            image.close();        }    };

步骤三:添加到预览里面

    private void takePreview() {        try {            // 创建CameraCaptureSession,该对象负责管理处理预览请求和拍照请求            mCameraDevice.createCaptureSession(Arrays.asList(mSurfaceHolder.getSurface(),mPreviewImageReader.getSurface()), new CameraCaptureSession.StateCallback() // ③            {                @Override                public void onConfigured(CameraCaptureSession cameraCaptureSession) {                    if (null == mCameraDevice) return;                    // 当摄像头已经准备好时,开始显示预览                    mCameraCaptureSession = cameraCaptureSession;                    try {                        // 创建预览需要的CaptureRequest.Builder                        final CaptureRequest.Builder previewRequestBuilder = mCameraDevice.createCaptureRequest(CameraDevice.TEMPLATE_PREVIEW);                        // 将SurfaceView的surface作为CaptureRequest.Builder的目标                        previewRequestBuilder.addTarget(mSurfaceHolder.getSurface());                        previewRequestBuilder.addTarget(mPreviewImageReader.getSurface());                        // 自动对焦                        previewRequestBuilder.set(CaptureRequest.CONTROL_AF_MODE, CaptureRequest.CONTROL_AF_MODE_CONTINUOUS_PICTURE);                        // 打开闪光灯                        previewRequestBuilder.set(CaptureRequest.CONTROL_AE_MODE, CaptureRequest.CONTROL_AE_MODE_ON_AUTO_FLASH);                        // 显示预览                        CaptureRequest previewRequest = previewRequestBuilder.build();                        mCameraCaptureSession.setRepeatingRequest(previewRequest, null, null);                    } catch (CameraAccessException e) {                        e.printStackTrace();                    }                }                @Override                public void onConfigureFailed(CameraCaptureSession cameraCaptureSession) {                    Toast.makeText(FaceActivity.this, "配置失败", Toast.LENGTH_SHORT).show();                }            }, null);        } catch (CameraAccessException e) {            e.printStackTrace();        }    }

 

更多相关文章

  1. android ADB PUSH 安装apk的具体步骤 及 与 ADB INSTALL 的区别
  2. android 为摄像头增加闪光灯(s5pv210)
  3. Android 到ARM versatile PB板移植主要步骤
  4. Android Banner 的简单使用步骤
  5. Android 安装步骤
  6. Android中点击事件之KeyListener实现步骤
  7. Android闪光灯开关

随机推荐

  1. android客户端加密代码
  2. android视频录制(调用系统视频录制),生成
  3. android之activity生命周期示例
  4. android 年月日选择器(可选择年,年月,年月日
  5. android WebView onJsAlert onJsConfirm
  6. Android(安卓)SQLiteOpenHelper的使用
  7. Android(安卓)webView中调用JavaScript
  8. android中的Handler
  9. android画日历
  10. Android获取GPS坐标: