# 会话配置问题

## 问题现象

相机无法正常启动，且会话（session）相关流程报错。

## 可能原因

会话的配置流程主要包括beginConfig、addInput、addOutput和commitConfig四个流程。流程间的调用顺序不可改变，并且要保证四个流程都成功配置，相机才能正常运行。具体原因可能有如下情况：

1. [beginConfig](https://developer.huawei.com/consumer/cn/doc/harmonyos-references/arkts-apis-camera-session#beginconfig11)失败。

2. [addInput](https://developer.huawei.com/consumer/cn/doc/harmonyos-references/arkts-apis-camera-session#addinput11)失败。

3. [addOutput](https://developer.huawei.com/consumer/cn/doc/harmonyos-references/arkts-apis-camera-session#addoutput11)失败。

4. [commitConfig](https://developer.huawei.com/consumer/cn/doc/harmonyos-references/arkts-apis-camera-session#commitconfig11)失败。

**问题分析步骤**

步骤一：beginConfig失败的原因可能是：当session在commitConfig时，调用该接口；当session对象不存在时，也会报空指针异常。

步骤二：addInput只能在session调用beginConfig后调用，当commitConfig之后就无法修改，每个session只能配置一个input，会有空值检测。

步骤三：addOutput只能在session处于beginConfig并且进行addInput之后，commitConfig之前开始配置，会对当前的profile进行检测，查看是否与input对应。可通过ValidateOutputProfile查看对应的output的profile内容，会有空值检测。

步骤四：commitConfig在确定上述配置之后，调用该方法将配置提交给底层，并将输入流和输出流的通道连接，使图像可以通过通道返回应用。

相关log搜索关键词：beginConfig|addInput|addOutput|commitConfig

## 解决措施

1. beginConfig失败，检查session是否已经被释放，或者session是否正在进行commitConfig操作。

2. 在调用addInput接口前，可先调用canAddInput接口，验证当前session是否可以添加input。

3. 在调用addOutput接口前，可先调用canAddOutput接口，验证当前session是否可以添加output。

4. 在commitConfig时，需要保证上述过程没有失败，并且session在当前过程中，没有被释放或者进行其他操作。

正常session配置请参考[拍照(ArkTS)](https://developer.huawei.com/consumer/cn/doc/harmonyos-guides/camera-shooting)。

