视频美颜(火山)
更新时间: 2025/06/30 13:43:23
网易云信 NERTC SDK 支持接入火山引擎智能美化特效 SDK(下文简称火山美颜 SDK),实现美颜、美妆、滤镜、贴纸等丰富美颜特效。在视频社交、在线教育、直播互动等场景中,您可以快速构建具备专业美颜能力的应用,提升用户在视频通话或直播过程中的形象表现力。
功能概述
通过集成火山美颜 SDK,您可以在 NERTC 音视频通话中实现以下功能:
- 美化滤镜:支持美颜、滤镜、美妆、微整形、美体特效等多种技术。
- 贴纸道具:抖音同款上万款爆款特效贴纸,效果逼真、创新有趣。
- 特效创作工具:简单易操作,支持 2D、3D 多种特效能力,为企业设计师提供可视化特效制作工具。
- 端上智能算法:200+ 自研视觉算法,低能耗、高精度、高召回。
工作原理
- NERTC SDK 通过外部视频处理接口将采集到的视频帧数据传递给火山美颜 SDK 进行美颜处理。
- 火山美颜 SDK 处理完成后,将美颜后的视频帧返回给 NERTC SDK。
- NERTC SDK 将美颜后的视频帧进行编码和传输。
注意事项
- 资源管理:火山美颜资源文件较大,请确保正确配置资源文件路径并管理好资源的加载和释放时机。
- 性能优化:美颜处理会消耗一定的系统资源,建议根据设备性能适当调整视频分辨率和美颜参数。
- 线程安全:确保在正确的线程上进行 SDK 初始化、视频处理和资源释放等操作。
- 资源释放:请确保在退出应用或功能模块时,正确释放火山美颜相关资源,否则可能导致内存泄漏或应用崩溃。
前提条件
在集成火山美颜 SDK 前,请确保您已完成以下准备工作:
- DevEco Studio 5.0.3 Release 及以上版本。
- Harmony SDK API 版本 15 及以上。
- 手机系统运行 Harmony Next 5.0.0.135 及以上版本。
- 已获取网易云信 AppKey。
- 已集成 NERTC SDK 到您的项目中。
- 已实现基础音视频通话功能。
- 如果您需要开启安全鉴权,可以从 网易云信服务端获取 Token。
- 已从火山引擎获取以下资源:
- 火山美颜 SDK 及相关资源文件
- 火山美颜 SDK 的证书文件
第一步:环境集成
-
如需创建新项目,在 DevEco Studio 里,依次选择 File > New > Create Project。详情请参考《鸿蒙开发者中心》创建 Harmony 项目。
-
集成 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" } } -
集成火山美颜 SDK。详细步骤请参考《火山美颜官网》SDK 快速接入指南/CV-鸿蒙接入文档。
- 将火山美颜场景化 OHOS Demo 下的 ByteEffect 模块集成到您的项目中。
- 确保将修改后的 ByteEffect 模块正确添加到项目依赖中。
第二步:准备资源
-
将火山美颜 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 -
添加必要的应用权限。
在项目的
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
-
初始化 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}`) } -
初始化火山美颜 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}`)
第四步:启用视频处理
-
启动视频采集。
TypeScript// 开启视频 ret = NERtcSDK.getInstance().enableLocalVideo(true, NERtcConstants.NERtcVideoStreamType.kNERtcVideoStreamTypeMain) if (ret != NERtcConstants.ErrorCode.NO_ERROR) { Prompt.showToast({ message: '打开视频失败' }) } -
设置本地视频画布。
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') }) }) -
启用美颜效果。
TypeScript// 启用美颜 this.bytedRender.enableBeauty(true) -
加入音视频房间。
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()
此文档是否对你有帮助?




