安卓相机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
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

邻居出行

码农不易,相互鼓励!

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

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

打赏作者

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

抵扣说明:

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

余额充值