com.aliyun.svideosdk.recorder

## Interface AliyunIRecorder

-     public interface AliyunIRecorder

  视频录制接口

- - ### Method Summary

    All Methods Instance Methods Abstract Methods Deprecated Methods
    Modifier and Type | Method and Description
    --- | ---
    `int` | `addImage(EffectImage effctImage)` 添加水印素材,如果需要使用文字水印，可以通过Bitmap工具把文字转成水印,如果需要调整水印的位置 `setEffectView(float, float, float, float, EffectBase)`
    `int` | `addPaster(EffectPaster effectPaster)` 添加人脸动图，人脸动图与普通动图要严格区分，如果把普通动图素材当作人脸动图使用，则会出现动图不显示的情况，要使用人脸动图，必须先设置 rotation，通过`setRotation(int)`实现。rotation的具体计算方式，请参考Demo中的代码。 添加普通动图不能使用该接口，而需要使用`addPaster(EffectPaster, float, float, float, float, float, boolean)`
    `int` | `addPaster(EffectPaster effectPaster, float sx, float sy, float sw, float sh, float rotation, boolean flip)` 添加普通动图，人脸动图可以当作普通动图，但是普通动图不能当作人脸动图 注意 `setEffectView(float, float, float, float, EffectBase)`的执行效果会和此函数的执行效果进行叠加
    `int` | `applyAnimationFilter(EffectFilter effectFilter)` 设置动效滤镜，将滤镜资源的目录填入到`EffectBase.setPath(String)`中，或者通过`EffectFilter.Builder`来 构建
    `int` | `applyFilter(EffectFilter effectFilter)` 设置滤镜效果
    `int` | `applyMv(EffectBean effectMv)` Deprecated.
    `void` | `cancelRecording()` 取消录制视频
    `void` | `destroy()` 销毁并释放资源
    `int` | `finishRecording()` 结束录制合成视频
    `Uri` | `finishRecordingForEdit()` 结束录制，并且将录制的片段描述信息保存成json文件，返回json文件的Uri，用于编辑等功能。
    `AliyunLogInfo` | `getAliyunLogInfo()` 获取打点数据信息
    `int` | `getBeautyLevel()` 获取当前美颜度
    `int` | `getCameraCount()` 获取摄像头数量
    `AliyunIClipManager` | `getClipManager()` 获取片段管理器
    `float` | `getCurrentExposureCompensationRatio()` 获取当前曝光度的比例值
    `java.util.List<Camera.Size>` | `getSupportedPictureSize()` 获取当前摄像头支持的照片尺寸
    `java.util.SortedSet<Size>` | `getSupportedPictureSizes()` 获取当前摄像头支持的照片尺寸
    `void` | `needFaceTrackInternal(boolean need)` 是否需要开启内置人脸识别
    `void` | `pauseMv()` Deprecated.
    `int` | `postToGl(java.lang.Runnable r)` Deprecated.
    `void` | `removeAnimationFilter(EffectFilter effctFilter)` 删除动效滤镜
    `int` | `removeFromGl(java.lang.Runnable r)` Deprecated.
    `void` | `removeImage(EffectImage effctImage)` 删除水印素材
    `void` | `removePaster(EffectPaster effectPaster)` 删除动图素材，普通动图和人脸动图都通过该接口移除
    `int` | `resizePreviewSize(int width, int height)` 重新设置预览窗口大小（可以实现动态切换预览画幅）
    `void` | `restartMv()` Deprecated.
    `void` | `resumeMv()` Deprecated.
    `void` | `setBeautyLevel(int level)` 设置美颜度
    `void` | `setBeautyStatus(boolean on)` 设置美颜开/关
    `void` | `setCamera(CameraType camera)` 设置开启预览时的摄像头类型。仅在第一次打开时生效，后面如果要切换摄像头使用`switchCamera()`
    `void` | `setCameraCaptureDataMode(int captureDataMode)` 设置Camera 数据回调方式
    `void` | `setCameraParam(CameraParam cameraParam)` 设置摄像头预览参数
    `void` | `setDisplayView(SurfaceView displayView)` 设置显示预览的`SurfaceView`
    `int` | `setEffectView(float xRatio, float yRatio, float widthRatio, float heightRatio, EffectBase effectBase)` 设置特效信息（位置，大小） widthRatio和heightRatio参数需要符合素材宽高/屏幕宽高的比例 比如： 素材的宽高为200，300， 屏幕的宽高为 540，720 sw = (float)200/540, sh = (float)300/720。sx,sy是归一化的屏幕比例参数，坐标是以资源的中心点作为锚点的
    `void` | `setEncoderInfoCallback(EncoderInfoCallback callback)` 设置编码信息回调
    `int` | `setExposureCompensationRatio(float value)` 设置曝光度比例
    `void` | `setFaceDetectRotation(int rotation)` 设置单独的人脸识别角度,如果使用本接口，请不要使用setRotation
    `int` | `setFaces(float[][] faces)` 设置人脸坐标点，而二维组每个元素，代表一张脸的6个特征点。
    `void` | `setFaceTrackInternalMaxFaceCount(int maxFaceCount)` 设置内置人脸识别的最大识别数，最大为3个，大于3个为3个
    `int` | `setFaceTrackInternalModelPath(java.lang.String path)` 设置人脸识别模型文件夹路径 这里必须是包含模型文件的目录路径，模型文件的文件名不能修改
    `void` | `setFocus(float xRatio, float yRatio)` 设置对焦点，仅当`setFocusMode(int)` 的参数为`CameraParam.FOCUS_MODE_AUTO`时有效
    `void` | `setFocus(Point point)` Deprecated.
    `void` | `setFocusMode(int mode)` 设置聚焦模式
    `int` | `setGop(int gop)` 设置Gop大小，这里的gop单位是帧数，即两个I帧之间间隔多少帧，而实际上硬编码器内部是以时间为gop单位的，即两个I帧间隔多少秒，因此 实际输出视频的Gop是用该值除以编码帧率计算而出。举例编码帧率设置为25fps，该接口设置125，则实际视频的gop值是5秒，也就是5秒一个I帧。 如果设置的gop小于帧率值，则内部给到编码器的gop为1，如果大于25，则取整计算。
    `void` | `setIsAutoClearClipVideos(boolean isAutoClear)` Added in v3.23.0, set whether to clear the clip video files, default is false Note: if you set true, you should not use `finishRecordingForEdit()`
    `boolean` | `setLight(FlashType flashType)` 设置闪光灯模式
    `void` | `setMediaInfo(MediaInfo mediaInfo)` 设置录制的媒体信息
    `void` | `setMusic(java.lang.String path, long startTime, long duration)` 设置录制背景音乐
    `void` | `setMute(boolean isMute)` 录制静音
    `void` | `setOnAudioCallback(OnAudioCallBack callback)` 回调pcm音频数据，音频数据的格式为单通道，16位，采样率为44.1khz，
    `void` | `setOnChoosePictureSizeCallBack(OnChoosePictureSizeCallBack callback)` 设置拍照分辨率回调
    `void` | `setOnFaceDetectInfoListener(OnFaceDetectInfoListener listener)` 设置人脸检测信息变化的回调，当人脸检测信息发生改变时将触发 `OnFaceDetectInfoListener.onFaceInfoChange(FaceDetectInfo)`
    `void` | `setOnFrameCallback(OnFrameCallBack callback)` 设置采集帧回调，每采集一帧数据都通过该回调返回帧数据
    `void` | `setOnTextureIdCallback(OnTextureIdCallBack callback)` 设置纹理ID回调
    `int` | `setOutputPath(java.lang.String path)` 设置输出文件路径
    `int` | `setPictureSize(Camera.Size size)` 设置照片尺寸
    `int` | `setPictureSize(Size size)` 设置照片尺寸
    `int` | `setProperty(java.lang.String key, java.lang.String value)`
    `void` | `setRate(float rate)` 设置录制速率
    `void` | `setRecordCallback(RecordCallback callback)` 设置录制回调
    `void` | `setRecordCallBack(RecordCallback callBack)` Deprecated. 使用`setRecordCallback(com.aliyun.svideosdk.recorder.RecordCallback)`替代
    `void` | `setRecordRotation(int rotation)` 设置单独的录制视频角度,如果使用本接口，请不要使用setRotation 如果需要根据传感器角度来设置录制角度,需要加上计算 if (rotation == 90 || rotation == 270) { rotation = (rotation + 90) % 360; if (mAliyunCamera.getCameraInfo().facing == CameraInfo.CAMERA_FACING_BACK) { rotation += 180; rotation %= 360; } } else if (rotation == 0 || rotation == 180) { rotation = (rotation + 270) % 360; }
    `void` | `setRotation(int rotation)` 设置传感器的角度值，如果传感器返回的角度值不是0，90，180，270四个值中的，需要根据范围来确定 Sets the rotation angle of the gyro sensor.
    `void` | `setShutterSound(boolean bNeedShutterSound)` 设置拍照时是否存在咔嚓声
    `void` | `setTakePicturePreview(boolean bPreviewAfterPicture)` 设置拍照后是否继续预览
    `int` | `setVideoBitrate(int bitrate)` 视频码率，有效的码率值必须在[200, 20000]之间，即最小是200Kbps，最大是20Mbps 单位：kbps，如果超过当前分辨率的使用码率值，有的编码器 不会无限增加码率，比如720P的码率值4M应该就足够使用了，可能会出现设置10M码率，输出的视频码率依然只有4M左右，具体根据不同编码器行为而定。
    `int` | `setVideoFlipH(boolean flip)` 设置输出视频是否竖直方向镜像（仅对输出视频有效，预览不改变）
    `void` | `setVideoQuality(VideoQuality quality)` 设置视频质量，该接口影响的是生成视频的码率
    `int` | `setZoom(float rate)` 设置摄像头缩放比例
    `int` | `startPreview()` 开启预览 注意：该方法建议在`Activity#onResume()`生命周期函数中调用
    `int` | `startPreviewAfterTakePicture()` 默认情况时,拍照结束会自动启动预览,故默认情况下用户不必调用 startPreviewAfterTakePicture; 若拍照结束后不自启预览时,用户需要手动调用 startPreviewAfterTakePicture 来启动预览.
    `int` | `startRecording()` 开始录制
    `void` | `stopPreview()` 停止预览 注意：该方法建议在`Activity#onPause()`生命周期函数中调用
    `int` | `stopRecording()` 停止录制
    `int` | `switchCamera()` 切换摄像头
    `FlashType` | `switchLight()` 切换闪光灯
    `void` | `takePhoto(boolean needBitmap)` 拍照（从GPU中抓取数据，可以包含特效） 该接口为异步接口，当照片生成后通过`RecordCallback.onPictureBack(Bitmap)` 或者 `RecordCallback.onPictureDataBack(byte[])` 返回
    `void` | `takePicture(boolean needBitmap)` 使用系统的拍照接口（不能包含特效） 该接口为异步接口，当照片生成后通过`RecordCallback.onPictureBack(Bitmap)` 或者 `RecordCallback.onPictureDataBack(byte[])` 返回
    `int` | `updateAnimationFilter(EffectFilter effectFilter)` 更新动效滤镜，将滤镜资源的目录填入到`EffectBase.setPath(String)`中，或者通过`EffectFilter.Builder`来 构建
    `java.lang.String` | `version()` 获取当前接口版本号

- - ### Method Detail

    - #### setMediaInfo

          void setMediaInfo(MediaInfo mediaInfo)

      设置录制的媒体信息
      Parameters:
        `mediaInfo` -
      See Also:
        `MediaInfo`

    - #### getClipManager

          AliyunIClipManager getClipManager()

      获取片段管理器
      Returns:
        片段管理器对象
      See Also:
        `AliyunIClipManager`

    - #### setOutputPath

          int setOutputPath(java.lang.String path)

      设置输出文件路径
      Parameters:
        `path` -

    - #### setVideoQuality

          void setVideoQuality(VideoQuality quality)

      设置视频质量，该接口影响的是生成视频的码率
      Parameters:
        `quality` - 质量等级
      See Also:
        `VideoQuality`

    - #### setGop

          int setGop(int gop)

      设置Gop大小，这里的gop单位是帧数，即两个I帧之间间隔多少帧，而实际上硬编码器内部是以时间为gop单位的，即两个I帧间隔多少秒，因此 实际输出视频的Gop是用该值除以编码帧率计算而出。举例编码帧率设置为25fps，该接口设置125，则实际视频的gop值是5秒，也就是5秒一个I帧。 如果设置的gop小于帧率值，则内部给到编码器的gop为1，如果大于25，则取整计算。
      Parameters:
        `gop` - 合法的区间[0,9000] 大于等于0，且小于等于9000 0的情况下，在有的手机上可以做到全I帧，而也有一些手机做不到全I帧
      Returns:
        `AliyunErrorCode.OK` --- 成功 `AliyunErrorCode.ERROR_INVALID_ARGUMENTS` --- 设置的值不在合法的区间内

    - #### setVideoBitrate

          int setVideoBitrate(int bitrate)

      视频码率，有效的码率值必须在[200, 20000]之间，即最小是200Kbps，最大是20Mbps 单位：kbps，如果超过当前分辨率的使用码率值，有的编码器 不会无限增加码率，比如720P的码率值4M应该就足够使用了，可能会出现设置10M码率，输出的视频码率依然只有4M左右，具体根据不同编码器行为而定。
      Parameters:
        `bitrate` -
      Returns:
        成功返回0，失败返回对应的 ErrorCode `AliyunErrorCode.ERROR_INVALID_ARGUMENTS` --设置了无效的码率值

    - #### setCamera

          void setCamera(CameraType camera)

      设置开启预览时的摄像头类型。仅在第一次打开时生效，后面如果要切换摄像头使用`switchCamera()`
      Parameters:
        `camera` -
      See Also:
        `CameraType.BACK`, `CameraType.FRONT`

    - #### setDisplayView

          void setDisplayView(SurfaceView displayView)

      设置显示预览的`SurfaceView`
      Parameters:
        `displayView` -

    - #### setCameraCaptureDataMode

          void setCameraCaptureDataMode(int captureDataMode)

      设置Camera 数据回调方式
      Parameters:
        `captureDataMode` -
      See Also:
        `com.aliyun.svideosdk.common.struct.recorder`

    - #### startPreview

          int startPreview()

      开启预览 注意：该方法建议在`Activity#onResume()`生命周期函数中调用

    - #### stopPreview

          void stopPreview()

      停止预览 注意：该方法建议在`Activity#onPause()`生命周期函数中调用

    - #### destroy

          void destroy()

      销毁并释放资源

    - #### addPaster

          int addPaster(EffectPaster effectPaster)

      添加人脸动图，人脸动图与普通动图要严格区分，如果把普通动图素材当作人脸动图使用，则会出现动图不显示的情况，要使用人脸动图，必须先设置 rotation，通过`setRotation(int)`实现。rotation的具体计算方式，请参考Demo中的代码。 添加普通动图不能使用该接口，而需要使用`addPaster(EffectPaster, float, float, float, float, float, boolean)`
      Parameters:
        `effectPaster` -
      Returns:
        成功返回0，失败返回对应的ErrorCode
      See Also:
        `EffectPaster`

    - #### addPaster

          int addPaster(EffectPaster effectPaster,
                        float sx,
                        float sy,
                        float sw,
                        float sh,
                        float rotation,
                        boolean flip)

      添加普通动图，人脸动图可以当作普通动图，但是普通动图不能当作人脸动图 注意 `setEffectView(float, float, float, float, EffectBase)`的执行效果会和此函数的执行效果进行叠加
      Parameters:
        `effectPaster` -
        `sx` - 位置信息的x坐标（相对输出大小的比例值）
        `sy` - 位置信息的y坐标（相对输出大小的比例值）
        `sw` - 尺寸信息的宽度（相对输出大小的比例值）
        `sh` - 尺寸信息的高度（相对输出大小的比例值）
        `rotation` - 弧度
        `flip` - 是否反转
      Returns:
        成功返回0，失败返回对应的ErrorCode
      See Also:
        `setEffectView(float, float, float, float, EffectBase)`

    - #### removePaster

          void removePaster(EffectPaster effectPaster)

      删除动图素材，普通动图和人脸动图都通过该接口移除
      Parameters:
        `effectPaster` -

    - #### addImage

          int addImage(EffectImage effctImage)

      添加水印素材,如果需要使用文字水印，可以通过Bitmap工具把文字转成水印,如果需要调整水印的位置 `setEffectView(float, float, float, float, EffectBase)`
      Parameters:
        `effctImage` -
      Returns:
        成功返回0，失败返回对应的ErrorCode

    - #### removeImage

          void removeImage(EffectImage effctImage)

      删除水印素材
      Parameters:
        `effctImage` -

    - #### applyFilter

          int applyFilter(EffectFilter effectFilter)

      设置滤镜效果
      Parameters:
        `effectFilter` - 设置为null表示移除滤镜效果
      Returns:
        成功返回0，失败返回对应的Error Code

    - #### applyAnimationFilter

          int applyAnimationFilter(EffectFilter effectFilter)

      设置动效滤镜，将滤镜资源的目录填入到`EffectBase.setPath(String)`中，或者通过`EffectFilter.Builder`来 构建
      Parameters:
        `effectFilter` -
      Returns:
        成功返回0，失败返回对应的Error Code

    - #### updateAnimationFilter

          int updateAnimationFilter(EffectFilter effectFilter)

      更新动效滤镜，将滤镜资源的目录填入到`EffectBase.setPath(String)`中，或者通过`EffectFilter.Builder`来 构建
      Parameters:
        `effectFilter` -
      Returns:
        成功返回0，失败返回对应的Error Code

    - #### removeAnimationFilter

          void removeAnimationFilter(EffectFilter effctFilter)

      删除动效滤镜
      Parameters:
        `effctFilter` -

    - #### applyMv

          @Deprecated
          int applyMv(EffectBean effectMv)

      Deprecated.
      添加魔法音乐，构建EffectBean对象，主要填入path参数，魔法音乐不支持时间设置，且当前只能有一个魔法音乐， 当添加下一个时会替换上一个，去除效果则传入空值或则path参数为空
      Parameters:
        `effectMv` - `EffectBean`
      Returns:
        正确返回0, 错误返回错误码

    - #### pauseMv

          @Deprecated
          void pauseMv()

      Deprecated.
      暂停魔法音乐播放。

    - #### resumeMv

          @Deprecated
          void resumeMv()

      Deprecated.
      恢复魔法音乐的播放

    - #### restartMv

          @Deprecated
          void restartMv()

      Deprecated.
      从头开始播放魔法音乐

    - #### getCameraCount

          int getCameraCount()

      获取摄像头数量
      Returns:
        设备可用摄像头数量

    - #### setCameraParam

          void setCameraParam(CameraParam cameraParam)

      设置摄像头预览参数
      Parameters:
        `cameraParam` -
      See Also:
        `CameraParam`

    - #### switchCamera

          int switchCamera()

      切换摄像头
      Returns:
        返回切换后的摄像头ID

    - #### switchLight

          FlashType switchLight()

      切换闪光灯
      Returns:
        当前闪光灯模式
      See Also:
        `FlashType.AUTO`, `FlashType.OFF`, `FlashType.ON`

    - #### setLight

          boolean setLight(FlashType flashType)

      设置闪光灯模式
      Parameters:
        `flashType` -
      Returns:
        true：成功，false：失败

    - #### setZoom

          int setZoom(float rate)

      设置摄像头缩放比例
      Parameters:
        `rate` -

    - #### setExposureCompensationRatio

          int setExposureCompensationRatio(float value)

      设置曝光度比例
      Parameters:
        `value` -

    - #### setFocusMode

          void setFocusMode(int mode)

      设置聚焦模式
      Parameters:
        `mode` -
      See Also:
        `CameraParam.FOCUS_MODE_CONTINUE`, `CameraParam.FOCUS_MODE_AUTO`

    - #### setMusic

          void setMusic(java.lang.String path,
                        long startTime,
                        long duration)

      设置录制背景音乐
      Parameters:
        `path` - 音乐文件路径
        `startTime` - 音乐开始时间，单位毫秒
        `duration` - 音乐长度，单位毫秒

    - #### setRate

          void setRate(float rate)

      设置录制速率
      Parameters:
        `rate` - 范围[0.5 - 2.0]

    - #### setMute

          void setMute(boolean isMute)

      录制静音
      Parameters:
        `isMute` - 是否静音

    - #### setFocus

          @Deprecated
          void setFocus(Point point)

      Deprecated.
      设置对焦点 Camera2 请使用`#setFocus(Point`
      Parameters:
        `point` - 点击事件时获取的屏幕坐标的绝对值

    - #### setFocus

          void setFocus(float xRatio,
                        float yRatio)

      设置对焦点，仅当`setFocusMode(int)` 的参数为`CameraParam.FOCUS_MODE_AUTO`时有效
      Parameters:
        `xRatio` - 坐标点x方向上相对预览显示窗口（并非屏幕大小）的比例值
        `yRatio` - 坐标点y方向上相对预览显示窗口（并非屏幕大小）的比例值

    - #### getBeautyLevel

          int getBeautyLevel()

      获取当前美颜度
      Returns:
        当前的美颜度级别

    - #### setBeautyLevel

          void setBeautyLevel(int level)

      设置美颜度
      Parameters:
        `level` - [0, 100]， 0表示没有美颜，100表示最大美颜度

    - #### setBeautyStatus

          void setBeautyStatus(boolean on)

      设置美颜开/关
      Parameters:
        `on` - true：开， false：关

    - #### startRecording

          int startRecording()

      开始录制

    - #### stopRecording

          int stopRecording()

      停止录制

    - #### finishRecording

          int finishRecording()

      结束录制合成视频

    - #### cancelRecording

          void cancelRecording()

      取消录制视频

    - #### finishRecordingForEdit

          Uri finishRecordingForEdit()

      结束录制，并且将录制的片段描述信息保存成json文件，返回json文件的Uri，用于编辑等功能。
      Returns:
        返回json文件的路径

    - #### setEffectView

          int setEffectView(float xRatio,
                            float yRatio,
                            float widthRatio,
                            float heightRatio,
                            EffectBase effectBase)

      设置特效信息（位置，大小） widthRatio和heightRatio参数需要符合素材宽高/屏幕宽高的比例 比如： 素材的宽高为200，300， 屏幕的宽高为 540，720 sw = (float)200/540, sh = (float)300/720。sx,sy是归一化的屏幕比例参数，坐标是以资源的中心点作为锚点的
      Parameters:
        `xRatio` - 位置信息的x坐标（比例值）
        `yRatio` - 位置信息的y坐标（比例值）
        `widthRatio` - 大小信息的宽度（比例值）
        `heightRatio` - 大小信息的高度（比例值）
        `effectBase` - 对应的特效素材

    - #### setRecordCallback

          void setRecordCallback(RecordCallback callback)

      设置录制回调
      Parameters:
        `callback` -
      See Also:
        `RecordCallback`

    - #### setEncoderInfoCallback

          void setEncoderInfoCallback(EncoderInfoCallback callback)

      设置编码信息回调
      Parameters:
        `callback` -
      See Also:
        `EncoderInfoCallback`

    - #### setRecordCallBack

          void setRecordCallBack(RecordCallback callBack)

      Deprecated. 使用`setRecordCallback(com.aliyun.svideosdk.recorder.RecordCallback)`替代
      设置录制回调
      Parameters:
        `callBack` - 回调

    - #### setOnFrameCallback

          void setOnFrameCallback(OnFrameCallBack callback)

      设置采集帧回调，每采集一帧数据都通过该回调返回帧数据
      Parameters:
        `callback` -
      See Also:
        `OnFrameCallBack`

    - #### setOnChoosePictureSizeCallBack

          void setOnChoosePictureSizeCallBack(OnChoosePictureSizeCallBack callback)

      设置拍照分辨率回调
      Parameters:
        `callback` -

    - #### setOnAudioCallback

          void setOnAudioCallback(OnAudioCallBack callback)

      回调pcm音频数据，音频数据的格式为单通道，16位，采样率为44.1khz，
      Parameters:
        `callback` -

    - #### setFaces

          int setFaces(float[][] faces)

      设置人脸坐标点，而二维组每个元素，代表一张脸的6个特征点。
      Parameters:
        `faces` - nx6的二维数组，6表示6个特征点 point[i][0] => LEFT_EYE_X 左眼X point[i][1] => LEFT_EYE_Y 左眼Y point[i][2] => RIGHT_EYE_X 右眼X point[i][3] => RIGHT_EYE_Y 右眼Y point[i][4] => MOUTH_X 嘴部X point[i][5] => MOUTH_Y 嘴部Y 表示第i张脸的6个特征点。
      Returns:

    - #### setRotation

          void setRotation(int rotation)

      设置传感器的角度值，如果传感器返回的角度值不是0，90，180，270四个值中的，需要根据范围来确定 Sets the rotation angle of the gyro sensor. If the original angle is not one of the following values: 0, 90, 180, and 270, use the following method to determine the rotation angle.

               private int getSensorRotation() {
                          int orientation = orientationDetector.getOrientation();
                          int rotation = 90;
                          if (orientation >= 45 && orientation < 135) {
                              rotation = 180;
                          }
                          if (orientation >= 135 && orientation < 225) {
                              rotation = 270;
                          }
                          if (orientation >= 225 && orientation < 315) {
                              rotation = 0;
                          }
                          if (mCameraType == CameraType.FRONT) {
                              if (rotation != 0) {
                                  rotation = 360 - rotation;
                              }
                          }
                          return rotation;
                      }

      Parameters:
        `rotation` - Do not use this method to control the angle when performing facial recognition or recording.
      See Also:
        `setFaceDetectRotation(int)`, `setRecordRotation(int)`

    - #### setFaceDetectRotation

          void setFaceDetectRotation(int rotation)

      设置单独的人脸识别角度,如果使用本接口，请不要使用setRotation
      See Also:
        `setRecordRotation(int)`, `setRotation(int)`

    - #### setRecordRotation

          void setRecordRotation(int rotation)

      设置单独的录制视频角度,如果使用本接口，请不要使用setRotation 如果需要根据传感器角度来设置录制角度,需要加上计算 if (rotation == 90 || rotation == 270) { rotation = (rotation + 90) % 360; if (mAliyunCamera.getCameraInfo().facing == CameraInfo.CAMERA_FACING_BACK) { rotation += 180; rotation %= 360; } } else if (rotation == 0 || rotation == 180) { rotation = (rotation + 270) % 360; }
      See Also:
        `setRotation(int)`, `setFaceDetectRotation(int)`

    - #### setOnTextureIdCallback

          void setOnTextureIdCallback(OnTextureIdCallBack callback)

      设置纹理ID回调
      Parameters:
        `callback` -
      See Also:
        `OnTextureIdCallBack`

    - #### setOnFaceDetectInfoListener

          void setOnFaceDetectInfoListener(OnFaceDetectInfoListener listener)

      设置人脸检测信息变化的回调，当人脸检测信息发生改变时将触发 `OnFaceDetectInfoListener.onFaceInfoChange(FaceDetectInfo)`
      Parameters:
        `listener` -

    - #### getCurrentExposureCompensationRatio

          float getCurrentExposureCompensationRatio()

      获取当前曝光度的比例值
      Returns:
        返回当前设置的曝光度比例值

    - #### takePhoto

          void takePhoto(boolean needBitmap)

      拍照（从GPU中抓取数据，可以包含特效） 该接口为异步接口，当照片生成后通过`RecordCallback.onPictureBack(Bitmap)` 或者 `RecordCallback.onPictureDataBack(byte[])` 返回
      Parameters:
        `needBitmap` - 是否需要生成Bitmap

    - #### takePicture

          void takePicture(boolean needBitmap)

      使用系统的拍照接口（不能包含特效） 该接口为异步接口，当照片生成后通过`RecordCallback.onPictureBack(Bitmap)` 或者 `RecordCallback.onPictureDataBack(byte[])` 返回
      Parameters:
        `needBitmap` -

    - #### needFaceTrackInternal

          void needFaceTrackInternal(boolean need)

      是否需要开启内置人脸识别
      Parameters:
        `need` -

    - #### setFaceTrackInternalModelPath

          int setFaceTrackInternalModelPath(java.lang.String path)

      设置人脸识别模型文件夹路径 这里必须是包含模型文件的目录路径，模型文件的文件名不能修改
      Parameters:
        `path` -
      Returns:
        `AliyunErrorCode.OK`-成功 `AliyunErrorCode.ERROR_INVALID_ARGUMENTS`-失败，文件无效（文件路径错误，或者文件损坏/不完整）

    - #### setFaceTrackInternalMaxFaceCount

          void setFaceTrackInternalMaxFaceCount(int maxFaceCount)

      设置内置人脸识别的最大识别数，最大为3个，大于3个为3个
      Parameters:
        `maxFaceCount` -

    - #### setShutterSound

          void setShutterSound(boolean bNeedShutterSound)

      设置拍照时是否存在咔嚓声
      Parameters:
        `bNeedShutterSound` - true: 有拍照时的咔嚓声, false: 无拍照时的咔嚓声; 默认为 true.

    - #### setTakePicturePreview

          void setTakePicturePreview(boolean bPreviewAfterPicture)

      设置拍照后是否继续预览
      Parameters:
        `bPreviewAfterPicture` - true: 拍照后启动预览, false: 拍照后停留在拍完后的照片; 默认为 true.

    - #### version

          java.lang.String version()

      获取当前接口版本号
      Returns:
        返回版本号字符串

    - #### getSupportedPictureSize

          java.util.List<Camera.Size> getSupportedPictureSize()

      获取当前摄像头支持的照片尺寸
      Returns:
        照片尺寸列表

    - #### getSupportedPictureSizes

          java.util.SortedSet<Size> getSupportedPictureSizes()

      获取当前摄像头支持的照片尺寸
      Returns:
        照片尺寸列表

    - #### setPictureSize

          int setPictureSize(Camera.Size size)

      设置照片尺寸
      Parameters:
        `size` -
      Returns:
        状态码

    - #### setPictureSize

          int setPictureSize(Size size)

      设置照片尺寸
      Parameters:
        `size` -
      Returns:
        状态码

    - #### getAliyunLogInfo

          AliyunLogInfo getAliyunLogInfo()

      获取打点数据信息
      Returns:
        返回打点数据信息

    - #### postToGl

          @Deprecated
          int postToGl(java.lang.Runnable r)

      Deprecated.
      向gl线程post一个操作，可以用来执行一些与open gl资源相关的操作。
      Parameters:
        `r` -
      Returns:
        `AliyunErrorCode.OK`-成功 `AliyunErrorCode.ERROR_INVALID_STATE`-失败

    - #### removeFromGl

          @Deprecated
          int removeFromGl(java.lang.Runnable r)

      Deprecated.
      移除向gl线程post的某个操作。
      Parameters:
        `r` -
      Returns:
        `AliyunErrorCode.OK`-成功 `AliyunErrorCode.ERROR_INVALID_STATE`-失败

    - #### startPreviewAfterTakePicture

          int startPreviewAfterTakePicture()

      默认情况时,拍照结束会自动启动预览,故默认情况下用户不必调用 startPreviewAfterTakePicture; 若拍照结束后不自启预览时,用户需要手动调用 startPreviewAfterTakePicture 来启动预览.

      拍照结束后是否自启动预览, @see setTakePicturePreview(boolean bNeedPreviewAfterPicture)

    - #### resizePreviewSize

          int resizePreviewSize(int width,
                                int height)

      重新设置预览窗口大小（可以实现动态切换预览画幅）
      Parameters:
        `width` - 预览宽度
        `height` - 预览高度
      Returns:

    - #### setProperty

          int setProperty(java.lang.String key,
                          java.lang.String value)

      Parameters:
        `key` - the key setted.
        `value` - the value corresponding the above key

    - #### setVideoFlipH

          int setVideoFlipH(boolean flip)

      设置输出视频是否竖直方向镜像（仅对输出视频有效，预览不改变）
      Parameters:
        `flip` - 是否镜像
      Returns:

    - #### setIsAutoClearClipVideos

          void setIsAutoClearClipVideos(boolean isAutoClear)

      Added in v3.23.0, set whether to clear the clip video files, default is false Note: if you set true, you should not use `finishRecordingForEdit()`
      Parameters:
        `isAutoClear` -