使用Camera2 替代过时的Camera API

    xiaoxiao2021-12-14  17

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

        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上运行

    转载请注明原文地址: https://ju.6miu.com/read-964467.html

    最新回复(0)