使用说明
本文介绍如何在你的项目中集成和使用相芯美颜道具高级版插件。
技术原理
相芯美颜道具高级版插件是对相芯 Nama SDK 核心 API 的封装。通过声网 SDK v4.x 提供的 setExtensionPropertyWithVendor
方法,传入指定的 key
和 value
参数,你可以快速集成相芯的美颜能力。
setExtensionPropertyWithVendor
方法的 key
参数与相芯的 API 名称完全对应,value
参数以 JSON 格式包装该 API 的部分或全部参数。因此,调用该方法时只要传入指定的 key
和 value
,就可以调用对应的相芯 API,实现美颜的有关功能。
前提条件
iOS 开发环境需满足以下要求:
- Xcode 9.0 或以上版本。
- 运行 iOS 9.0 或以上版本的真机(非模拟器)。
示例项目
相芯美颜道具高级版插件提供了 GitHub 示例项目,你可以前往克隆或下载并进行体验。
平台 | 语言 | 示例代码 |
---|---|---|
Android | Java | FaceUnity/android |
iOS | Objective-C | FaceUnity/ios |
Flutter | Dart | FaceUnity/flutter |
参考以下步骤快速跑通示例项目:
-
克隆仓库:
Shellgit clone https://github.com/AgoraIO-Community/AgoraMarketplace.git
- 参考仓库文件夹中的
FaceUnity/ios/README.zh.md
文件完成后续步骤。
集成和调用流程
1. 集成 SDK 和插件
开始前,你需要在项目中分别集成声网视频 SDK 和相芯美颜道具高级版插件。
1.1 使用声网 SDK 实现音视频互动
插件需要与 RTC SDK 搭配使用。参考以下文档集成 RTC SDK 并实现基础的音视频互动:
该插件目前仅支持 RTC SDK v4.1.0 和 v4.1.1,更多版本将在近期支持。
1.2 购买和激活插件
你需要进入声网控制台 > 云市场页面,按照提示购买相芯美颜道具高级版插件,并且联系声网提供你的包名(例如 yourCompany.yourProject.faceunity
)。随后你会收到与包名唯一对应的证书文件,用于后续集成插件。
1.3 集成插件
参考以下步骤集成插件:
-
进入声网控制台 > 云市场页面,下载相芯美颜道具高级版的 iOS 插件动态库压缩包。
-
解压文件夹,将所有
.framework
文件导入项目,并将 Embed 修改为 Embed & Sign。 -
将证书文件
authpack.h
引入你的 Xcode 项目。 -
点击下载相芯美颜插件的资源包,将所需的模型和道具文件保存到项目文件夹,比如
Resource
路径。资源包中提供的文件详见参考信息。Shell项目文件夹示例
.
├── <ProjectName>
├── <ProjectName>.xcodeproj
└── Resource -
导入需要用到的头文件:
Objective-C#import <AgoraRtcKit/AgoraRtcEngineKit.h>
#import "authpack.h"
2. 启用插件
创建并初始化 AgoraRtcEngineKit
后,首先调用 enableExtensionWithVendor
启用插件,再调用其它 API(enableVideo
、joinChannelByToken
等)。
[self.agoraKit enableExtensionWithVendor:@"FaceUnity"
extension:@"Effect"
enabled:self.enable];
3. 初始化插件
收到声网 SDK 的 onExtensionStarted
回调后,调用 setExtensionPropertyWithVendor
并传入对应的 key
和 value
,具体顺序如下:
- 初始化。对应的
key
为fuSetup
,value
为证书文件 authpack 的指针。 - 加载 AI 模型。对应的
key
为fuLoadAIModelFromPackage
,value
包含 AI 能力模型文件ai_xxx.bundle
的路径以及 AI 能力类型。
- (void)loadAIModels {
[self.agoraKit
setExtensionPropertyWithVendor:@"FaceUnity"
extension:@"Effect"
key:@"fuLoadAIModelFromPackage"
value:[self toJson:@{
@"data": [[NSBundle mainBundle]
pathForResource:@"ai_face_processor"
ofType:@"bundle"],
// 通过 type 参数设置 AI 能力类型为 FUAITYPE_FACEPROCESSOR,对应取值为 1 << 8
@"type": @(1 << 8)
}]];
[self.agoraKit
setExtensionPropertyWithVendor:@"FaceUnity"
extension:@"Effect"
key:@"fuLoadAIModelFromPackage"
value:[self toJson:@{
@"data": [[NSBundle mainBundle]
pathForResource:@"ai_hand_processor"
ofType:@"bundle"],
@"type": @(1 << 3)
}]];
[self.agoraKit
setExtensionPropertyWithVendor:@"FaceUnity"
extension:@"Effect"
key:@"fuLoadAIModelFromPackage"
value:[self toJson:@{
@"data": [[NSBundle mainBundle]
pathForResource:@"ai_human_processor_gpu"
ofType:@"bundle"],
@"type": @(1 << 9)
}]];
[self.agoraKit
setExtensionPropertyWithVendor:@"FaceUnity"
extension:@"Effect"
key:@"fuCreateItemFromPackage"
value:[self toJson:@{
@"data": [[NSBundle mainBundle]
pathForResource:@"aitype"
ofType:@"bundle"]
}]];
[self.agoraKit
setExtensionPropertyWithVendor:@"FaceUnity"
extension:@"Effect"
key:@"fuItemSetParam"
value:[self toJson:@{
@"obj_handle": [[NSBundle mainBundle]
pathForResource:@"aitype"
ofType:@"bundle"],
@"name": @"aitype",
@"value": @(1 << 8 | 1 << 30 | 1 << 3),
}]];
}
4. 设置美颜效果和人体识别
设置美颜效果需要调用 setExtensionPropertyWithVendor
并传入对应的 key
和 value
,实现以下功能:
- 加载道具、调节美颜强度
- 人脸、手势和人体识别
你可以根据场景需要进行组合调用。相关的 key
和 value
详见 key-value 说明。
5. 释放资源
需要停止使用插件时,按照以下步骤释放资源:
- 调用
setExtensionPropertyWithVendor
并传入key
为fuDestroyLibData
,释放插件占用的资源。 - 收到
fuDestroyLibData
回调后,调用destroy
方法销毁AgoraRtcEngineKit
对象。
参考信息
API 参考
常见问题
问题 1:运行示例项目,美颜为什么没有生效?
通常有以下几个原因:
- 插件动态库没有保存在正确位置,或者没有导入;
- 相芯资源包中的文件没有保存在正确位置,或者缺少部分文件;
- 证书文件与 App 包名不一致,导致鉴权失败。
问题 2:为什么开启采集后需要 1s 左右才能渲染出视频?
加载相芯美颜资源的操作会造成 GL 渲染线程卡顿,加载资源的过程大概耗时 800ms。建议通过业务处理(比如添加 loading 界面)规避。
素材包结构
相芯美颜道具高级版插件的资源包文件结构详见:
更多的接口调用方式可以参考相芯 Nama SDK 的文档: