腾讯美颜
更新时间: 2025/06/19 15:50:31
NERTC SDK 支持接入腾讯美颜(TEBeautyKit)SDK,实现美颜、美妆、滤镜、贴纸等丰富美颜特效。在视频社交、在线教育、直播互动等场景中,您可以快速构建具备专业美颜能力的应用,提升用户在视频通话或直播过程中的形象表现力。
功能概述
通过集成腾讯美颜 SDK,您可以在 NERTC 音视频通话中实现以下功能:
- 智能美颜:磨皮、美白等基础美颜,以及大眼、瘦脸、V 脸、下巴调整等面部微调
- 美妆特效:口红、眼影、腮红等美妆效果
- 特效滤镜:多种风格滤镜,满足不同场景需求
- 贴纸道具:丰富的 2D、3D 贴纸,增强互动趣味性
工作原理

- NERTC SDK 通过
setVideoCallback
接口将采集到的视频帧数据回调给应用层,应用层将视频帧传递给腾讯美颜 SDK 进行美颜处理。 - 腾讯美颜 SDK 处理完成后,将美颜后的视频帧返回给应用层。
- 应用层将美颜后的视频帧通过回调参数返回给 NERTC SDK。
- NERTC SDK 将美颜后的视频帧进行编码和传输。
注意事项
- 纹理转换:由于 NERTC SDK 提供的是 OES 纹理,而腾讯美颜 SDK 需要 2D 纹理,因此需要进行纹理格式转换。
- 图像方向:由于移动设备摄像头采集的图像方向与显示方向可能不一致,需要设置正确的图像旋转方向。
- 线程安全:美颜处理应在 OpenGL 线程中进行,避免多线程操作导致的异常。
- 资源释放:请务必确保在 OpenGL 线程中释放美颜资源的操作(
postOnGLThread
)在释放 NERTC SDK 资源(release()
)之前完成,否则将导致腾讯美颜资源无法正确释放,从而导致显示黑屏。详情请参考下文 第四步:资源释放。
前提条件
在集成腾讯美颜 SDK 前,请确保您已完成以下准备工作:
- 已获取网易云信 AppKey
- 已集成 NERTC SDK 到您的项目中
- 已实现基础音视频通话功能
- 已从腾讯云获取以下资源:
第一步:环境集成
-
集成 NERTC SDK。如果您已完成本步骤,请跳过此步。
根据 更新日志 选择 NERTC SDK 版本号,然后在项目级
build.gradle
文件中添加 NERTC SDK 依赖:Groovy
dependencies { implementation "com.netease.yunxin:nertc-base:5.8.20" // 请使用您项目中的实际版本 }
-
集成腾讯美颜 SDK。
腾讯美颜 SDK 提供了
TEBeautyKit
封装库,便于快速集成,本文后续步骤也将基于这个库进行集成:- 将
TEBeautyKit
模块拷贝到您的工程目录中。 - 在
settings.gradle
文件中引入模块:Groovy
include ':app' include ':tebeautykit'
- 在应用模块的
build.gradle
文件中添加依赖:Groovy
dependencies { implementation project(':tebeautykit') }
- 将
第二步:资源准备
-
资源文件配置。
-
将腾讯美颜 SDK 产物
aar
内的资源文件夹(assets
)复制到应用的沙盒目录中。 -
AppConfig
相关代码从腾讯美颜 SDK Demo 中拷贝即可。Kotlin
val resPath = File(filesDir, AppConfig.getInstance().beautyFileDirName).absolutePath Log.i("test", "resPath = $resPath") TEBeautyKit.setResPath(resPath) // 在子线程中复制资源文件,避免阻塞主线程 Thread { val result = TEBeautyKit.copyRes(applicationContext) Log.i("TEBeauty", "资源文件复制结果: $result") }.start()
-
-
License 配置及初始化腾讯美颜 SDK。
腾讯美颜 SDK 需要先验证 License 合法性,然后在验证成功的回调中创建和初始化美颜 SDK。
Kotlin
// 设置 License 并验证 TEBeautyKit.setTELicense(applicationContext, licenseUrl, licenseKey) { errorCode, msg -> if (errorCode == TELicenseCheck.ERROR_OK) { Log.i("test", "check license ok.") // 创建并初始化腾讯美颜 SDK TEBeautyKit.create(applicationContext, XmagicConstant.EffectMode.PRO ) { beautyKit -> this@MainActivity.mBeautyKit = beautyKit //由于安卓原始预览帧的角度不是 0 度,需要给腾讯设置图像角度 this@MainActivity.mBeautyKit?.setImageOrientation(TEImageOrientation.ROTATION_90) } } else { Log.i("test", "check license failed: $msg") } }
第三步:视频处理流程
-
启动视频采集。
在加入房间前,初始化 NERTC SDK 并启动视频采集:
Kotlin
// 初始化 NERTC SDK val option = NERtcOption() option.logLevel = NERtcConstants.LogLevel.INFO //建议生产填 INFO,上线后改为 WARN NERtcEx.getInstance().init(applicationContext, "your_netease_rtc_appkey", this.callback, option)
-
加入 RTC 房间,并调用
setupLocalVideoCanvas
接口设置本地视频画布:Kotlin
//加入房间 var ret = NERtcEx.getInstance().joinChannel("", "12345", 54321L) if (ret != NERtcConstants.ErrorCode.OK) { Log.i("test", "joinChannel result: $ret") } //开启摄像头,进行视频采集 var ret = NERtcEx.getInstance().enableLocalVideo(true) //设置本地视频画布 ret = NERtcEx.getInstance().setupLocalVideoCanvas(NERtcVideoStreamType.kNERtcVideoStreamTypeMain, renderView)
-
设置视频帧回调,对视频帧应用美颜效果。
Kotlin
NERtcEx.getInstance().setVideoCallback({ videoFrame: NERtcVideoFrame -> if (this@MainActivity.mBeautyKit == null) { return@setVideoCallback false } if (this@MainActivity.mTransform == null) { this@MainActivity.mTransform = TextureTransform() } // 由于 NERTC SDK 提供的是 OES 纹理,而腾讯美颜 SDK 需要 2D 纹理,因此需要进行纹理格式转换 val outputTxt = this@MainActivity.mTransform?.transferTextureToTexture( videoFrame.textureId, TextureFormat.Texture_OES, TextureFormat.Texture_2D, videoFrame.width, videoFrame.height, defaultTransition ) //处理完转交给 NERtcSDK 处理。 if (outputTxt != null) { videoFrame.textureId = this@MainActivity.mBeautyKit!!.process(outputTxt, videoFrame.width, videoFrame.height) videoFrame.format = NERtcVideoFrame.Format.TEXTURE_RGB } true }, false)
第四步:资源释放
在退出通话或应用退出时,需要按照正确的顺序释放资源:
Kotlin// 离开房间
NERtcEx.getInstance().leaveChannel()
// ⚠️ 重要:必须在调用 release() 之前,在 OpenGL 线程中释放美颜资源
// 否则将导致腾讯美颜资源释放失败
NERtcEx.getInstance().postOnGLThread {
this.mTransform?.release()
this.mBeautyKit?.onDestroy()
}
// 释放 NERTC SDK 资源,必须在美颜资源释放之后执行
NERtcEx.getInstance().release()
此文档是否对你有帮助?