# 相机控制器(ArkTS)

从API version 20开始，相机框架通过相机控制器，为应用在直播场景提供美颜、虚化等能力。

相机控制器为直播和视频通话场景设计，目前仅支持在前置镜头的录像模式下使用，最高可支持1080P分辨率和30fps帧率。

#### 开发步骤

详细的API说明请参考Camera。

1.  导入camera接口，接口中提供了相机相关的属性和方法，导入方法如下。
    
    ```
    import { camera } from '@kit.CameraKit';
    import { BusinessError } from '@kit.BasicServicesKit';
    ```
    
2.  通过isControlCenterSupported接口，查询当前设备及当前场景是否支持相机控制器。
    
    ```
    function isControlCenterSupported(videoSession: camera.VideoSession): boolean {
      let isSupported: boolean = videoSession.isControlCenterSupported();
      return isSupported;
    }
    ```
    
3.  通过getSupportedEffectTypes接口，查询当前设备及当前场景下，相机控制器支持的效果类型。
    
    ```
    function getSupportedEffectTypes(videoSession: camera.VideoSession): Array<camera.ControlCenterEffectType> {
      let effectTypes: Array<camera.ControlCenterEffectType> = [];
      effectTypes = videoSession.getSupportedEffectTypes();
      return effectTypes;
    }
    ```
    
4.  若设备及场景支持相机控制器，使用enableControlCenter接口可启用或关闭控制器。
    
    ```
    function enableControlCenter(videoSession: camera.VideoSession, enable: boolean): void {
      let isSupported: boolean = videoSession.isControlCenterSupported();
      if (isSupported) {
        videoSession.enableControlCenter(enable);
      }
    }
    ```
    
5.  使能相机控制器后，可以在状态栏看到新增的视频效果图标。
    
6.  点击视频效果图标，在弹出的二级页面中，用户可调节控制器支持的效果，如图所示为美颜和背景虚化。
    

#### 状态监听

使用相机控制器的过程中，应用可以监听控制器效果的使能状态。

通过注册controlCenterEffectStatusChange的回调函数获取控制器中各效果的使能状态。

当控制器中某效果使能状态发生变化时，callback返回ControlCenterStatusInfo参数。

```
import { camera } from '@kit.CameraKit';
import { BusinessError } from '@kit.BasicServicesKit';

function callback(err: BusinessError, status: camera.ControlCenterStatusInfo): void {
  if (err !== undefined && err.code !== 0) {
    console.error(`Callback Error, errorCode: ${err.code}`);
    return;
  }
  console.info(`controlCenterEffectStatusChange: ${status}`);
}

function registerControlCenterEffectStatusChangeCallback(videoSession: camera.VideoSession): void {
  videoSession.on('controlCenterEffectStatusChange', callback);
}
```