互动表情
更新时间: 2026/07/31 17:54:34
NERTC SDK 支持互动表情(贴纸)功能。
功能介绍
互动表情(贴纸)功能可在本地视频流的人脸上叠加内置的动态贴纸效果,通常与美颜、滤镜等功能配合使用,适用于人脸贴纸等趣味场景。
NERTC SDK 通过美颜模块统一管理贴纸的添加与移除,开发者无需单独集成贴纸模块。
典型应用场景:
- 在线直播: 主播通过趣味贴纸增强互动效果,提升观众参与感。
- 视频通话: 用户为自身添加个性化贴纸,增加通话趣味性。
- 短视频拍摄: 拍摄者实时预览贴纸效果,丰富视频内容表现力。
注意事项
- 调用互动表情接口前,必须先开启美颜功能。请通过
startBeauty与isOpenBeauty = YES开启美颜后再操作贴纸接口。 - 互动表情功能需在引擎初始化之后调用,加入房间前后均可调用。
- 贴纸资源通常包含
template.json、001.json、sticker/sticker.json及图片序列等文件,调用addBeautyStickerWithPath:andName:时需传入贴纸目录路径和模板文件名。 - 若贴纸资源随 App Bundle 打包,建议在应用启动时将其复制到 App 可访问的沙盒目录(如 Documents 或 Caches)后再传给 SDK。
- 若贴纸资源从服务器下载,需先下载到 App 沙盒目录;若为 zip 包,还需解压后再传入贴纸目录路径。
- 同一时间仅支持展示一个贴纸。切换贴纸时建议先移除旧贴纸,再添加新贴纸;取消贴纸时调用
removeBeautySticker。
实现方法
准备贴纸资源
贴纸资源为一个目录,内含 template.json、001.json、sticker/sticker.json 以及图片序列等文件。调用 addBeautyStickerWithPath:andName: 时需传入贴纸目录路径和模板文件名。
若贴纸资源以 zip 形式随包下发,需要先解压到 App 可访问目录(如 Documents):
objcNSString *documentPath = NSSearchPathForDirectoriesInDomains(
NSDocumentDirectory,
NSUserDomainMask,
YES
).firstObject;
NSString *localStickerPath = [documentPath stringByAppendingPathComponent:@"Sticker/2d_sticker"];
[SSZipArchive unzipFileAtPath:stickerPath toDestination:localStickerPath];
NSString *resourcePath =
[[localStickerPath stringByAppendingPathComponent:stickerName]
stringByAppendingString:@"/"];
最终贴纸路径示例:
textDocuments/NEBeauty/Sticker/2d_sticker/glass/
传给 SDK 的是解压后的贴纸目录路径,而非 zip 路径或图标文件路径。
启动美颜模块
在 SDK 初始化完成、本地视频开启后启动美颜模块:
objc// 启动美颜模块
[[NERtcBeauty shareInstance] startBeauty];
// 开启美颜效果
[NERtcBeauty shareInstance].isOpenBeauty = YES;
startBeauty 用于初始化美颜模块,isOpenBeauty 控制美颜效果是否开启。临时关闭效果时只需要设置:
objc[NERtcBeauty shareInstance].isOpenBeauty = NO;
添加或移除贴纸
加载贴纸时传入贴纸资源目录和模板文件名:
objc[[NERtcBeauty shareInstance] addBeautyStickerWithPath:stickerResourcePath
andName:@"template.json"];
切换贴纸时建议先移除旧贴纸,再添加新贴纸:
objc[[NERtcBeauty shareInstance] removeBeautySticker];
[[NERtcBeauty shareInstance] addBeautyStickerWithPath:newStickerResourcePath
andName:@"template.json"];
取消贴纸:
objc[[NERtcBeauty shareInstance] removeBeautySticker];
关闭和释放资源
退出房间或关闭页面时,按以下顺序关闭相关功能:
objc// 关闭美颜效果
[NERtcBeauty shareInstance].isOpenBeauty = NO;
// 移除贴纸
[[NERtcBeauty shareInstance] removeBeautySticker];
// 停止美颜模块
[[NERtcBeauty shareInstance] stopBeauty];
服务器动态拉取贴纸
贴纸资源可存放在业务服务器或 CDN 上,按需下载。推荐服务器下发贴纸配置,客户端根据配置下载并缓存:
json{
"id": "glass",
"version": "1.0.0",
"url": "https://example.com/stickers/glass.zip",
"md5": "optional-md5",
"template": "template.json"
}
资源包推荐使用 zip 格式。解压后应得到完整的贴纸目录,内含 template.json、001.json、sticker/sticker.json 以及图片序列等文件。客户端可按 id/version 建立缓存目录,避免版本冲突:
textcontext.getExternalFilesDir("stickers")/glass/1.0.0/
通用流程:
- 请求服务器贴纸配置列表。
- 检查本地是否已有相同
id + version的缓存资源。 - 无缓存时下载 zip 到临时文件。
- 校验文件大小、MD5 或业务签名。
- 解压到临时目录,确认
template.json存在。 - 原子替换到正式缓存目录。
- 用户选择贴纸时,将正式缓存目录路径传入 SDK。
调用示例:
objcNSString *documentPath = NSSearchPathForDirectoriesInDomains(
NSDocumentDirectory,
NSUserDomainMask,
YES
).firstObject;
NSString *stickerPath = [documentPath stringByAppendingPathComponent:@"NEBeauty/Sticker/glass/1.0.0/"];
// 下载并解压完成后,stickerPath 应直接包含 template.json。
[[NERtcBeauty shareInstance] addBeautyStickerWithPath:stickerPath
andName:@"template.json"];
- SDK 接口仅接收本地贴纸目录路径,不直接接收 HTTP URL。
- 解压后的目录层级需保持稳定,传入路径应能直接找到
template.json。 - 下载和解压请在后台线程执行,完成后切回主线程更新贴纸列表。
- 建议保留版本号和校验字段,资源更新时通过版本变化触发重新下载。
资源添加规则
-
内置资源或动态资源都需要先准备本地贴纸目录,例如
Documents/NEBeauty/Sticker/newSticker/1.0.0/。 -
目录内应包含 SDK 可识别的贴纸模板文件,通常包含
template.json和对应素材文件。 -
如果贴纸资源随包或服务器以 zip 形式存放,使用前先解压到 App 可访问目录。
-
调用底层接口时传入解压后的目录路径,并指定
template.json:objc[[NERtcBeauty shareInstance] addBeautyStickerWithPath:stickerResourcePath andName:@"template.json"];
调用顺序建议
- 初始化 NERtc SDK。
- 准备美颜、贴纸资源(动态贴纸需提前下载、校验并解压至本地)。
- 设置本地视频渲染视图,开启本地视频。
- 调用
startBeauty。 - 加入频道后调用
isOpenBeauty = YES。 - 用户选择贴纸时调用
addBeautyStickerWithPath:andNa。 - 退出频道或销毁页面时,依次执行:
isOpenBeauty = NO→removeBeautySticker→stopBeauty。
常见问题
Q1:贴纸不生效?
- 确认已调用
startBeauty并开启美颜(isOpenBeauty = YES)。 - 确认传入的是贴纸资源目录路径,而非图标文件路径。
- 确认 zip 已解压,路径以
/结尾,且模板文件名传的是template.json。 - 确认当前贴纸资源与平台 SDK 版本匹配。
Q2:退出房间后再次进入美颜异常?
退出时确保关闭顺序完整:isOpenBeauty = NO -> removeBeautySticker -> stopBeauty。




