美颜

功能描述

在社交娱乐或教育场景中,用户在进行视频通话或直播的过程中,常常希望向对方呈现良好的肌肤状态和精神面貌。NERTC SDK 提供了采集数据回调的 API 方法,帮助 开发者 App 轻松接入第三方专业美颜滤镜厂商,以完善业务场景。

Android

实现方法

NERTC SDK 提供 setVideoCallback 接口用于相机采集数据的回调,APP在美颜后将数据返回给SDK,SDK对美颜后的数据进行预览以及编码发送

该方法根据相机采集的OES纹理以及YUVI420数据(设置了needI420)

示例代码

protected void openFilter(boolean open) {

    NERtcEx.getInstance().setVideoCallback(new NERtcVideoCallback() {
        @Override
        public boolean onVideoCallback(NERtcVideoFrame videoFrame) {
            if(open) {
                createEffect();
                videoFrame.textureId = mEffect.filterTexture(videoFrame.textureId,videoFrame.width,videoFrame.height);
            }
            return open;
        }
    },false);
}

API参考

方法 功能描述
setVideoCallback 设置视频采集数据回调,用于美颜等操作
事件 事件描述
NERtcVideoCallback 本地视频数据采集回调

开发注意事项

以上方法有返回值,返回值为false 表示方法调用失败。

iOS

实现方法

  1. 开始前请确保你已完成环境准备、安装包获取等步骤;
  2. 通过 setParameters 接口,将 kNERtcKeyVideoCaptureObserverEnabled 的值设置成 @(1),将摄像头采集的数据回调给用户;
  3. 在代理方法 onNERtcEngineVideoFrameCaptured: rotation: 中,根据需要对回调回来的视频数据做相应的美颜处理;

示例代码

    // 配置音视频引擎,将摄像头采集的数据回调给用户
    NERtcEngine *coreEngine = [NERtcEngine sharedEngine];
    NSDictionary *params = @{
        kNERtcKeyPublishSelfStreamEnabled: @YES,    // 打开推流
        kNERtcKeyVideoCaptureObserverEnabled: @YES  // 将摄像头采集的数据回调给用户
    };
    [coreEngine setParameters:params];

    NERtcEngineContext *context = [[NERtcEngineContext alloc] init];
    context.engineDelegate = self;
    context.appKey = @"<#请输入您的AppKey#>";
    [coreEngine setupEngineWithContext:context];

    [coreEngine enableLocalAudio:YES];
    [coreEngine enableLocalVideo:YES];

    // 在代理方法中对视频数据进行处理
    - (void)onNERtcEngineVideoFrameCaptured:(CVPixelBufferRef)bufferRef rotation:(NERtcVideoRotationType)rotation
    {
        // 对视频数据 bufferRef 进行处理, 务必保证 CVPixelBufferRef 的地址值不变,分辨率不变
    }

API参考

方法 功能描述
setParameters 复杂参数设置接口
事件 事件描述
onNERtcEngineVideoFrameCaptured: rotation: 本地视频数据采集回调

开发注意事项

  1. 该设置仅在加入频道之前设置才有效;
  2. 若NERtcSDK版本号低于3.7.0, 设置 kNERtcKeyVideoCaptureObserverEnabled 需要在初始化NERtcSDK之前调用。
  3. 该回调必须同步返回,且保证 CVPixelBufferRef 的地址值不被改变,分辨率不改变;

Windows/macOS

实现方法

  1. 开始前请确保你已完成环境准备、安装包获取等步骤;
  2. 在代理方法 onCapturedFrame 中,根据需要对回调回来的视频数据做相应的美颜处理;

示例代码

/** 采集视频数据回调。

 @param data 采集视频数据。
 @param type 视频类型。
 @param width 视频宽度。
 @param height 视频高度。
 @param count 视频Plane Count。
 @param offset 视频offset。
 @param stride 视频stride。
 @param rotation 视频旋转角度。
 */

void onCaptureVideoFrame(void *data,
    NERtcVideoType type,
    uint32_t width,
    uint32_t height,
    uint32_t count,
    uint32_t offset[kNERtcMaxPlaneCount],
    uint32_t stride[kNERtcMaxPlaneCount],
    NERtcVideoRotation rotation)
{
    if (true == rtc_parameter_.video_smooth_enabled)
    {
        //tools::colorbalance_yuv(data, width, height);
        tools::image_smooth_process((uint8_t*)data, width, height, 8, 0, 200);
    }

    if (true == rtc_parameter_.video_watermark_enabled)
    {
        tools::image_watermark_process((uint8_t*)data, width, height);
    }

    if (true == rtc_parameter_.video_filter_enabled)
    {
        tools::image_filter_process((uint8_t*)data, width, height);
    }
    else
    {
        tools::image_filter_uninit();
    }
}

API参考

事件 事件描述
onCaptureVideoFrame 本地视频数据采集回调

开发注意事项