本篇介绍 Camera2相比Camera1,使用起来要复杂一些,不过也节省了一些逻辑,比如可以自动处理角度问题。本篇就按照流程介绍下Camera2的简单使用,更多细节会后续介绍。 使用Camera2 申请权限 静态申请: <uses-permission android:name="android.permission.CAMERA" /> 动态申请: if (ContextCompat.checkSelfPermission
Camera2 介绍 今天为大家介绍一下如何在 Android 上进行视频采集。在 Android 系统下有两套 API 可以进行视频采集,它们是 Camera 和 Camera2 。 Camera是以前老的 API ,从 Android 5.0(21)之后就已经放弃了。我今天主要给大家介绍一下如何使用 Camera2 进行视频的采集。 Android Device:可以把它想象成我们自己的APP应用。 使用 Camera2 基本流程 创建一个专门的线程用于Camera的具体操作。Android系统已经为我们提供了 HandlerThread类,以方便我们创建 Hander 类型的线程。 创建一个预览view,它可以是GLSurfaceView或TextureView(这两个View的区别我也会再写一篇文章来介绍),用于视频采集时观看采集到的结果。
image.png 从 Android 5.0 开始,Google 引入了一套全新的相机框架 Camera2(android.hardware.camera2)并且废弃了旧的相机框架 Camera1 (android.hardware.Camera)。 截止到 Android P 为止,从低到高一共有 LEGACY、LIMITED、FULL 和 LEVEL_3 四个级别: LEGACY:向后兼容的级别,处于该级别的设备意味着它只支持 Camera1 4 CameraManager CameraManager 是一个负责查询和建立相机连接的系统服务,它的功能不多,这里列出几个 CameraManager 的关键功能: 将相机信息封装到 CameraCharacteristics 接下来将介绍采集到的数据YUV_420_888。
/** * Returns the capture session manager instance that modules use to store * temporary or final capture results. */ public CaptureSessionManager getCaptureSessionManager(); /** * Returns the memory manager which can be used to get informed about memory * status updates. */ public MemoryManager getMemoryManager(); /** * Returns the motion manager which senses when significant motion of the * camera should unlock a locked focus. */ public MotionManager getMotionManager(); /** * Returns the media saver instance. *
* Deprecated. Use {@link #getCaptureSessionManager()} whenever possible. * This direct access to media saver will go away. */ @Deprecated public MediaSaver getMediaSaver(); /** * @return A listener to be informed by events interesting for remote * capture apps. Will never return null. */ public RemoteShutterListener getRemoteShutterListener(); /** * @return The settings manager which allows get/set of all app settings. */ public SettingsManager getSettingsManager();
Camera1还是Camera2?好多开发者纠结,Android平台采集摄像头,到底是用Camera1还是Camera2?实际上,Camera1和Camera2分别对应相机API1和相机API2。 4. 更好的适配性和扩展性统一的接口和架构:Camera2 API提供了更统一的接口和更清晰的架构,便于开发者进行相机功能的开发和适配。 我们在做Android平台RTMP推送、轻量级RTSP服务、实时录像和GB28181设备对接模块的时候,都需要用到摄像头采集,早期,我们提供了Camera1的采集demo,后面碎渣Camera2的优势越来越明显 ,高版本设备已成主流,目前一般建议采用Camera2的采集。 Camera2 API控制更灵活,性能、图像处理能力优异、适配性和扩展性也好,在版本支持的前提下,一般建议采用Camera2实现摄像头采集技术诉求,以上是Camera1和Camera2技术扫盲和技术探讨
而在 Camera API 中,实现连拍功能相对较为困难,且连拍速度和效果可能不尽如人意4。 Android Camera2 RAW图像捕获要使用 Android Camera2 进行 RAW 图像捕获,你可以按照以下步骤进行操作:检查设备支持:首先,确保你的设备支持 Camera2 API 并且支持 Camera2大牛直播SDK前几年在做Android平台RTMP推送和轻量级RTSP服务的时候,实际上就已经支持了Camera2的采集和数据投递,考虑到,目前5.0以下版本的设备越来越少,后面的GB28181 Camera2 API 是从 Android 5.0(Lollipop)开始引入的,相对Camera API,优势非常明显,如果需要通过Android平台采集视频数据,在设备支持的前提下,建议尽可能用 Camera2做数据采集。
Camera API2是Google从Android5.0开始推出的配合HAL3使用的一套新架构,相比于API1,对应用层开发者而言开放了更多的自主控制权,主要特性包括: 可以获取更多的帧(预览/拍照) Android设备和Camera是通过管道pipeline的概念将两者进行串联的,在一个会话Session过程中系统发送Request,摄像头返回MetaData进行来回交互;预览和拍照等数据的传递是通过 Camera2主要类 ? Camera2中要获取预览数据则需要额外配置一下。 首先需要通过ImageReader创建的Surface,在创建session的时候配置进去. 总结 Camera2的基本使用总结到这里,使用起来肯定是不如Camera1方便,不过能让应用层有更多的操作空间总是值得的,而且从Android9.0开始也不得不使用这套架构了 ?
背景 在Android Camera2详解一文中,我们了解到使用Camera2 API启动相机预览将经历如下三个步骤,其中创建会话需要准备的预览surface一般来自SurfaceView,TextureView Surface ready后 previewOutputConfig.addSurface(mSurfaceHolder.getSurface()); // 4. 【Android Camera2 API Deferred Surface实战】 https://deepinout.com/android-camera-official-documentation/ android-camera2-api/android-camera2-api-deferred-surface-practice.html ~~END~~
提问2 我想使用android camera2 API获取从对象到android设备的距离。 96%E4%BB%8E%E5%AF%B9%E8%B1%A1%E5%88%B0Android%E8%AE%BE%E5%A4%87%E7%9A%84%E8%B7%9D%E7%A6%BB 提问3 我想为自己开发一款 我已经在谷歌样本Camera2应用程序中添加了一个SeekBar,但我找不到实现手动对焦的方法。 我在camera2,android中找到了手动对焦,但它在我的LG G4上无效。 BD%BF%E7%94%A8android-camera-API%E6%89%8B%E5%8A%A8%E5%AF%B9%E7%84%A6 提问4 Problem I've recognized that focus at all via camera2, your device needs to have MANUAL_SENSOR in the android.request.availableCapabilities
这边文章主要记录下在Android系统上,如何通过Camera2 API去拿到RAW数据,也是当个备忘。 平时我们拿实时预览数据,更多的是获取yuv数据。 相关实现代码,google已经给出了官方的demo 本文介绍的内容也是基于官方demo来展开~ 如果大家了解或者使用过Camera2获取实时yuv或者拍照jpeg数据,那获取raw,其实流程上都是一样 Camera2上我们需要拿到camera的数据,都是通过ImagerReader来获取。 初始化ImageReader的时候,RAW相关的格式,光是从名字上看,就有4个,应该选择用哪个呢,它们之间又有什么区别呢。 如下图所示,RAW10和RAW12,是和bit位数相关。
Android Camera2采集摄像头原始数据并手动预览 最近研究了一下android摄像头开发相关的技术,也看了Google提供的Camera2Basic调用示例,以及网上一部分代码,但都是在TextureView 于是实现一下几个功能: 获取摄像头数据,并手动绘制图像 随时开启/关闭预览 随时保存当前摄像头图像,即使在关闭预览情况下 Android Camera2接口 查阅了一些资料,Android Java 层由于从API21开始,已经废弃原Camera接口,所以这里采用Camera2接口。 这里把CamCap程序中的Camera2的调用顺序整理如下: ? 运行截图 开启预览时的4:3画面和16:9画面 ? ? 关闭预览,同时可以继续拍照 ? ? haibindev.cnblogs.com,合作请联系QQ。(转载请注明作者和出处~)
Camera2简介 在Google 推出Android 5.0的时候, Android Camera API 版本升级到了API2(android.hardware.camera2), 之前使用的API1 在API架构方面, Camera2和之前的Camera有很大区别, APP和底层Camera之前可以想象成用管道方式连接, 如下图: 这里引用了管道的概念将安卓设备和摄像头之间联通起来,系统向摄像头发送 下面是 camera2包中的主要类: 其中 CameraManager 是那个站在高处统管所有摄像投设备(CameraDevice)的管理者,而每个 CameraDevice 自己会负责建立 CameraCaptureSession Camera2 API调用基础流程: 通过context.getSystemService(Context.CAMERA_SERVICE) 获取CameraManager; 调用CameraManager Camera2介绍,和RTMP调用流程,感兴趣的可以自行学习。
零、前言 Android 5.0+ (API 21) Camera过时.png ---->[源码里让我们用camera2] * @deprecated We recommend using the new {@link android.hardware.camera2} API for new applications. 这里的camera2可不是一个类哦 一、打开相机并预览 1.早听闻camera2很复杂,没想到这么复杂,我都有点小hold不住 视图布局和上一篇一样,只是实现变了而已 1.打开相机:Camera2Activity (图画出来感觉清楚多了) 打开相机.png 1.1:准备两个Handler HandlerThread handlerThread = new HandlerThread("Camera2");// at android.media.ImageReader.acquireNextImage(ImageReader.java:501) at com.toly1994.video.cameral2
同时,还可以进行互动交流,提高教学效果4.校园活动直播:学校举办的各种活动,如运动会、文艺演出等,可以通过 Android 设备采集现场画面并进行 RTMP 推流直播,让无法到现场的师生、家长能够实时观看活动盛况 " />摄像头采集以Camera2采集为例,大概的实现如下:import android.Manifest;import android.annotation.SuppressLint;import android.content.Context Camera2的采集优势在哪里呢?功能更强大更精细的控制:Camera2 提供了对摄像头更底层、更精细的控制能力。 性能更优更高的帧率和更低的延迟:Camera2 API 在处理图像数据时具有更高的效率,能够支持更高的帧率采集,从而可以实现更流畅的视频录制和实时预览。 灵活性更高可定制的处理流程:Camera2 允许开发者自定义图像数据的处理流程,开发者可以在图像数据从摄像头采集到最终显示或存储的过程中,插入自己的处理逻辑,如添加滤镜、进行图像识别、实时分析等。
那么在Camera2的架构中,我们要如何获取NV21或者YV12格式的预览数据呢? 在之前的文章Android Camera2详解中描述到,要获取每一帧的预览数据,我们需要ImageReader这个类的帮助: val imageReader = ImageReader(width, height { throw new IllegalArgumentException( "NV21 format is not supported"); } NV21 查看文档关于NV21的描述,发现在Camera2 YUV_420_888是一种Y:U:V按4:1:1的比例进行采样的格式,也就是说其中每一个UV都被四个Y共享, 888表示每一个分量都是8bits NV21和YV12都是这种YUV_420的采样格式,只是其中 val size = data.size val uv = ByteArray(size / 3) var uOffset = size / 6 * 4
之前在 Android Camera2 简介 这篇文章中简单介绍了下 Camera2 中 AF/AE 对焦区域如何进行设置,之前是通过手动计算对应关系实现的,但这种方式需要考虑到前后摄的区别,前摄和后摄坐标映射有区别 View坐标系,绿色为 Camera 坐标系,旧的Camera底层坐标范围大小是固定的,宽高都为2000,而Camera2中的大小要根据查询出来的 SENSOR_INFO_ACTIVE_ARRAY_SIZE 来进行确定 使用Matrix进行坐标映射 Camera API 1 关于API 1的坐标映射, 可以参考Android源码中Camera代码, 路径: packages/apps/Camera2/src 得到有映射关系的Matrix后,坐标转换只需调用mapRect(result, source)即可 Camera API 2 上面 API 1 的代码是不能直接用在 API 2中的, 主要原因是 Camera2 ; import android.graphics.Rect; import android.graphics.RectF; import android.hardware.camera2.CameraCharacteristics
这可能是全网唯一一篇介绍Android Camera2接口集成人脸算法的文章了~ 写在前面: 说起人脸识别,相信大家都不会感到陌生,在我们平时的工作生活中,人脸打卡、刷脸支付等等已经是应用的非常广泛了, 这篇文章将针对下面几点展开介绍: 一、Android平台人脸识别流程图 二、ArcSoft人脸识别算法sdk下载 三、Camera2 API 集成 ArcSoft人脸识别算法 一、Android平台人脸识别流程图 介绍完了官方的demo,那接下来我们看下采用Android Camera2 的api,如何去集成arcsoft的人脸识别算法呢。 不过Android 目前已经不再对Camera旧的架构进行维护,而且目前主流的手机采用的基本上也都是Camera2的接口。所以我们还是非常有必要熟悉掌握Camera2的各种使用。 } // 回传数据是YUV420 else if (y.length / u.length == 4)
camera1.jpg 前言 今天为大家介绍一下使用Camera1进行视频采集。之前我写过一篇文章介绍的是Camera2进行视频采集。那么有人会问,为什么有了Camera2还要介绍Camera1呢? 这里最主要的原因是因为Android版本众多,Camera2是Google新推出的视频采集架构,但很多老的机型还不支持,所以为了兼容性的问题,我们还不能放弃使用Camera1进行视频的采集。 <uses-permission android:name="android.permission.CAMERA" /> 第二步,动态申请Camera权限。 4. 开启预览。5. 当有视频帧到达后,使用OpengGL ES绘制图片。 ...... 参考 视频渲染之EGL Android视频采集Camera2 http://www.jianshu.com/p/39a015f2996e ----
这可能是全网唯一一篇介绍Android Camera2接口集成人脸算法的文章了~ 写在前面: 说起人脸识别,相信大家都不会感到陌生,在我们平时的工作生活中,人脸打卡、刷脸支付等等已经是应用的非常广泛了 这篇文章将针对下面几点展开介绍: 一、Android平台人脸识别程图 二、ArcSoft人脸识别算法sdk下载 三、Camera2 API 集成 ArcSoft人脸识别算法 一、Android平台人脸识别流程图 介绍完了官方的demo,那接下来我们看下采用Android Camera2 的api,如何去集成arcsoft的人脸识别算法呢。 不过Android 目前已经不再对Camera旧的架构进行维护,而且目前主流的手机采用的基本上也都是Camera2的接口。所以我们还是非常有必要熟悉掌握Camera2的各种使用。 } // 回传数据是YUV420 else if (y.length / u.length == 4)
本文将深入源码,结合 MainActivity.java 及核心辅助类,剖析如何利用 Android Camera2 API 的高效采集能力,配合 大牛直播SDK (SmartPublisher) 的多路分发架构 整体数据流向如下: 数据采集:Camera2Helper 负责调用 Camera2 API,通过 ImageReader 获取 YUV_420_888 格式的视频帧。 Recorder:写入MP4文件进行本地存储。 这种架构的优势在于一次采集、一次编码、多路复用,极大地降低了CPU和内存的开销。2. Camera2 API 的高效采集与YUV处理Camera2 API 相比旧版 Camera API 提供了更强大的控制力,但也更为复杂。 本方案通过 Camera2Helper 实现了一次 YUV 数据采集,却能同时支撑 RTMP 远端直播、RTSP 局域网分发 以及 MP4 本地存证 三大业务流。