转自: 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. JAVA中的代理技术(静态代理和动态代理)

    最近看书,有两个地方提到了动态代理,一是在Head First中的代理模式,二是Spring AOP中的AOP.所以有必要补充一下动态代理的相关知识. Spring采用JDK动态代理和CGLib动态代 ...

  2. MVC3缓存:使用页面缓存

    在以前的WebForm的开发中,在页面的头部加上OutputCache即可启用页面缓存,而在MVC3中,使用了Razor模板引擎的话,该如何使用页面缓存呢?如何启用 在MVC3中要如果要启用页面缓存, ...

  3. JS焦点图,JS 多个页面放多个焦点图

    <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/ ...

  4. NoSQL专家王涛访谈:为什么我们还要做一个NoSQL?

    ChinaUnix:各位网友大家好,今天有幸请到王涛先生到CU做客,与大家交流一些工作经验.首先请王涛先介绍一下自己. 王涛:大家好,我是王涛.过去八年里我一直在IBM多伦多实验室从事DB2引擎研发的 ...

  5. php获取客户端ip地址

    本文介绍一个,php获取客户端的IP地址的实例代码,有需要的朋友参考下吧. 获取客户端IP地址的代码,如下: 复制代码代码示例: <?php//取得客户端IP的函数function get_cl ...

  6. wap网站获取访问者手机号PHP类文件

    <?php /** * 类名: mobile * 描述: 手机信息类 * 其他: */ class mobile { /** * 函数名称: getPhoneNumber * 函数功能: 取手机 ...

  7. stm32之ADC学习

    1.stm32中采用的是逐次逼近型模拟数字方式,那么什么是逐次逼近呢? 逐次逼近的方式类似于二分法,以8位数据为例:当输入一个模拟量的时候,首先取这8位数的一半,即1000 0000,与模拟量比较,大 ...

  8. 动态LINQ构建(实现等于不等于大于小于,like以及IN)

    首先感谢园子里的“红烧狮子头”,他的工作是本文的基础,引文如下http://www.cnblogs.com/daviddai/archive/2013/03/09/2952087.html,本版本实现 ...

  9. NET Reflector 8 使用

    一,把杀毒软件停掉 二,把原机器上的 Reflector 文件删除 三,找到C:\Users\Administrator\AppData\Local\Red Gate这个目录,将里面的东西删除 四,v ...

  10. (转载)Cocos2dx-OpenGL ES 2.0教程:你的第一个三角形(1)

    前言 在本系列教程中,我会以当下最流行的2D引擎Cocos2D-X为基础,介绍OpenGL ES 2.0的一些基本用法.本系列教程的宗旨是OpenGL扫盲,让大家在使用Cocos2D-X过程中,知其然 ...