使用Camera2 替代过时的Camera API

泡在网上的日子 / 文 发表于2015-04-28 12:19 次阅读 Camera

原文: http://forums.developer.amazon.com/forums/thread.jspa?threadID=4836&tstart=0

概要

从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来获得支持信心。

    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
    }



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


收藏 赞 (50) 踩 (11)
上一篇:Instagram是如何提升TextView渲染性能的
转载自: http://codethink.me/2015/04/23/improving-comment-rendering-on-android/ ,以下为译文原文: 原文链接: Improving Comment Rendering on Android 上周,成千上万来自全世界的IG用户齐聚在社区组织的先下聚会 Worldwide InstaMeet11上。WWIM11 是
下一篇:Android中判断app何时是打开或者关闭的技术研究
转载自: Android中判断app何时启动和关闭的技术研究 原文链接: http://engineering.meetme.com/2015/04/android-determine-when-app-is-opened-or-closed/ 存在的问题 Android开发中不可避免的会遇到需要检查app何时进入前台,何时被用户关闭。奇怪的是,要