CameraX录屏触发ERROR_SERVER_DIED(Error:8)视频无法保存问题排查
排查CameraX人脸检测与录屏冲突导致ERROR_SERVER_DIED的方案
1. 规范CameraX用例绑定逻辑
人脸检测依赖的Preview用例和录屏用的VideoCapture用例,必须在绑定CameraProvider时同时添加,禁止中途动态添加/移除单一一例——这类操作极易引发CameraService状态不一致,进而触发ERROR_SERVER_DIED。停止录屏后,应通过CameraProvider.unbindAll()解绑所有用例,再重新绑定带人脸检测的Preview用例,而非单独释放VideoCapture。
2. 修正VideoCapture的回调与配置
- 检查
captureVideo()中的输出文件配置:确保路径有写入权限,文件后缀使用.mp4这类系统支持的格式。 - 停止录屏时,保证
stopRecording()的回调逻辑无阻塞操作,同时打印完整错误栈而非仅错误码:videoCapture?.stopRecording(object : VideoCapture.OnVideoSavedCallback { override fun onVideoSaved(outputFileResults: VideoCapture.OutputFileResults) { // 仅执行轻量UI更新等操作,避免阻塞回调线程 } override fun onError(videoCaptureError: Int, message: String, cause: Throwable?) { Log.e("VideoCapture", "录屏失败: $message", cause) } })
3. 隔离人脸检测的分析线程
人脸检测的ImageAnalysis.Analyzer若在主线程执行耗时操作,会阻塞CameraX内部流程,导致CameraService超时崩溃。必须为分析器分配独立后台线程:
val imageAnalysis = ImageAnalysis.Builder() .setBackpressureStrategy(ImageAnalysis.STRATEGY_KEEP_ONLY_LATEST) .setExecutor(Executors.newSingleThreadExecutor()) .build() .also { it.setAnalyzer(faceDetectionAnalyzer) }
4. 验证权限与进程状态
- 确认APP已获取
CAMERA、RECORD_AUDIO、WRITE_EXTERNAL_STORAGE(Android 13+需READ_MEDIA_VIDEO)权限,且均为运行时主动授予。 - 禁止在后台启动/停止录屏,确保操作时Activity处于前台可见状态——后台操作易导致CameraService回收。
5. 最小化场景复现排查
- 先移除人脸检测逻辑,仅保留
Preview+VideoCapture用例测试录屏功能。若恢复正常,再逐步加回人脸检测,定位具体冲突点。 - 若移除人脸检测后仍报错,检查CameraX版本是否过时,尝试升级至最新稳定版(如
camera-core:1.3.0、camera-video:1.3.0)。
内容的提问来源于stack exchange,提问作者Werther Leiden
相关产品推荐
相关产品推荐

