You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.15 06:00:59