视频美颜(火山)

更新时间: 2025/06/30 13:43:23

网易云信 NERTC SDK 支持接入火山引擎智能美化特效 SDK(下文简称火山美颜 SDK),实现美颜、美妆、滤镜、贴纸等丰富美颜特效。在视频社交、在线教育、直播互动等场景中,您可以快速构建具备专业美颜能力的应用,提升用户在视频通话或直播过程中的形象表现力。

功能概述

通过集成火山美颜 SDK,您可以在 NERTC 音视频通话中实现以下功能:

  • 美化滤镜:支持美颜、滤镜、美妆、微整形、美体特效等多种技术。
  • 贴纸道具:抖音同款上万款爆款特效贴纸,效果逼真、创新有趣。
  • 特效创作工具:简单易操作,支持 2D、3D 多种特效能力,为企业设计师提供可视化特效制作工具。
  • 端上智能算法:200+ 自研视觉算法,低能耗、高精度、高召回。

工作原理

火山美颜原理
  1. NERTC SDK 通过外部视频处理接口将采集到的视频帧数据传递给火山美颜 SDK 进行美颜处理。
  2. 火山美颜 SDK 处理完成后,将美颜后的视频帧返回给 NERTC SDK。
  3. NERTC SDK 将美颜后的视频帧进行编码和传输。

注意事项

  • 资源管理:火山美颜资源文件较大,请确保正确配置资源文件路径并管理好资源的加载和释放时机。
  • 性能优化:美颜处理会消耗一定的系统资源,建议根据设备性能适当调整视频分辨率和美颜参数。
  • 线程安全:确保在正确的线程上进行 SDK 初始化、视频处理和资源释放等操作。
  • 资源释放:请确保在退出应用或功能模块时,正确释放火山美颜相关资源,否则可能导致内存泄漏或应用崩溃。

前提条件

在集成火山美颜 SDK 前,请确保您已完成以下准备工作:

第一步:环境集成

  1. 如需创建新项目,在 DevEco Studio 里,依次选择 File > New > Create Project。详情请参考《鸿蒙开发者中心》创建 Harmony 项目

  2. 集成 NERTC SDK。如果您已完成本步骤,请跳过此步。

    根据 更新日志 选择 NERTC SDK 版本号,然后在项目的 oh-package.json5 文件中添加依赖:

    JSON{
      "dependencies": {
        // x.y.z 表示网易云信 NERTC SDK 的版本号,如 5.8.20
        "@nertc/nertc_sdk": "x.y.z",
        // 集成火山相关的资源模块
        "byteeffect": "file:../ByteEffect"
      }
    }
    
  3. 集成火山美颜 SDK。详细步骤请参考《火山美颜官网》SDK 快速接入指南/CV-鸿蒙接入文档

    1. 将火山美颜场景化 OHOS Demo 下的 ByteEffect 模块集成到您的项目中。
    2. 确保将修改后的 ByteEffect 模块正确添加到项目依赖中。

第二步:准备资源

  1. 将火山美颜 SDK 提供的资源文件复制到项目对应路径。

    美颜资源 项目路径
    resource/LicenseBag.bundle ByteEffect/src/main/resources/rawfile
    resource/ModelResource.bundle ByteEffect/src/main/resources/rawfile
    resource/ComposeMakeup.bundle ByteEffect/src/main/resources/rawfile
    resource/StickerResource.bundle ByteEffect/src/main/resources/rawfile
    resource/FilterResource.bundle ByteEffect/src/main/resources/rawfile
  2. 添加必要的应用权限。

    在项目的 module.json5 文件中添加以下权限:

    JSON"requestPermissions": [
      {
        "name": "ohos.permission.CAMERA",
        "reason": "$string:camera_auth_reason",
        "usedScene": {
          "abilities": [
            "FormAbility"
          ],
          "when": "always"
        }
      },
      {
        "name": "ohos.permission.MICROPHONE",
        "reason": "$string:microphone_auth_reason",
        "usedScene": {
          "abilities": [
            "FormAbility"
          ],
          "when": "always"
        }
      },
      {
        "name": "ohos.permission.KEEP_BACKGROUND_RUNNING",
        "usedScene": {
          "abilities": [
            "FormAbility"
          ],
          "when": "always"
        }
      },
      {
        "name": "ohos.permission.GET_NETWORK_INFO",
        "usedScene": {
          "abilities": [
            "FormAbility"
          ],
          "when": "always"
        }
      }
    ]
    

第三步:初始化 SDK

  1. 初始化 NERTC SDK。

    TypeScript// 创建 NERTC 引擎配置
    let option: NERtcConstants.NERtcOption = { logLevel: NERtcConstants.LogLevel.INFO }
    // 初始化 NERTC SDK
    NERtcSDK.getInstance().init(getContext(), config.your_netease_rtc_appKey, this.rtcDefaultDelegate, option)
    
    // 配置视频编码参数,设置为纹理处理模式
    let configMain: NERtcConstants.NERtcVideoEncodeConfiguration = new NERtcConstants.NERtcVideoEncodeConfiguration()
    configMain.colorFormat = NERtcConstants.NERtcVideoColorFormat.kNERtcVideoColorFormatTexture
    // 设置本地视频配置
    let ret = NERtcSDK.getInstance().setLocalVideoConfig(configMain, NERtcConstants.NERtcVideoStreamType.kNERtcVideoStreamTypeMain)
    if (ret != NERtcConstants.ErrorCode.NO_ERROR) {
      console.error(this.TAG, `setLocalVideoConfig failed, ret: ${ret}`)
    }
    
  2. 初始化火山美颜 SDK。

    TypeScript// 创建火山美颜渲染器
    this.bytedRender = new BytedRender()
    
    // 设置证书文件路径
    const licensePath = "/LicenseBag.bundle/your_license_file.licbag"
    this.bytedRender.setBundlePath(getContext().filesDir, licensePath)
    
    // 获取火山美颜原生句柄并设置为 NERTC 外部视频处理插件
    let handle = this.bytedRender.getNativeHandle()
    let result = NERtcSDK.getInstance().setExternalVideoProcessPlugin(handle)
    console.info(this.TAG, `SetExternalProcessPlugin result: ${result}`)
    

第四步:启用视频处理

  1. 启动视频采集。

    TypeScript// 开启视频
    ret = NERtcSDK.getInstance().enableLocalVideo(true, NERtcConstants.NERtcVideoStreamType.kNERtcVideoStreamTypeMain)
    if (ret != NERtcConstants.ErrorCode.NO_ERROR) {
      Prompt.showToast({ message: '打开视频失败' })
    }
    
  2. 设置本地视频画布。

    TypeScript// 创建视频视图组件
    NERtcVideoView({
      canvasId: String(this.randomUID),
      onLoad: (() => {
        // 在视图加载完成后设置本地视频画布
        let canvas: NERtcConstants.NERtcVideoCanvas = { canvasId: String(this.randomUID) }
        let ret = NERtcSDK.getInstance().setupLocalVideoCanvas(
          canvas,
          NERtcConstants.NERtcVideoStreamType.kNERtcVideoStreamTypeMain
        )
        console.info(this.TAG, `setupLocalVideoCanvas ret: ${ret}`)
      }),
      onDestroy: (() => {
        console.info(this.TAG, 'NERtcVideoView destroyed')
      })
    })
    
  3. 启用美颜效果。

    TypeScript// 启用美颜
    this.bytedRender.enableBeauty(true)
    
  4. 加入音视频房间。

    TypeScript// 如果开启了鉴权,此处填写从网易云信服务端获取的 token
    const token = ""
    ret = NERtcSDK.getInstance().joinChannel(token, loginInfo.channelName, BigInt(this.randomUID))
    if (ret != NERtcConstants.ErrorCode.NO_ERROR) {
      Prompt.showToast({ message: '加入音视频房间失败' })
    }
    

第五步:设置美颜特效

火山美颜 SDK 提供丰富的美颜特效功能,您可以根据需求设置不同的美颜效果。详情请参考 SDK 快速接入指南/CV-鸿蒙接入文档SDK 参数设置,如设置美颜、贴纸、滤镜章节。

第六步:资源释放

在退出通话或应用退出时,需要按照正确的顺序释放资源:

TypeScript// 离开音视频房间
NERtcSDK.getInstance().leaveChannel()

// 移除外部视频处理插件
NERtcSDK.getInstance().setExternalVideoProcessPlugin(0n)

// 关闭美颜
this.bytedRender.enableBeauty(false)

// 释放火山美颜资源
this.bytedRender.release()

// 释放 NERTC SDK 资源
NERtcSDK.getInstance().release()
此文档是否对你有帮助?
有帮助
去反馈
  • 功能概述
  • 工作原理
  • 注意事项
  • 前提条件
  • 第一步:环境集成
  • 第二步:准备资源
  • 第三步:初始化 SDK
  • 第四步:启用视频处理
  • 第五步:设置美颜特效
  • 第六步:资源释放