安卓相机camera2开发知识点

关键类使用

  1. TextureView 
  2. WindowManager
  3. CameraManager
  4. StreamConfigurationMap
  5. MediaRecorder
  6. CameraDevice
  7. CameraDevice.StateCallback
  8. CaptureRequest.Builder
  9. CameraCaptureSession
  10. CameraCharacteristics
  11. StreamConfigurationMap
  12. CaptureRequest.Builder
  13. ImageReader

注意事项

1、每次界面失去焦点或者录制结束时都要重新销毁当前相机。

2、每次界面重新获取焦点时重新初始化当前相机流程。

3、注意组件宽高为准选择合适的相机尺寸,矩阵缩放时更加自然!

功能类代码介绍

TextureView 

  • 相机预览展示组件
  • 开发相机手势操作:焦距放大、缩小、点击获取焦点
  • 控制相机、视频预览显示方向、大小、比例
  • 根据手机旋转动态调整相机显示方向

WindowManager

  • 获取手机旋转方向:90度、270度等
  • 相机输出画面,输出的图片、视频旋转角度以此为准

CameraManager

  • 查找手机摄像头:前置摄像头、后置摄像头、USB扩展摄像头等
  • 拿到摄像头cameraId
  • 打开指定摄像头
  • 获取摄像头相机参数 StreamConfigurationMap、CameraCharacteristics

StreamConfigurationMap

  • 获取当前摄像头支持的输出尺寸、9:6 4:3 1:1等,返回的格式宽高,单位像素,例如 1080:1920等
  • 根据客户端业务查找最优尺寸,根据不同的机型动态适配最优尺寸。

CameraDevice.StateCallback

  • 监听相机打开、异常、断开
  • 拿到CameraDevice

CameraDevice 

  • 当前摄像头引用对象
  • 获取采集图像流展示到TextureView
  • 创建相机预览会话
  • 添加ImageReader拍照数据回调处理器
  • 拿到当前相机会话,CameraCaptureSession (执行拍照,相机会话管理)
  • 拿到相机览流控制器CaptureRequest.Builder (设置拍照闪光灯)

CaptureRequest.Builder

  • 相机视频流控制器
  • 展示相机焦距调整之后的画面。例如:用户通过手势放大缩小焦距。

CaptureRequest.Builder.set(CaptureRequest.SCALER_CROP_REGION, mRoom);

  • 设置拍照时闪光灯展示、相机预览时开启手电筒。

CameraCaptureSession

  • 控制预览流展示与暂停
  • 执行拍照,注意拍照时要暂停预览,不然会捕捉的画面,会是下一帧图像。
  • 拍照完成之后在CameraCaptureSession.CaptureCallback回调里面重新打开预览。

ImageReader

  • 获取执行拍照时捕获的帧,保存成图片
  • ImageReader.OnImageAvailableListener 在此监听器回调,注意子线程保存。
  • 为了获取图方便,建议再保存时添加回调,自动更新到展示界面。

CameraDevice.StateCallback

  • 监听相机打开、异常、断开
  • 拿到CameraDevice

MediaRecorder

  • 视频录制控制器
  • 设置视频录制方向setOrientationHint(90)前置摄像头:270、后置90. 
  • 帧率:一秒展示多少帧图像,视频卡顿。
  • 视频码率:码率和质量成正比,但是文件体积也和码率成正比,
  • 码率:mMediaRecoder.setVideoEncodingBitRate() , 太小界面模糊、太大文件越大。

目前最优设置默认10000000,然后根据当前使用相机尺寸(宽*高)动态匹配取最大值。

视频压缩优化

1、根据业务设置相机输出尺寸,找出最合适的尺寸大小。

2、调整视频录制帧率。

3、设置视频清晰度

4、FFmpeng?

图片压缩优化

1、根据业务设置相机输出尺寸,找出最合适的尺寸大小。

2、等比例缩放指定大小。

3、质量压缩

  • 0
    点赞
  • 14
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
### 回答1: Android自定义相机Camera2是一种基于Android Camera2 API的相机应用程序开发技术。相比于旧版Camera API,Camera2 API提供了更多的控制权和更高的性能。使用Camera2 API,开发者可以自定义相机的各种参数,如曝光时间、ISO、焦距等,从而实现更加精细的相机控制。同时,Camera2 API还支持RAW格式的图像输出,使得开发者可以更加灵活地处理相机输出的图像数据。 ### 回答2: Android自定义相机Camera2是基于Android 5.0之后提供的新一代相机API,相比较Camera1,它提供了更加丰富和灵活的功能。在使用Camera2 API时,需要使用一些异步的回调接口,通过监听器来处理相机的各种状态和数据。 Camera2 API 的使用分为三个阶段:预览、拍照和保存图片。其中,预览是最基本的功能,也是所有相机功能的基础。可以通过创建CameraDevice,设置相机的参数和预览界面,再通过ImageReader获取相机捕获的数据,最后进行图像显示。 在拍照功能中,需要使用相机的Capture请求和CaptureSession会话来进行捕获相片的操作。首先需要创建相机的CaptureRequest.Builder对象,设置拍照相关的参数。然后,需要使用CaptureRequest.Builder构建捕获请求CaptureRequest,再将捕获请求加入到CaptureSession,通过光圈控制、曝光时间、ISO值、白平衡等参数控制相机的拍摄效果。 最后,在保存图片时,需要使用ImageReader对象从相机捕获的数据中获取图片数据,然后将其保存到文件中或者显示到界面上。 总之,使用Camera2 API自定义相机可以在相机的预览、拍照和保存等各个环节上实现更加灵活的控制,能够充分发挥相机的功能,达到更好的拍照效果。 ### 回答3: Android自定义相机成为了越来越多开发者关注和学习的领域,其中相机API2(Camera2)是我们不可忽视的一部分。Android Lollipop时代,Google引入了Camera2 API,它是原来的相机API(Camera)的替代品,提供了很多强大的功能和灵活的控制权,包括更高的FPS、更低的延迟和更好的控制,让我们可以更精确地控制相机硬件,实现更好的相机+应用程序的体验。 使用Camera2 API, 我们可以: 1. 使用更高质量的图像传感器. 2. 以流的方式更容易访问图像预览数据. 3. 支持高帧率的视频录制,甚至支持高达120fps. 4. 可以在更广泛的控制选项(如焦距,曝光等)中进行定制,以实现更具创意的摄影模式。 5. 显着提高了拍摄速度和唤醒速度。 然而,相较于Camera API, Camera2 API一个更复杂和庞大的API,需要更多的配置和使用,刚开始可能会让些开发者望而却步,然而掌握Camera2 API后,它将为您带来更多的好处。开始使用Camera2 API不仅需要对Android摄像头架构有很好的理解,还需要一定的Java编程经验和计算机图形知识。 总之,Android自定义相机Camera2是非常复杂和庞大的API,需要开发人员掌握许多技能。但是,一旦掌握,它将为开发人员带来更高的图像质量,更精确的控制和更多的相机配置选项,这将为开发人员提高用户体验的基础,满足客户的各种摄影需求。

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

邻居出行

码农不易,相互鼓励!

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值