讨论广场 问答详情
Camera Kit 连续切前后摄后,为什么预览偶尔直接黑掉?
李强0100 2026-09-15 09:55:14
赞 237 评论 分享
harmonyos

切几次摄像头后 Preview 还在,画面却黑了。

await session.stop()
cameralInput.close()
cameralInput = newInput
await session.start()

 

这种切换需要重新建 Session,还是输入输出重新挂载就行?

赞 237 评论 分享
写回答
全部评论(1)

这种情况一般建议直接重建 Session,比你在原来的 Session 上拆拆装装要稳得多。

摄像头这个组件本身就比较挑,Preview Surface、CameraInput、Session 这三者之间的绑定关系很容易出问题。你现在 stop 之后 close 掉旧的 input,再 new 一个新的 input 挂上去,很多时候 Surface 和新 Input 之间的状态没对齐,就会出现画面黑掉但 Preview 还在的情况。

比较稳妥的做法是切摄像头的时候,把整个 Session 都关掉,Preview 也停掉,然后重新走一遍初始化流程:创建新的 CameraInput → 创建新的 Session → 把 Input 和 Preview Output 都加到新 Session 上 → 再 start。虽然多做了几步,但出问题的概率小很多。

另外注意一下顺序:切之前先 session.stop(),然后 removeInput,再 close 旧的 input,然后再创建新的。如果顺序乱了,很容易出现资源没释放干净,新的 input 拿不到摄像头的情况。

赞
2026-09-23 13:39:31