# 会话配置问题

#### 问题现象

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

#### 可能原因

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

1.  beginConfig失败。
    
2.  addInput失败。
    
3.  addOutput失败。
    
4.  commitConfig失败。
    

**问题分析步骤**

步骤一：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)。