最近忙于开发一款基于Camera2 API的相机应用,部分功能涉及到广角镜头,因此踩了不少坑,在此与大家分享下以作记录交流...
经过查阅资料发现在安卓上所谓的广角镜头切换其实是用一个逻辑摄像头包含多个物理摄像头实现的,在zoom缩放的时候根据不同的缩放值切换不同的物理摄像头 。参考:https://source.android.google.cn/devices/camera/multi-camera?hl=zh-cn
踩坑记录
- CameraDevice.TEMPLATE_RECORD的兼容性问题一般在录制视频的时候为了获得比较稳定的帧率,我们可能会使用CameraDevice.TEMPLATE_RECORD创建CaptureRequest.Builder,但是CameraDevice.TEMPLATE_RECORD在某些镜头上却是不可用的,一般表现就是黑屏,查找定位发现是相机没有数据流输出 。
Create a request suitable for video recording. Specifically, this means that a stable frame rate is used,and post-processing is set for recording quality.These requests would commonly be used with the CameraCaptureSession.setRepeatingRequest method.This template is guaranteed to be supported on all camera devices except DEPTH_OUTPUT devices that are not BACKWARD_COMPATIBLE.See Also:createCaptureRequest
- 有些镜头明明在
CameraManager.getCameraIdList
中返回了,但是却无法打开
// 摄像头是否可用 private boolean isEnableCamera(CameraCharacteristics cameraCharacteristics) {StreamConfigurationMap configs = cameraCharacteristics.get(CameraCharacteristics.SCALER_STREAM_CONFIGURATION_MAP);Size[] sizes = configs.getOutputSizes(ImageFormat.JPEG);return null != sizes && sizes.length > 0;}
- 有些镜头有色彩偏差在对逻辑镜头进行测试时发现,从一个物理摄像头切换到另外一个物理摄像头,图像有明显的色彩偏差,例如下面的两幅对比图:
文章插图

文章插图
很明显后面的图像色彩明显不对,对于这个问题,只要在预览时将
CaptureRequest.CONTROL_CAPTURE_INTENT
设置成CaptureRequest.CONTROL_CAPTURE_INTENT_VIDEO_SNAPSHOT
即可 。- 单色镜头

文章插图
这种摄像头主要用于辅助拍摄,因此我们在筛选摄像头时也需要过滤掉这种摄像头,具体的过滤方法可以参考官方文档:单色摄像头:https://source.android.google.cn/devices/camera/monochrome?hl=zh-cn
这次就和大家分享笔者踩过的这几个坑,当遇到这些问题时笔者也是花了不少时间精力去定位问题,这里分享出来希望大家在卷的路上能少走弯路...
推荐阅读《关于Camera应用开发进阶的干货》
关注我,一起进步,人生不止coding!!!

文章插图
【分享几个关于Camera的坑】
经验总结扩展阅读
- 单招最吃香的几个专业 什么专业就业前景广阔
- 通用40句 关于平安夜祝福
- 通用100句 关于平安夜祝福句子大全
- 精选60句 关于唯美平安夜祝福朋友圈文案大全
- 关于唯美平安夜祝福朋友圈语录汇总70句精选
- 关于感恩节感恩的祝福语
- 以雷霆击碎黑暗下一句是什么完整版台词分享
- 几个女的偷项链是什么电影?
- 小米12支持无线充电吗_小米12支持多少w快充
- 关于小寒节气的祝福语大全