Camera2 开发问题记录
1.Camera2 开发时在onDestroy关闭相机时会报错; onError会报错 ,int error的值为1
protected final CameraDevice.StateCallback stateCallback = new CameraDevice.StateCallback() {/*** 当相机打开的时候,调用* @param cameraDevice*/@Overridepublic void onOpened(@NonNull CameraDevice cameraDevice) {mCameraOpenCloseLock.release(); /** 释放访问许可**/mCameraDevice = cameraDevice; /** 将正在使用的相机指向将打开的相机**/startPreView(); /** 开始预览 **/}@Overridepublic void onDisconnected(@NonNull CameraDevice cameraDevice) {KLog.e("摄像头连接丢失 == " );mCameraOpenCloseLock.release(); /** 释放访问许可**/cameraDevice.close(); /** 关闭相机**/mCameraDevice = null; /** 将正在使用的相机指向null**/}/*** 发生异常的时候调用** 这里释放资源,然后关闭界面* @param cameraDevice* @param error*/@Overridepublic void onError(@NonNull CameraDevice cameraDevice, int error) {KLog.e("摄像头发送异常 == " + error);mCameraOpenCloseLock.release(); /** 释放访问许可**/cameraDevice.close(); /** 关闭相机**/mCameraDevice = null; /** 将正在使用的相机指向null**//** 执行 关闭 Activity **/iCamera.onError(operationType, Constant.CAMERA2_STATE_ERROR);}@Overridepublic void onClosed(@NonNull CameraDevice camera) {super.onClosed(camera);KLog.e("摄像头完全关闭");}
};
解决方案: 在onPause中 添加: 先停止相机预览。
/*** 在MediaRecorder停止前,停止相机预览,防止抛出serious error异常。*/
try {mPreviewSession.stopRepeating();mPreviewSession.abortCaptures();
} catch (CameraAccessException e) {KLog.e("为相机创建一个CameraCaptureSession 停止预览");e.printStackTrace();
}
************************************************************************************************************
2. Lacking privileges to access camera service 错误
错误场景: camera 授权未成功就调用打开相机操作.
@Override
protected void openCamera(Activity activity, int width, int height) {QLog.i("初始化相机");if (PermissionsManager.checkCameraPermission(activity)) { /** 权限判断**/if (null == activity || activity.isFinishing()) {return;}}else {iCamera.onError(operationType, Constant.CAMERA2_NO_PERMISSION);}CameraManager cameraManager = (CameraManager)getContext().getSystemService(Context.CAMERA_SERVICE);setCameraInfo(cameraManager, width, height); // 打开相机的方法}
解决方案: 判断授权失败时不执行后续方法.或者程序运行时先将所需权限都授权.
************************************************************************************************************
3. android.permission.CAMERA 授权失败
错误场景: Android 7.0 系统, AndroidManifest.xml文件中配置了
<uses-permission android:name="android.permission.CAMERA" /> 权限,也在Activity中动态申请了Camera 权限,但是项目运行时其他权限会弹出授权对话框(比如 Android.permission.RECORD_AUDIO), 唯独 CAMERA 不弹出授权对话框, 动态授权回调方法里直接回调授权失败.
解决方法: 将AndroidManifest.xml 文件中的 CAMERA 权限给删除掉,重构项目,然后在添加权限.(这波操作真的很无语...)
************************************************************************************************************
4. CameraCaptureSession: Session 1: Failed to create capture session; configuration failed
camera2 录像时,配置createCaptureSession 总是回调 onConfigureFailed
mCameraDevice.createCaptureSession(surfaces, new CameraCaptureSession.StateCallback() {@Overridepublic void onConfigured(@NonNull CameraCaptureSession cameraCaptureSession) {mCaptureSession = cameraCaptureSession;setup3AControlsLocked();// 最后,我们开始显示相机预览。setRepeatingRequest(cameraCaptureSession);QLog.i( " startRecordingVideo 正式开始录制 ");c2p.activity.runOnUiThread(new Runnable() {@Overridepublic void run() {mIsRecordingVideo = true;mMediaRecorder.start();}});}@Overridepublic void onConfigureFailed(@NonNull CameraCaptureSession cameraCaptureSession) {QLog.e("开始录像 配置失败");onc2.onErrorCallBack(2004, "开始录像 配置失败");} }, mBackgroundHandler);
解决方案:
1.查看 MediaRecorder.setVideoSize(c2p.width, c2p.height); 录像设置的分辨率是否符合摄像头支持的分辨率
2.查看 texture.setDefaultBufferSize(Width(), tHeight()); texture设置的分辨率是否符合预览支持的分辨率
StreamConfigurationMap map = characteristics.get(CameraCharacteristics.SCALER_STREAM_CONFIGURATION_MAP); map.getOutputSizes(MediaRecorder.class) 获取录像支持的分辨率集合 map.getOutputSizes(SurfaceTexture.class) 获取预览支持的分辨率集合
Camera2 开发问题记录相关推荐
- camera2 开发demo记录
camera2开发,谷歌提供了两个demo,android-Camera2Basic 和 android-Camera2Raw. android-Camera2Basic: 使用这个demo,出现了在 ...
- IOS塔防游戏《坦克对大炮》的开发设计记录
IOS塔防游戏<坦克对大炮>的开发设计记录 引子 游戏已经在App Store上线几个月了,一直很想写点什么记录一下.真要写的时候,却又发现无从下笔没啥好写的.在2012年进入IOS,对于 ...
- Android 开发学习记录(4)---- httpclient使用(三)
之前在Android 开发学习记录(3)---- httpclient使用(二)中介绍了如何使用httpclient访问需要账户登录的网址,当然首先是要有一个合法的登录账户. 但是现在好多网站在登录时 ...
- 个人前端工程师开发工具记录
原文地址:https://www.zybuluo.com/yyman001/note/58799 个人前端工程师开发工具记录 我们前端,每个人都有自己的开发工作环境,工具等,所以我写了这一篇文章,为自 ...
- 解密网游木马开发全记录(一)
解密网游木马开发全记录 ------WM_GETTEXT篇 网络虚拟财产的安全越来越受到广大网民的关注,而黑客经常使用非法手段获取网游账号及密码进行非法盈利.为了揭露网游盗号的基本原理,我将给大家演示 ...
- 微信小游戏开发学习记录2
接上一篇:微信小游戏开发学习记录_寂静流年韶华舞的博客-CSDN博客_微信小游戏开发学习 目录 一.UI系统 1.基础渲染组件-精灵组件 (1)操作: (2)Sprite 属性 (3)渲染模式 2.L ...
- Android Studio 项目设计开发bug记录以及未来新技术
文章目录 项目设计开发bug记录: (1)打包时出错 (2)关闭项目自启动 (3)显示工具栏 (4)怎么导入jar包 (5)导入工程出现异常 (6)run项目出现异常: (7)修改包名 (8)导入项目 ...
- Windows11 Android开发相关记录(持续更新...)
Windows11 Android开发相关记录(持续更新-) 本章节主要记录安装好Windos系统后开发环境搭建及其心得. 以及开发常用软件和相关配置. 以下属于个人做法,仅供参考: 文章目录 Win ...
- Jetson开发实战记录(一):Jetson家族的基本介绍
Jetson开发实战记录(一):Jetson家族的基本介绍 一.Jetson家族 二.Jetson家族产品横向对比 1.Jeston Nano 2.Jetson Xavier 3.Jetson Xav ...
最新文章
- 操作系统信号量与P、V操作 初步认识整理
- 【JavaSE_07】Java中类和对象-封装特性
- shell脚本如何实现goto_linux通过shell脚本实现对apache服务的监控
- U Sparkle 开发者计划招募中!
- 如何拿到阿里算法校招offer
- 从零开始学JavaWeb
- 06CRecordView类
- JSP 中的几种注释
- 集合覆盖模型例题_在打CodeForces的过程中发现的一个小模型
- 用curl发起https请求
- 计算机怎么剪切音乐然后合在一起,怎么在电脑裁剪歌曲 怎么裁剪和拼接音乐...
- 两台电脑之间大文件怎么传输用什么软件?
- .join()用法 | python学习
- 2019利兹大学计算机排名,2019软科世界大学学术排名利兹大学排名第101-150
- 2022年10月 使用win11系统自带远程桌面,远程控制VMware虚拟机系统
- 为什么我会性格懦弱?如何改变懦弱的性格?
- 做出正确选择 重设精彩人生
- iPhone卫星功能仅用于紧急通信;韩国通过立法禁止苹果、谷歌垄断支付系统;Linux 5.14 版本发布|极客头条
- 服务器负载不高 响应慢_一篇读懂分布式架构下的负载均衡
- 电脑分盘怎么分?分盘详细教程来了,图文教学