转自: http://www.jcodecraeer.com/a/anzhuokaifa/androidkaifa/2015/0428/2811.html

1.概要

  从5.0开始(API Level 21),可以完全控制安卓设备相机的新api Camera2(android.hardware.Camera2)被引入了进来。在以前的Camera api(android.hardware.Camera)中,对相机的手动控制需要更改系统才能实现,而且api也不友好。不过老的Camera API在5.0上已经过时,在未来的app开发中推荐的是Camera2 API。

2.L版本之前的Camera API

有限的图片数据流获取方式

有限相机状态信息

没有手动捕获控制

2.Camera2 API 新特性

支持30fps的全高清连拍 Supports 30fps full resolution with burst mode
支持帧之间的手动设置 Supports change on manual camera settings between frame capture
支持RAW格式的图片拍摄 Supports RAW image capture
支持快门0延迟以及电影速拍 Supports Zero Shutter Lag & Movie Snapshot
支持相机其他方面的手动控制包括噪音消除的级别 Supports setting other manual camera device controls including level of Noise Cancelling 

4.Resolution

相机的基本使用被分成了5个主要部分()(CameraManager,CameraDevice,CameraCaptureSession,CaptureRequest,CaptureResult)

CameraManager 提供构建,列出以及链接相机设备的接口
http://developer.android.com/reference/android/hardware/camera2/CameraManager.html
CameraDevice 代表和安卓设备相连的单个相机
http://developer.android.com/reference/android/hardware/camera2/CameraDevice.html
CameraCaptureSession 提供一套输出目标的surface(TextureView,MediaRecorder,MediaCodec,ImageReader,RenderScriptAllocation)。
http://developer.android.com/reference/android/hardware/camera2/CameraCaptureSession.html
CaptureRequest

Settings and outputs needed to capture a single image from the camera device
Create request builder by predefined templates(TEMPLATE_PREVIEW, TEMPLATE_RECORD,

TEMPLATE_STILL_CAPTURE, TEMPLATE_VIDEO_SNAPSHOT, TEMPLATE_MANUAL)
This requests are given to capture or setRepeatingRequest to capture images from the camera 
http://developer.android.com/reference/android/hardware/camera2/CaptureRequest.html

CaptureResult

从图像传感器获得的单个图片拍摄的结果。
http://developer.android.com/reference/android/hardware/camera2/CaptureResult.html

更详细的内容,需要通读Camera2包的概要介绍页
http://developer.android.com/reference/android/hardware/camera2/package-summary.html

还有一个YouTube上的谷歌开发者的介绍视频,解释了Camera2 API的改动:DevBytes:Android L开发者预览之- Camera2 API

https://www.youtube.com/watch?v=Xtp3tH27OFs

5.检查那些特性可用

  在安卓设备上,Camera2 API的所有特性并不都总是可用。取决于设备本身。为了检查那些特性可用,可以使用CameraCharacteristics来获得支持情况。

characteristics.get(CameraCharacteristics.INFO_SUPPORTED_HARDWARE_LEVEL);

  返回的结果分为级别的相机功能,按照 全支持> 有限支持> 看心情赠送的顺序排列:

INFO_SUPPORTED_HARDWARE_LEVEL_FULL

全方位的硬件支持,允许手动控制全高清的摄像。如果返回的是这个,连拍模式以及其他新特性都是可用的。
       https://developer.android.com/reference/android/hardware/camera2/CameraCharacteristics.html#INFO_SUPPORTED_HARDWARE_LEVEL
   INFO_SUPPORTED_HARDWARE_LEVEL_LIMITED

一个“有限支持”的设备可能有一些或者没有“全支持”设备的特性。有些特性可能不属于任何硬件级别,需要单独查询。
       https://developer.android.com/reference/android/hardware/camera2/CameraCharacteristics.html#INFO_SUPPORTED_HARDWARE_LEVEL
   INFO_SUPPORTED_HARDWARE_LEVEL_LEGACY

所有的设备都会有的特性。这和过时的Camera API所支持的特新是一样的。

https://developer.android.com/reference/android/hardware/camera2/CameraCharacteristics.html#INFO_SUPPORTED_HARDWARE_LEVEL

  虽然推荐在未来的app中使用Camera2 API,但是只有Lollipop的设备商才可用,也不大可能会出现兼容老设备的包。因此在最小版本(minSdkVersion)升到21之前,你还是需要继续使用Camera API(android.hardware.Camera)。

不过你可以用下面的代码对不同的版本区别对待:

 if (Build.VERSION.SDK_INT < Build.VERSION_CODES.LOLLIPOP) {
// your code using Camera API here - is between 1-20
} else if(Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP) {
// your code using Camera2 API here - is api 21 or higher
}

6.实例程序

最后,在网上发现几个使用Camera API2开发的实例程序,总结一下方便后续参考:
1.Camera2 Basic : https://github.com/googlesamples/android-Camera2Basic

演示如何使用Camera2 API基本功能的demo。你可以从中学会如何遍历相机设备的所有特性,显示预览照片,以及拍照。

2.Camera2 Video:https://github.com/googlesamples/android-Camera2Video
这个demo演示如何使用Camera2 API录制视频。

3.Camera2 master: http://www.eyesourcecode.com/thread-35378-1-1.html
使用Android L Camera2 API开发的示例应用程序,具备拍照,AWB,Flash,连拍功能

4.LCamerahttp://www.eyesourcecode.com/thread-35377-1-1.html
L Camera是一个开源的实验性质的Camera应用程序,基于Android L提供的新API android.hardware.camera2,目前只支持在Andorid 5.0 Lollipop版本的Nexus 5和Nexus 6上运行

摄像头(5)使用Camera2 替代过时的Camera API的更多相关文章

  1. Android Camera API/Camera2 API 相机预览及滤镜、贴纸等处理

    Android Lollipop 添加了Camera2 API,并将原来的Camera API标记为废弃了.相对原来的Camera API来说.Camera2是又一次定义的相机 API,也重构了相机 ...

  2. Android 新老两代 Camera API 大起底

    https://blog.csdn.net/Byeweiyang/article/details/80515192 0.背景简介 最近有一部分相机相关的需求,专注于对拍摄的照片.视频的噪点.色温.明暗 ...

  3. Android 音视频开发(四):使用 Camera API 采集视频数据

    本文主要将的是:使用 Camera API 采集视频数据并保存到文件,分别使用 SurfaceView.TextureView 来预览 Camera 数据,取到 NV21 的数据回调. 注: 需要权限 ...

  4. 使用Camera API https://developer.mozilla.org/zh-CN/docs/Web/Guide/API/Camera

    使用Camera API 在本文章中 获取到所拍摄照片的引用 在网页中展示图片 完整的示例代码 HTML页面: JavaScript文件: 浏览器兼容性 通过Camera API,你可以使用手机的摄像 ...

  5. Using the Cordova Camera API

    使用ionic开发一款android或ios应用,估计少不了使用到Camera API,这里记录下使用过程. 创建空的ionic应用 ionic start myTabs tabs 通过cd demo ...

  6. Android Camera Api的心得

    (一) 前言最近看Camera的api,觉得写的真的不错.现在翻译过来,给大家分享分享,译文可能不太好,大家将就着看哈. (二) 正文1. CameraCamera是Android framework ...

  7. Android Camera API ISO Setting

    https://stackoverflow.com/questions/2978095/android-camera-api-iso-setting exif this.mCameraParamete ...

  8. Android QRCodeReaderView 和Camera API冲突

    开发一款小功能,核心功能是二维码扫描,然后发送到远端服务器.App结构分为两个Activity,Activity A 负责二维码扫描,然后将参数存到本地,再启动Activity B,在Activity ...

  9. Android Multimedia框架总结(十四)Camera框架初识及自定义相机案例

    转载请把头部出处链接和尾部二维码一起转载,本文出自逆流的鱼yuiop:http://blog.csdn.net/hejjunlin/article/details/52738492 前言:国庆节告一段 ...

随机推荐

  1. jQuery学习-----(一)JQuery的'$'符号用法

    1.jQuery的三种$() 1)$()可以是$(expresion),即css选择器.Xpath或html元素,也就是通过上述表达式来匹配目标元素.   比如:$("a")构造的 ...

  2. SQL Server中批量替换数据

    SQL Server数据库中批量替换数据的方法 SQL Server数据库操作中,我们可能会根据某写需要去批量替换数据,那么如何批量修改替换数据呢?本文我们就介绍这一部分内容,接下来就让我们一起来了解 ...

  3. StreamReader和StreamWrite与FileStream区别

    具体用法不在赘述. 记录一下用法的区别 StreamReader: FileStream fs = new FileStream(@"D:\Readme.txt",FileMode ...

  4. javascript截取字符串(支持中英文混合)

    javascript截取字符串(支持中英文混合) <script type="text/javascript"> var sub=function(str,n){ va ...

  5. Android桌面悬浮清内存app概述

    今天闲来无事写了一个清内存的小东西,类似360,在桌面上悬浮,点击后清除后台无用程序,清除后台程序是通过调用ActivityManger.killBackgroundProcesses的方式来进行的, ...

  6. mysql_sql语句之美

    无线地址及数量统计 单个用户无线登录信息统计

  7. Linux恢复删除文件

    一.介绍extundelete 1.extundelete的文件恢复工具,该工具最给力的一点就是支持ext3/ext4双格式分区恢复. 2. 在实际线上恢复过程中,切勿将extundelete安装到你 ...

  8. DB2 SQL 递归实现多行合并

    最终效果 原始数据: 转换脚本: WITH post_a AS ( SELECT DISTINCT T.EMP_NO,S.CODE_ FROM inscndb.DTFMA000_EMP_POST T ...

  9. 1062 Talent and Virtue (25)

    /* L (>=60), the lower bound of the qualified grades -- that is, only the ones whose grades of ta ...

  10. nodejs的模块系统(实例分析exprots和module.exprots)

    前言:工欲善其事,必先利其器.模块系统是nodejs组织管理代码的利器也是调用第三方代码的途径,本文将详细讲解nodejs的模块系统.在文章最后实例分析一下exprots和module.exprots ...