当前位置: 首页 > news >正文

企业网站建设开发四个阶段制作微信小程序步骤

企业网站建设开发四个阶段,制作微信小程序步骤,做淘宝一件代发的网站,台州网站制作策划前言这篇文章简单介绍下移动端Android系统下利用Camera2相关API进行视频采集的方法。Camera2是谷歌在Android 5.0新增的用来替代Camera1操作摄像头的一个全新的API。按照惯例先上一份源码AndroidVideo。Camera2调用摄像头采集视频的核心实现在Camera2Capture.java。权限配置使用…前言这篇文章简单介绍下移动端Android系统下利用Camera2相关API进行视频采集的方法。Camera2是谷歌在Android 5.0新增的用来替代Camera1操作摄像头的一个全新的API。按照惯例先上一份源码AndroidVideo。Camera2调用摄像头采集视频的核心实现在Camera2Capture.java。权限配置使用Android平台提供的摄像头首先必须在配置文件中添加如下权限配置:获取摄像头信息打开摄像头管理器CameraManager是一个用于检测、连接和描述摄像头设备的一个系统服务可以通过调用Context.getSystemService(java.lang.String)方法来获取一个CameraManager的实例CameraManager mManager (CameraManager) context.getSystemService(Context.CAMERA_SERVICE);获取摄像头列表信息通过调用CameraManager.getCameraIdList()方法可以得到一个摄像头id的列表String[] cameraIds mCameraManager.getCameraIdList();for (String id : cameraIds) {//TODO}可以通过相对应的ID从CameraManager获取到对应摄像头的属性集合CameraCharacteristics。在CameraCharacteristics可以获取到诸如前后置情况、支持的输出size、支持的输出格式等等之类的。for (String id : cameraIds) {//传入摄像头id获取对应摄像头的参数集CameraCharacteristics characteristics mManager.getCameraCharacteristics(id);//获取摄像头的支持等级Integer level characteristics.get(CameraCharacteristics.INFO_SUPPORTED_HARDWARE_LEVEL);//如果是LEGACY等级不建议使用该摄像头if (level CameraCharacteristics.INFO_SUPPORTED_HARDWARE_LEVEL_LEGACY){continue;}//获取摄像头的朝向Integer facing characteristics.get(CameraCharacteristics.LENS_FACING);//筛选出前置摄像头if (facing ! CameraCharacteristics.LENS_FACING_FRONT) {continue;}//StreamConfigurationMap包含了该摄像头支持的size、format等信息StreamConfigurationMap map mCameraCharacteristics.get(CameraCharacteristics.SCALER_STREAM_CONFIGURATION_MAP);//获取输出格式为YUV_420_888时兼容的sizeSize[] size map.getOutputSizes(ImageFormat.YUV_420_888);//获取输出View为SurfaceView时兼容的size//Size[] size map.getOutputSizes(SurfaceHolder.class);//TODO 其他的参数例如输出格式、输出帧率上下限等}PS对于Camera2采集系统来说每个摄像头都有一个支持等级INFO_SUPPORTED_HARDWARE_LEVEL_3 支持YUV再处理和原始数据采集功能并且具备先进的功能。INFO_SUPPORTED_HARDWARE_LEVEL_FULL支持先进的摄像头功能。INFO_SUPPORTED_HARDWARE_LEVEL_LIMITED向后兼容模式底层等同于Camera1的实现。INFO_SUPPORTED_HARDWARE_LEVEL_LEGACY 随机赠送的功能支持支持性不足。PS总的来说如果摄像头等级是LEVEL_3和LEVEL_FULL才建议使用Camera2进行采集否则推荐采用兼容性更好的Camera1进行视频采集。打开摄像头通过摄像头信息我们可以找到所需要的CameraId接下来就用这个ID去获取我们的摄像头设备CameraDevice。函数原型是public void openCamera(String cameraId, final CameraDevice.StateCallback callback, Handler handler)cameraId是需要打开的摄像头的id为了监听摄像头的情况需要传入一个回调也就是第二个参数CameraDevice.StateCallback当然如果我们不想让open操作占用UI线程的时间的话我们可以通过构造一个HandlerThread的带Looper的子线程然后将其Handler传入即可。//打开摄像头正常打开会回调到CameraDeviceStateCallback的onOpened方法mManager.openCamera(mCameraId, new CameraDevice.StateCallback() {Overridepublic void onOpened(NonNull CameraDevice camera) {//摄像头成功连接//camera也就是我们需要获取的摄像头设备mCameraDevice camera;}Overridepublic void onDisconnected(NonNull CameraDevice camera) {//摄像头断开连接}Overridepublic void onError(NonNull CameraDevice camera, int error) {//打开错误}}, mHandler);创建采集会话在成功打开摄像头获取到相应的CameraDevice我们需要创建一个采集会话来提供程序与摄像头的交流。其函数原型是public abstract void createCaptureSession(List outputs,CameraCaptureSession.StateCallback callback, Handler handler) throws CameraAccessException。第一个参数传入的是需要采集的Surface为了监听会话创建情况我们需要传入一个CameraCaptureSession.StateCallback回调当然第三个参数也就是让操作能在对应Handler所在的线程中进行。//获取一个采集Session会话正常流程回回调到CameraCaptureSessionStateCallback的onConfigured方法mCameraDevice.createCaptureSession(Arrays.asList(mSurfaceView.getHolder().getSurface()), new CameraCaptureSession.StateCallback() {Overridepublic void onConfigured(NonNull CameraCaptureSession session) {//会话创建成功//mCameraCaptureSession也就是新创建的会话mCameraCaptureSession session;}Overridepublic void onConfigureFailed(NonNull CameraCaptureSession session) {//会话创建失败}}, mHandler);PS对于一些业务需求需要提高采集帧率(120fps及以上)createConstrainedHighSpeedCaptureSession()这个会话能良好的支持该功能。发送采集请求当需要开始采集时需要构造一个采集请求然后将这个请求发送给采集会话。//创建一个基于录制的请求mRequest mDevice.createCaptureRequest(CameraDevice.TEMPLATE_RECORD);//将需要的目标Surface加入Target列表mRequest.addTarget(surface);//重复发送这个请求进行持续的采集mCameraCaptureSession.setRepeatingRequest(mRequest.build(), NULL, mHandler);原始数据回调在Camera1的采集中我们一般通过设置setPreviewCallbackWithBuffer()和addCallbackBuffer()来获取到采集的原始数据那么在Camera2中将如何实现该功能呢我们可以用到ImageReader这个类//ImageReader是一个数据回调模块类似于Camera1的setPreviewCallbackWithBuffermReader ImageReader.newInstance(mConfig.mWidth, mConfig.mHeight, mConfig.mFormat, 2);mReader.setOnImageAvailableListener(new ImageReader.OnImageAvailableListener() {Overridepublic void onImageAvailable(ImageReader reader) {Image image reader.acquireNextImage();//数据处理image.close();}}, mHandler);我们需要在createCaptureSession()的第一个参数中将ImageReader的Surface传进去://通过ImageReader.getSurface()获取一个Surface并将其传给Session中mCameraDevice.createCaptureSession(Arrays.asList(mReader.getSurface())//....);然后在CaptureRequest添加这个Target//当然构造请求时需要将该Surface同时加入到Request的Target列表中mRequest.addTarget(mReader.getSurface());参考资料结语这篇文章简单介绍了Android平台基于Camera2的api进行摄像头采集的功能。Camera2虽然是谷歌当前建议使用的采集框架但是由于厂商的兼容性问题导致Camera2的api功能相对不稳定所以笔者还是建议开发以Camera1为主要采集、Camera2为辅助采集的架构实现比较靠谱。本文同步发布于简书、CSDN。End!
http://www.pierceye.com/news/38572/

相关文章:

  • 织梦网站install图片设计制作
  • 帝国cms做投资网站源码河南艾特 网站建设
  • 旅游网站建设翻译重庆做蔬菜配送的网站有哪些
  • 单页淘宝客网站2014年行吗自媒体平台账号注册
  • 连云港专业做网站哪个网站可以做翻译兼职
  • 计算机网络资源网站建设论文企业网站建设主要考虑哪些
  • 财经网站直播系统建设小程序代理注册
  • 用商标做网站名字珍珠设计制作培训
  • 网站建设案例完整代码有没有做网站源代码 修改的
  • 网站排名优化软件网站开发虚拟主机系统
  • 河北省住房和城市建设厅网站建设了湛江市志愿服务网站
  • 什么样企业需要网站建设北京seo优化诊断
  • asp与sql网站建设金融视频直播网站开发
  • 汶上1500元网站建设wordpress自定义
  • 网站制作小图标设计师发布作品的网站
  • 机械营销网站建设案例白银市建设局网站
  • 校园网站怎么建设wordpress 增加背景图片
  • 服务器网站后台登陆密码黄框显示 天堂资源地址在线下载
  • 织梦cms 做视频网站讯杰网站建设
  • 百度网站说明书搜索引擎营销的英文缩写
  • 长春快速建站公司百度收录排名
  • 山东网站建设公司推荐婚纱摄影手机网站欣赏
  • 程序员会搭建非法网站吗搜索引擎优化的主要工作有
  • 电子商务网站设计步骤手机视频转码vue
  • 苏州手机网站做网站的空间是啥
  • 做网站公司 陕西渭南深交所大宗交易平台
  • 4网站免费建站vi设计用什么软件做
  • 做直播网站找哪个网站好360推广 网站建设
  • 网站建设加推广优化网站建设基础流程
  • 一个网站可以做多少弹窗广告彩页设计画面元素