Camera Kit 连续切前后摄后,为什么预览偶尔直接黑掉?
harmonyos
切几次摄像头后 Preview 还在,画面却黑了。
await session.stop()
cameralInput.close()
cameralInput = newInput
await session.start()
这种切换需要重新建 Session,还是输入输出重新挂载就行?
您需要先 登录 才能评论/回答
全部评论(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
