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 开发问题记录相关推荐

  1. camera2 开发demo记录

    camera2开发,谷歌提供了两个demo,android-Camera2Basic 和 android-Camera2Raw. android-Camera2Basic: 使用这个demo,出现了在 ...

  2. IOS塔防游戏《坦克对大炮》的开发设计记录

    IOS塔防游戏<坦克对大炮>的开发设计记录 引子 游戏已经在App Store上线几个月了,一直很想写点什么记录一下.真要写的时候,却又发现无从下笔没啥好写的.在2012年进入IOS,对于 ...

  3. Android 开发学习记录(4)---- httpclient使用(三)

    之前在Android 开发学习记录(3)---- httpclient使用(二)中介绍了如何使用httpclient访问需要账户登录的网址,当然首先是要有一个合法的登录账户. 但是现在好多网站在登录时 ...

  4. 个人前端工程师开发工具记录

    原文地址:https://www.zybuluo.com/yyman001/note/58799 个人前端工程师开发工具记录 我们前端,每个人都有自己的开发工作环境,工具等,所以我写了这一篇文章,为自 ...

  5. 解密网游木马开发全记录(一)

    解密网游木马开发全记录 ------WM_GETTEXT篇 网络虚拟财产的安全越来越受到广大网民的关注,而黑客经常使用非法手段获取网游账号及密码进行非法盈利.为了揭露网游盗号的基本原理,我将给大家演示 ...

  6. 微信小游戏开发学习记录2

    接上一篇:微信小游戏开发学习记录_寂静流年韶华舞的博客-CSDN博客_微信小游戏开发学习 目录 一.UI系统 1.基础渲染组件-精灵组件 (1)操作: (2)Sprite 属性 (3)渲染模式 2.L ...

  7. Android Studio 项目设计开发bug记录以及未来新技术

    文章目录 项目设计开发bug记录: (1)打包时出错 (2)关闭项目自启动 (3)显示工具栏 (4)怎么导入jar包 (5)导入工程出现异常 (6)run项目出现异常: (7)修改包名 (8)导入项目 ...

  8. Windows11 Android开发相关记录(持续更新...)

    Windows11 Android开发相关记录(持续更新-) 本章节主要记录安装好Windos系统后开发环境搭建及其心得. 以及开发常用软件和相关配置. 以下属于个人做法,仅供参考: 文章目录 Win ...

  9. Jetson开发实战记录(一):Jetson家族的基本介绍

    Jetson开发实战记录(一):Jetson家族的基本介绍 一.Jetson家族 二.Jetson家族产品横向对比 1.Jeston Nano 2.Jetson Xavier 3.Jetson Xav ...

最新文章

  1. 操作系统信号量与P、V操作 初步认识整理
  2. 【JavaSE_07】Java中类和对象-封装特性
  3. shell脚本如何实现goto_linux通过shell脚本实现对apache服务的监控
  4. U Sparkle 开发者计划招募中!
  5. 如何拿到阿里算法校招offer
  6. 从零开始学JavaWeb
  7. 06CRecordView类
  8. JSP 中的几种注释
  9. 集合覆盖模型例题_在打CodeForces的过程中发现的一个小模型
  10. 用curl发起https请求
  11. 计算机怎么剪切音乐然后合在一起,怎么在电脑裁剪歌曲 怎么裁剪和拼接音乐...
  12. 两台电脑之间大文件怎么传输用什么软件?
  13. .join()用法 | python学习
  14. 2019利兹大学计算机排名,2019软科世界大学学术排名利兹大学排名第101-150
  15. 2022年10月 使用win11系统自带远程桌面,远程控制VMware虚拟机系统
  16. 为什么我会性格懦弱?如何改变懦弱的性格?
  17. 做出正确选择 重设精彩人生
  18. iPhone卫星功能仅用于紧急通信;韩国通过立法禁止苹果、谷歌垄断支付系统;Linux 5.14 版本发布|极客头条
  19. 服务器负载不高 响应慢_一篇读懂分布式架构下的负载均衡
  20. 电脑分盘怎么分?分盘详细教程来了,图文教学

热门文章

  1. WOW技术---2, 骨骼动画
  2. 强国的语言与语言强国
  3. 【8.6】代码源 - 【前缀集】【矩阵游戏】【谁才是最终赢家?】【放置多米诺骨牌】
  4. 兔子数列 - C语言
  5. RTX3050显卡怎么样 rtx3050显卡什么水平 rtx3050相当于gtx什么显卡
  6. 习题6 3.6.2 典型题例解析 3.6.3 自测训练
  7. csv文件中文乱码转换
  8. AUTODESK 卸载工具,完美彻底卸载清除干净autodesk各种软件残留注册表和文件
  9. android手机下开发摄像头拍摄
  10. 示例填充图片_填充内容:工具,技巧和动态示例