iOS

互动表情

更新时间: 2026/07/31 17:54:34

NERTC SDK 支持互动表情(贴纸)功能。

功能介绍

互动表情(贴纸)功能可在本地视频流的人脸上叠加内置的动态贴纸效果,通常与美颜、滤镜等功能配合使用,适用于人脸贴纸等趣味场景。

NERTC SDK 通过美颜模块统一管理贴纸的添加与移除,开发者无需单独集成贴纸模块。

典型应用场景:

  • 在线直播: 主播通过趣味贴纸增强互动效果,提升观众参与感。
  • 视频通话: 用户为自身添加个性化贴纸,增加通话趣味性。
  • 短视频拍摄: 拍摄者实时预览贴纸效果,丰富视频内容表现力。

注意事项

  • 调用互动表情接口前,必须先开启美颜功能。请通过 startBeautyisOpenBeauty = YES 开启美颜后再操作贴纸接口。
  • 互动表情功能需在引擎初始化之后调用,加入房间前后均可调用。
  • 贴纸资源通常包含 template.json001.jsonsticker/sticker.json 及图片序列等文件,调用 addBeautyStickerWithPath:andName: 时需传入贴纸目录路径和模板文件名。
  • 若贴纸资源随 App Bundle 打包,建议在应用启动时将其复制到 App 可访问的沙盒目录(如 Documents 或 Caches)后再传给 SDK。
  • 若贴纸资源从服务器下载,需先下载到 App 沙盒目录;若为 zip 包,还需解压后再传入贴纸目录路径。
  • 同一时间仅支持展示一个贴纸。切换贴纸时建议先移除旧贴纸,再添加新贴纸;取消贴纸时调用 removeBeautySticker

实现方法

准备贴纸资源

贴纸资源为一个目录,内含 template.json001.jsonsticker/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.json001.jsonsticker/sticker.json 以及图片序列等文件。客户端可按 id/version 建立缓存目录,避免版本冲突:

textcontext.getExternalFilesDir("stickers")/glass/1.0.0/

通用流程:

  1. 请求服务器贴纸配置列表。
  2. 检查本地是否已有相同 id + version 的缓存资源。
  3. 无缓存时下载 zip 到临时文件。
  4. 校验文件大小、MD5 或业务签名。
  5. 解压到临时目录,确认 template.json 存在。
  6. 原子替换到正式缓存目录。
  7. 用户选择贴纸时,将正式缓存目录路径传入 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"];
    

调用顺序建议

  1. 初始化 NERtc SDK。
  2. 准备美颜、贴纸资源(动态贴纸需提前下载、校验并解压至本地)。
  3. 设置本地视频渲染视图,开启本地视频。
  4. 调用 startBeauty
  5. 加入频道后调用 isOpenBeauty = YES
  6. 用户选择贴纸时调用 addBeautyStickerWithPath:andNa
  7. 退出频道或销毁页面时,依次执行:isOpenBeauty = NOremoveBeautyStickerstopBeauty

常见问题

Q1:贴纸不生效?

  • 确认已调用 startBeauty 并开启美颜(isOpenBeauty = YES)。
  • 确认传入的是贴纸资源目录路径,而非图标文件路径。
  • 确认 zip 已解压,路径以 / 结尾,且模板文件名传的是 template.json
  • 确认当前贴纸资源与平台 SDK 版本匹配。

Q2:退出房间后再次进入美颜异常?

退出时确保关闭顺序完整:isOpenBeauty = NO -> removeBeautySticker -> stopBeauty

此文档是否对你有帮助?
有帮助
去反馈
  • 功能介绍
  • 注意事项
  • 实现方法
  • 准备贴纸资源
  • 启动美颜模块
  • 添加或移除贴纸
  • 关闭和释放资源
  • 服务器动态拉取贴纸
  • 资源添加规则
  • 调用顺序建议
  • 常见问题