智能客服
你问我答,随时在线为你解决问题
相机无法正常启动,相关日志显示某些校验没有通过或者参数错误等问题。
正常启动相机的流程包括创建相机管理器(cameraManager)、创建输入/输出流(input/output)、创建会话(session)、配置会话(session)以及启动会话(session)。这些流程间存在相互依赖,如果存在某个部分创建失败、在流程中被释放导致对象不存在、使用不匹配的配置文件等情况,则会导致相机无法正常启动。比如在创建输出流的时候,没有先创建输入流,或者在创建输出流的时候,没有使用对应输入流获取的能力值,导致输入流和输出流不匹配等。具体原因可能有如下情况:
没有使用正确的profile,导致创建的输出流与输入流不匹配,会导致相机启动时黑屏。
提前调用相关的相机设置接口时,对应的配置还未设定完成,导致相机启动失败。
监听设置的时机不对,监听不生效,导致相机启动失败。
问题分析步骤
步骤一:创建相机管理器(cameraManager),并选择使用的镜头(getSupportedCameras),然后通过选定的镜头,获取输出流的配置文件(getSupportedOutputCapability),需要保证和输出流的模式对应(拍照或者录像)。
步骤二:根据配置文件创建对应的输入流,调用输入流的open方法打开镜头,然后创建输出流(预览,拍照/录像)。此时建议注册photoAvailable监听,用以获取照片。输出流的分辨率保持相同,然后创建对应模式的session,注意模式和输出流对应。
步骤三:调用session的beginConfig方法,开始配置。首先调用addInput方法,添加输入流;再调用addOutput方法,添加输出流;然后调用commitConfig方法,提交session的配置,此时session的配置完成。大部分问题都会在这个流程报错,如果有问题,则无法正常完成commitConfig整个流程。
步骤四:在commitConfig之后,大部分的session监听方法可在此时配置,并且可以做一些效果设定,例如白平衡等。
创建的输出流与输入流前,将两者的profile中的分辨率进行比较,保证分辨率一致。
大部分的set方法建议在commitConfig之后进行调用,比如白平衡相关的set接口。
大部分监听相关接口,需要在addInput之后调用,保证镜头打开并添加到session中后,数据可通过监听返回。
具体代码可参考拍照实践(ArkTS)。