使用Camera2 替代过时的Camera API

原文:http://www.jcodecraeer.com/a/anzhuokaifa/androidkaifa/2015/0428/2811.html


概要

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

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

       有限相机状态信息

       没有手动捕获控制

   Camera2 API
       Supports 30fps full resolution with burst mode

       支持30fps的全高清连拍
       Supports change on manual camera settings between frame capture

       支持帧之间的手动设置
       Supports RAW image capture

       支持RAW格式的图片拍摄
       Supports Zero Shutter Lag & Movie Snapshot

       支持快门0延迟以及电影速拍
       Supports setting other manual camera device controls including level of Noise Cancelling 

       支持相机其他方面的手动控制包括噪音消除的级别

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

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

 
 
  1.     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)。

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

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



最后,在网上发现几个使用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上运行


  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值