视频采集:Android平台基于Camera 1的实现

前言

这篇文章简单介绍下移动端Android系统下利用Camera1进行视频数据采集的方法。
按照惯例先上一份源码 AndroidVideo
Camera1调用摄像头采集视频的核心实现在CameraCapture.java

权限配置

使用Android平台提供的摄像头,首先必须在配置文件中添加如下权限配置:

<uses-permission android:name="android.permission.CAMERA"/>

打开摄像头

1、首先我们需要获取当前设备的摄像头数量:

int cameraNum = Camera.getNumberOfCameras();

2、一般业务上面都会指定是打开前置摄像头还是后置摄像头:

//获取对应摄像头信息
for (int id = 0; id < cameraNum; id++) {
   
	Camera.getCameraInfo(id, info);
	if (info.facing == cameraId) {
   
		//TODO 
	}
}

判断info.facing的值,他的值有如下几种:

  • Camera.CameraInfo.CAMERA_FACING_FRONT:前置摄像头
  • Camera.CameraInfo.CAMERA_FACING_BACK:后置摄像头

3、调用打开摄像的接口,它的原型是public static Camera open(int cameraId)
需要传入的是摄像头的ID;一般手机发展来说,都是先有后置摄像头,然后才发展前置摄像头,所以摄像头的ID排列是后置是0,前置是1,其他摄像头再递增。
但是我们最好通过CAMERA_FACING_FRONTCAMERA_FACING_BACK比对才比较靠谱。
open()返回摄像头实例,如果返回NULL或者抛异常,请检查cameraId传入是否有误或者权限申请被禁止情况。

配置摄像头参数

一般来说,我们需要关注摄像头预览格式、帧率和宽高尺寸等配置。
获取参数集合

//获取摄像头参数设置集合
Camera.Parameters parms = mCamera.getParameters();
//进行参数设置
//必须setParameters后,更新的属性才会生效
mCamera.setParameters(parms);

设置预览格式
一般最通用的就是ImageFormat.NV21格式,其实也就是YUV420SP格式,对于YUV的具体格式这里不做扩展分析,其最重要一点就是YUV420SP的UV是交错存放在一个平面的。
我们需要调用parms.getSupportedPreviewFormats()返回一个支持格式列表,然后判断其中是否包含我们所需要的格式。

//获取支持的预览格式集合
List<Integer> supportedPreviewFormat = parms.getSupportedPreviewFormats();
//一般来说,ImageFormat.NV21通用适配绝大部分手机
if (supportedPreviewFormat.contains(mConfig.mFormat)) {
   
	parms.setPreviewFormat(mConfig.mFormat);
}
else {
   
	//格式不兼容,采用默认格式 or 返回客户端处理错误
}

设置预览宽高
通过调用parms.getSupportedPreviewSizes()得出支持的size列表,然后对比我们需要的szie,查询列表中是否存在。
如果不存在,建议取一个相对靠近的支持的size进行设置。

int weight;
int lastWeight = Integer.MAX_VALUE;
int curWidth = 0, curHeight = 0;
//获取支持的预览size列表
List<Camera.Size> sizes = parms.getSupportedPreviewSizes();
for (Came
  • 0
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 2
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值