RTC SDK 为您提供基础美颜功能和第三方美颜接入功能的接口和回调。通过阅读本文,您可以了解使用基础美颜及第三方美颜的相关流程。

基础美颜

  • 功能简介

    阿里云 RTC SDK 在 1.17.9 及以上版本中提供了基础美颜功能,包含了美白和磨皮两种功能。您可以在直播、视频通话、视频会议等场景中,通过美颜功能提高使用体验。

  • 实现方法阿里云 RTC SDK 通过 setBeautyEffect 方法设置是否启用基础美颜。
    /**
    * 设置美颜
    * @param enable 美颜开关
    * @param config 美颜参数控制
    */
    - (int)setBeautyEffect:(BOOL)enable config:(AliRtcBeautyConfig *_Nullable)config;
    名称类型描述
    enableBOOLYES表示启用,NO表示关闭,默认为NO。
    configAliRtcBeautyConfig *_Nullable基础美颜参数。

第三方美颜

  • 功能简介

    功能简介阿里云 RTC SDK 在 1.14.0 及以上版本中提供了支持第三方美颜功能,通常第三方美颜 SDK 接受以下两种类型的数据回调处理:

    • YUV 裸数据用于做人脸识别。
    • openGL 纹理数据用于最终做美颜效果的处理。
  • 接入流程为了避免完成集成 SDK 后,自己能看到美颜效果,对方却看不到美颜效果。在接入前,我们需要在 SDK 的实例 extra 字段中添加开关,设置 user_specified_video_preprocess 为 TRUE。
    1. SDK的instanceSDK 的 instance 构造函数里面,扩展字段添加 [extrasDic setValue:@"TRUE" forKey:@"user_specified_video_preprocess"],并且将 extraDic 经过序列化之后传入到 AliRtcEngine sharedInstance 的第二个字段 extra 中。
    2. 在调用本地预览开启接口 startPreview 之后,调用 registerLocalVideoTexture 订阅 openGL 纹理数据。
    3. 如果需要对接 YUV 数据人脸识别功能,在调用本地预览开启接口 startPreview 之后,再调用 registerVideoSampleObserver 订阅采集前处理 YUV 数据(通常是对采集图像做人脸识别)。
    4. 如果需要对接 YUV 数据人脸识别功能,在 onCaptureVideoSample 回调中做第三方算法的人脸识别操作。
    5. 在 onTextureCreate 中做第三方算法的初始化工作,其中 context 为 openGL 的上下文。
    6. 在 onTextureUpdate 做第三方算法的每一帧美颜处理工作,如果不需要美颜或者第三方算法处理不成功,请将输入的 textureId 返回给该函数。如果美颜处理成功,则返回第三方算法处理过的 textureId。
    7. 在 onTextureDestory 做第三方算法的销毁工作。

第三方美颜接口调用

  • RTC SDK YUV 裸数据人脸识别接入接口,人脸识别接入时,需要订阅采集之后的前处理 buffer 数据,所以在 startPreview 之后需要调用 registerVideoSampleObserver 接口获取采集前处理数据并处理。

    ///@brief 订阅采集视频前处理裸数据
    - (void)registerVideoSampleObserver;
    说明 订阅成功后,通过 onCaptureVideoSample 回调本地采集数据。
    ///@brief RTC采集视频数据前处理回调
    - (BOOL)onCaptureVideoSample:(AliRtcVideoSource)videoSource videoSample:(AliRtcVideoDataSample *_Nonnull)videoSample;
    参数类型描述
    videoSourceAliRtcVideoSource视频裸数据源类型。
    videoSampleAliRtcVideoDataSample *_Nonnull视频裸数据。
  • RTC SDK openGL 纹理接口美颜接入时,需要订阅视频的纹理数据,所以在 startPreview 之后需要调用接口获取 openGL 的纹理数据和 openGL 的线程环境。需要调用的接口如下所示:

    • registerLocalVideoTexture 接口
      ///@brief 订阅openGL的纹理数据
      - (void)registerLocalVideoTexture;
    • onTextureCreate 回调(相芯SDK不处理此回调)
      ///@brief 表示本地视频流纹理创建
      ///@param[in] context openGL的上下文EGLContext指针
      - (void)onTextureCreate:(void *_Nullable)context;
    • onTextureUpdate 回调
      ///@brief 表示每一帧视频流处理
      ///@param[in] width 视频流纹理的宽度
      ///@param[in] height 视频流纹理的高度
      ///@param[in] videoSample 视频数据
      - (int)onTextureUpdate:(int)textureId width:(int)width height:(int)height videoSample:(AliRtcVideoDataSample *_Nonnull)videoSample;
    • onTextureDestory 回调(相芯 SDK 不处理此回调)
      ///@brief 表示本地视频流纹理销毁
      - (void)onTextureDestory;
  • 外置美颜SDK相关接口调用。

    外置美颜 SDK 根据各自的设计,有对应的 SDK 自己的提供的接口,需要App对接时候正确使用,主要有如下:
    • 初始化、销毁。
    • 资源加载和释放(通常是人脸识别使用的资源文件)。
    • 美颜控制接口(美颜等级、强度的调节接口,美颜开关接口)。
    • 对接 RTC SDK回调的接口。