问题描述
我有一个录制视频的应用,目前安装量约为 90K(225K 下载),Crashlytics 统计数据似乎不错 - 无崩溃用户率为 99.5%,Google Play 评分也不错 - 4.5
但是对于我的一些用户来说,camera2
仍然会发生下一个错误(这种情况现在可能会发生一次或几次,所以不经常发生,但仍然不时发生):
Capture session configuration failed
在下一个设备上
和
Camera2 startPreview java.lang.IllegalArgumentException: Surface was abandoned
at android.hardware.camera2.utils.SurfaceUtils.getSurfaceSize(SurfaceUtils.java:89)
at android.hardware.camera2.params.OutputConfiguration.<init>(OutputConfiguration.java:260)
at android.hardware.camera2.params.OutputConfiguration.<init>(OutputConfiguration.java:145)
在下一个设备上
可能的原因(基于用户的一些电子邮件回复):
- 当他们锁定设备屏幕时
- 来电
App 可以在后台继续录制视频(前台服务)。在 Activity
onStop()
上,它开始预览一个表面(从 SurfaceTexture
创建,用于使用 OpenGL 处理进行视频录制)而不是两个:
val surfaces = ArrayList<Surface>().apply {
holder?.let { add(it.surface) } // non-nullable when activity is started (foreground only)
add(it.cameraSurface) // always,for video recording (background and foreground)
}
此逻辑 100% 稳定,否则无法在大多数设备上运行。
而且我无法在自己的设备上重现这些问题。
经过测试,在我的设备上整晚关闭显示屏的情况下进行后台录音,没有错误,通过来电测试,仍然可以正常工作,正如我之前所说,它只发生在某些用户身上,而不是很多用户身上。
如果满足以下条件,我的应用还会为设备使用旧版/弃用的 Camera API:
val level = cameraCharacteristics.get(CameraCharacteristics.INFO_SUPPORTED_HARDWARE_LEVEL)
val isLegacy = level == CameraCharacteristics.INFO_SUPPORTED_HARDWARE_LEVEL_LEGACY
对于所有其他设备,它使用 camera2
(具有 LIMITED、FULL 级别等)api
我经常从使用 camera2
API 的设备的用户那里收到错误消息。
似乎已弃用的 Camera API 更稳定
解决方法
暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!
如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。
小编邮箱:dio#foxmail.com (将#修改为@)