文档反馈
文档反馈

美颜

重要通知

网易云信新版文档中心现已正式上线!

音视频通话2.0互动直播2.0多人语音聊天室PK 直播等产品和场景方案已迁移至新版文档中心维护,欢迎体验!

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

Android

注意事项

美颜相关方法返回值为 false 时,表示方法调用失败。

实现方法

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

该方法依赖于相机采集的 OES 纹理和 YUV I420 数据。默认情况下 SDK 仅返回 Texture 数据,如果第三方滤镜率需要 YUV 数据,可以通过参数 textureWithI420 设置同时返回 YUV I420 和 Texture 的数据。

示例代码

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);
}

iOS

注意事项

实现方法

  1. 通过 setParameters 接口,将 kNERtcKeyVideoCaptureObserverEnabled 的值设置为 @(1),将摄像头采集的数据回调给用户。
  2. 在代理方法 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 的地址值不变,分辨率不变
    }

Windows/macOS

注意事项

相关回调必须同步返回,且保证 data的地址值不被改变,分辨率不改变。

实现方法

  1. 在本地项目中实现音视频通话或互动直播。
  2. 在代理方法 onCaptureVideoFrame 中,根据需求对回调中的视频数据做相应的美颜处理。

示例代码

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

 @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();
    }
}
×

反馈成功

非常感谢您的反馈,我们会继续努力做得更好。