最近忙于开发一款基于Camera2 API的相机应用,部分功能涉及到广角镜头,因此踩了不少坑,在此与大家分享下以作记录交流...

经过查阅资料发现在安卓上所谓的广角镜头切换其实是用一个逻辑摄像头包含多个物理摄像头实现的,在zoom缩放的时候根据不同的缩放值切换不同的物理摄像头。

参考:https://source.android.google.cn/devices/camera/multi-camera?hl=zh-cn

踩坑记录

  1. CameraDevice.TEMPLATE_RECORD的兼容性问题

    一般在录制视频的时候为了获得比较稳定的帧率,我们可能会使用CameraDevice.TEMPLATE_RECORD创建CaptureRequest.Builder,但是CameraDevice.TEMPLATE_RECORD在某些镜头上

    却是不可用的,一般表现就是黑屏,查找定位发现是相机没有数据流输出。

解决方案就是查看API文档注释,发现CameraDevice.TEMPLATE_RECORD是有一定的限制的,我们根据文档描述做相应的检测,如果检测到CameraDevice.TEMPLATE_RECORD不可用时回退到TEMPLATE_PREVIEW即可,

以下是文档注释内容:

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
  1. 有些镜头明明在CameraManager.getCameraIdList中返回了,但是却无法打开

后来发现这些不能打开的摄像头StreamConfigurationMap的getOutputSizes返回空,也就是说没有可支持的输出图像尺寸,因此我们在过滤摄像头时也需要验证StreamConfigurationMap是否有支持的尺寸输出。

// 摄像头是否可用
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;
}
  1. 有些镜头有色彩偏差

    在对逻辑镜头进行测试时发现,从一个物理摄像头切换到另外一个物理摄像头,图像有明显的色彩偏差,例如下面的两幅对比图:

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

  1. 单色镜头

android中有一种单色摄像头,这种摄像头的预览图像是灰度图,预览图如下图所示:

这种摄像头主要用于辅助拍摄,因此我们在筛选摄像头时也需要过滤掉这种摄像头,具体的过滤方法可以参考官方文档:

单色摄像头:https://source.android.google.cn/devices/camera/monochrome?hl=zh-cn

这次就和大家分享笔者踩过的这几个坑,当遇到这些问题时笔者也是花了不少时间精力去定位问题,这里分享出来希望大家在卷的路上能少走弯路...

推荐阅读

《关于Camera应用开发进阶的干货》

关注我,一起进步,人生不止coding!!!

分享几个关于Camera的坑的更多相关文章

  1. https微信分享看不到图片的坑

    最近在做一个活动项目的时候一开始走的http,发现网络被劫持的特别严重,没办法,只能改走https,但是修改为https后发现在使用微信js-sdk分享的时候看不到缩略图,直接通过地址打开是可以找开图 ...

  2. 分享使用Entity Framework的一个坑:Include无效

    如果不想延迟加载,可以通过设置:context.Configuration.LazyLoadingEnabled = false;或查询时加上AsNoTracking()方法即可. 如果不想生成代理, ...

  3. Android 友盟分享躺过的几个坑,大坑,坑爹啊

    前言:公司上线了一个项目,做Android 客户端集成友盟分享,在做得过程中,遇到了下面3个问题,希望其他小伙伴注意. ) 错误1: 1.错误描述 我是照着友盟的集成文档一步一步的集成的,做完后,发现 ...

  4. 分享一个数据库sql_mode 引起的坑

    sql_mode坑 MySQL 5.7.x 默认值: ONLY_FULL_GROUP_BY,STRICT_TRANS_TABLES,NO_ZERO_IN_DATE,NO_ZERO_DATE,ERROR ...

  5. [经验分享] 最近调试FT232H遇到的坑

    cnblogs.com Yeats叶子 原创,转载请注明原始地址 - http://www.cnblogs.com/xiedidan/p/ft232h-poc.html Abstract FT232H ...

  6. 分享Burp Suite遇到的各种坑

    1.性质问题 价格昂贵 专业版高达399美元/每年,免费版有功能限制:https://portswigger.net/buy/pro,构想中的工具应该是免费开源的. 破解版存在安全隐患 https:/ ...

  7. C#实现基于ffmpeg加虹软的人脸识别demo及开发分享

    对开发库的C#封装,屏蔽使用细节,可以快速安全的调用人脸识别相关API.具体见github地址.新增对.NET Core的支持,在Linux(Ubuntu下)测试通过.具体的使用例子和Demo详解,参 ...

  8. UWP中重用C/C++代码时踩过的一些坑

    标题中提到的UWP,主要是指用C#来写UWP的主工程,开发过程中可能需要调用C/C++实现的库. 为什么需要调用C/C++的库呢,举个例子,开源库OpenSSL实现了许多加密算法,稳定快速,我们想在应 ...

  9. webpack4配置详解之常用插件分享

    前言 继上一次webpack的基础配置分享之后,本次将分享一些工作中项目常用的配置插件.也会包含一些自己了解过觉得不错的插件,如有分析不到位的,欢迎纠错,嗯,这些东西文档都有,大佬可绕过. Wepac ...

随机推荐

  1. 让 DolphinScheduler 1.3.4 开启 Netty 日志打印,解决流程实例一直在运行中的问题

    关于新一代大数据任务调度 - Apache DolphinScheduler   Apache DolphinScheduler(incubator) 于 17 年在易观数科立项, 19 年 8 月进 ...

  2. Luogu2455 [SDOI2006]线性方程组 (高斯消元)

    模板特殊情况没exit(0) $\longrightarrow$60 了一下午 //#include <iostream> #include <cstdio> #include ...

  3. Ansible yaml 剧本(傻瓜式)

    优化ansible安装MySQL: Ansible部署MySQL编译安装 - xiao智 - 博客园 (cnblogs.com) Ansible yaml 剧本(傻瓜式): --- - hosts: ...

  4. 使用Fiddler劫持网络资源为前端开发助力(示例:Dynamic CRM 表单开发 也能热更新? )

    背景: 使用过vue开发的童鞋应该都知道,在开发vue项目的过程中,有个叫"热更新"的功能特别爽,在传统html开发到初次接触vue时,才发现原来前端开发可以这么香.热更新的表现形 ...

  5. 我开源了一个Go学习仓库|笔记预览

    前言 大半个月前我参与了字节后端面试,未通过第四面,面试总结写在了这篇文章: https://juejin.cn/post/7132712873351970823 在此文的末尾,我写到为了全面回顾Go ...

  6. 054_末晨曦Vue技术_处理边界情况之组件之间的循环引用

    组件之间的循环引用 点击打开视频讲解更详细 假设你需要构建一个文件目录树,像访达或资源管理器那样的.你可能有一个 <tree-folder> 组件,模板是这样的: <p> &l ...

  7. 「学习笔记」倍增思想与lca

    目录 ST表 算法 预处理 查询 关于 log2 Code 预处理 查询 例题 P2880 P2048 lca 树上 RMQ 前置知识:欧拉序列 算法 Code 离线 Tarjan 算法 Code 倍 ...

  8. good thing

  9. RTSP鉴权认证之基础认证和摘要认证区别

    RTSP认证类型 基本认证(basic authentication):http 1.0提出的认证方案,其消息传输不经过加密转换因此存在严重的安全隐患.: 摘要认证(digest authentica ...

  10. 【Oracle初学者】ORA-01034: ORACLE not available

    系统报错代码 ORA-01034: ORACLE not available 出现原因 //在启动实例时,关闭了数据库,导致外部软件无法访问Oracle数据库(大部分都是因为数据库监听或者服务关闭导致 ...