使用Camera2 替代过时的Camera API

Camera2 API在Android 5.0中引入,提供全面的相机控制能力,支持30fps全高清连拍、帧间手动设置等功能。本文详细介绍Camera2 API的组成部分,包括CameraManager、CameraDevice等,并提供了不同级别的硬件支持说明。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

转自: 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 新特性

支持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 

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

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

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

 


> 本站内容系网友提交或本网编辑转载,其目的在于传递更多信息,并不代表本网赞同其观点和对其真实性负责。如涉及作品内容、版权和其它问题,请及时与本网联系,我们将在第一时间删除内容!

相关文章
  •   利用Camera API实现自己的拍照和摄像程序——android开发
            调用系统Camera App实现拍照和摄像功能,虽然能够满足我们的一些需求,但自由度降低了,而且拍照的界面就是系统的样子,现在很多拍照程序,就需要根据SDK提供的Camera API来编写自己的程序. 一. 准备工作         如果要使用Camera API实现拍照或者照相功能,就必须在manifest内声明使用权限,通常由以下三项 & ...
  •   Android开发: 调用Camera API 创建Camera
        		    Android开发: 调用Camera API 创建Camera
    steps to follow to create your own camera using camera API, 1. add permission to AndroidManifest.xml to get the camera hardware resource and save picture into SD card, <uses-per ...
  •   Using the Cordova Camera API
    Using the Cordova Camera API
    使用ionic开发一款android或ios应用,估计少不了使用到Camera API,这里记录下使用过程. 创建空的ionic应用 ionic start myTabs tabs 通过cd demo命令,可以看到已经为我们创建了多个文件夹,如下所示: ls -l total 48 -rw-r--r-- 1 nancy staff 2786 6 5 01:1 ...
  •   在Ubuntu手机平台中使用Camera API来录像
    在Ubuntu手机平台中使用Camera API来录像
    在前面的文章"如何在QML中使用camera API来拍照"中,我们介绍了如何使用Camera API来进行拍照.今天我们在这篇文章中来介绍如何使用Camera API来进行录像. 首先,还是和以前一样,我直接把自己的代码贴出来: main.qml import QtQuick 2.0 import Ubuntu.Components 1 ...
  •   如何在QML中使用camera API来拍照
    如何在QML中使用camera API来拍照
    在先前的例程中"如何使用Ubuntu手机平台中的照相机API来存储照片",我们已经展示了如何使用Item的属性来存储我们的照片.在这篇文章中,我们将使用Camera API来完成同样的功能. 我们来直接贴自己的代码: main.qml import QtQuick 2.0 import Ubuntu.Components 1.1 impo ...
  •   Android Camera Api的心得
    (一) 前言最近看Camera的api,觉得写的真的不错.现在翻译过来,给大家分享分享,译文可能不太好,大家将就着看哈.(二) 正文1. CameraCamera是Android framework里面支持的,允许你拍照和拍摄视频的设备,那么,本文在接下来就会讨论如何为你的用户提供快速,简单的图片和视频拍摄方法.2. 注意事项a. 在确定你的程序使用Came ...
  •   Android开发:调用camera API 创建MediaRecorder
    1. add below three permission into AndroidManifest.xml file <uses-permission android:name= "android.permission.CAMERA" /> <uses-permission android:name= "an ...
  •   Android调用Camera API拍照遇到的问题和解决方法
    工作中遇到需要自定义拍照的需求,然后就碰到预览时图像变形的问题,从网络上找到一些参考,综合一下解决了问题,记录一下.顺便希望有人可以一起讨论一下系统拍照程序的实现.我不知道源码里面是怎么实现的,因为下载的源码一直没看,甚至编译不出镜像文件.每天工作十几个小时,暂时实在没精力继续下去,而且老罗列出的读Android源码前需要看的书也没看完.终于有点时间整理下工 ...
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值