使用 CocoaPods 集成 SDK。在 Podfile 中添加如下依赖:
说明:我们在BDAvatarKit.podsspec中已经包含了SocketRocket和VolcEngineRTC的依赖,但是并未锁定特定版本,我们推荐你在Podfile中指定版本,以确保一致性和兼容性。
- 对于VolcEngineRTC,我们推荐你指定版本为3.60.103.5000
- 对于SocketRocket,我们推荐你指定版本为0.6.1
如果你项目使用的版本与我们推荐的版本不一致,你需要与对应的组件提供商确认兼容性,并进行完整的测试。
由于 SDK 需要进行语音交互,请在工程的 Info.plist 中添加使用麦克风的权限说明:
调用数字人服务,你首先需要创建BDAvatarKit SDK实例,通常而言,一个应用只需要创建一个实例。我们推荐你将这个实例作为单例持有,以确保全局唯一性。SDK实例负责管理全局信息,如会话认证、日志记录、事件通知等。
SDK 支持三种认证方式:
推荐使用 WSS Token 认证方式,无需暴露 AK/SK,安全性更高。
方式一:WSS Token 认证(推荐,短期有效)
不需要 AK/SK,直接使用 WSS Token 进行认证。安全性更高,无需暴露密钥。WSS Token 有过期时间,需要在过期前刷新。WSS Token由后端生成,通过接口下发到客户端。文末我们提供了一个WSS Token生成的示例代码:wss_token_volc.zip,供参考。
方式二:永久 AK/SK 认证(长期有效)
使用长期有效的 AppKey/SecretKey,无需刷新。
方式三:临时 AK/SK + STS Token 认证(短期有效)
使用临时凭证的场景,必须配置 stsToken。三者具有相同的过期时间,需要一起刷新。
对于使用临时 AK/SK + STS Token 或 WSS Token 的场景,凭证具有时效性。为确保后续连接顺利,请在凭证过期前调用对应的更新接口:
- 更新临时 AK/SK + STS:[avatarKit updateTempAKSKWithAppKey:secretKey:stsToken:]
- 更新 WSS Token:[avatarKit updateWssToken:]
更新后的凭证将在下次创建会话时生效,不会影响当前正在进行的会话。
BDAvatarSession实例,表示一个数字人会话,每个会话对应一个数字人实例。你需要通过BDAvatarKit实例的avatarSessionWithConfig:方法创建会话。
示例代码如下:
会话创建成功以后,调用startSession方法开启会话。并通过delegate属性设置会话代理,以接收会话相关的事件通知。
示例代码如下:
监听会话启动和结束事件:
为会话设置渲染视图画布,你需要创建UIView实例用于渲染数字人视频流,并且在会话启动成功以后,调用setAvatarVideoCanvas:renderMode:方法,以显示数字人实例的视频流。
示例代码如下:
会话启动成功以后,你可以调用startAudioCapture方法开始采集麦克风输入与数字人交互。SDK内部会启动音频采集并将其发送到数字人服务进行交互。
会话期间,你可以调用stopAudioCapture方法停止采集,调用startAudioCapture方法重新开始采集。
示例代码如下:
不需要时调用endSession方法结束会话,释放会话资源。
示例代码如下:
3.1 BDAvatarKitConfig (SDK实例创建配置)
SDK 初始化配置类。
认证方式选择规则:
- 同时配置 appKey 和 secretKey 时,使用 AK/SK 认证(优先)
- 使用临时 AK/SK 时,必须同时配置 stsToken
- 仅配置 wssToken 时,使用 WSS Token 认证
SDK 的核心管理类。
初始化 BDAvatarKit 实例。
- 参数: config - BDAvatarKitConfig 对象。
- 说明: 最佳实践是在应用程序的生命周期中创建一个实例并将其作为单例使用。初始化后大部分配置属性变为不可变,仅认证凭证可通过专用方法更新。
avatarSessionWithConfig:
通过配置创建数字人会话实例。
- 参数: config - BDAvatarSessionConfig 对象。
- 返回值: 返回一个初始化的 BDAvatarSession 实例。
updateTempAKSKWithAppKey:secretKey:stsToken:
更新临时 AK/SK 凭证及 STS Token。
- secretKey - 新的临时 Secret Key
- 说明: 适用于临时 AK/SK 认证场景,三者需一起刷新。更新后的凭证在下次创建会话时生效,不影响当前会话。
更新 WSS Token。
- 参数: wssToken - 新的 WSS Token,传 nil 清除。
- 说明: 适用于 WSS Token 认证场景,Token 过期前调用此方法更新。更新后的 Token 在下次创建会话时生效,不影响当前会话。
3.3 BDAvatarSessionConfig (会话配置)
数字人会话相关的参数配置。
avatarImageUrl为数字人形象图片的https URL,推荐的图片比例为16:9或者4:3。speaker 为数字人音色,支持的参数参考如下文档:音色列表 其中SC 2.0版本和O 2.0版本的音色皆支持。
actionList 支持的动作标识符如下:
3.4 BDAvatarSession (会话管理)
管理单个数字人会话的生命周期、渲染和麦克风控制。
- 类型: id<BDAvatarSessionDelegate>
- 说明: 代理回调,用于接收生命周期及音频事件回调。注意:回调可能不会在主线程执行。
setAvatarVideoCanvas:renderMode:
- view (UIView): 用于渲染数字人视频的视图。传入 nil 取消画布。
- renderMode (BDAvatarRenderMode): 渲染模式,包含以下枚举:
- BDAvatarRenderModeHidden (1): 铺满视图,视频多出部分将被裁剪(默认)。
- BDAvatarRenderModeFit (2): 视频完全显示,空白部分填充背景色。
- BDAvatarRenderModeFill (3): 拉伸视频以铺满视图,可能导致比例改变。
startAudioCapture / stopAudioCapture
3.5 BDAvatarSessionDelegate (代理协议)
继承自 BDAvatarSessionLifeCycleDelegate 与 BDAvatarSessionAudioCaptureDelegate。
- - (void)avatarSessionDidStart:(BDAvatarSession *)session;
- - (void)avatarSessionDidEnd:(BDAvatarSession *)session withError:(nullable NSError *)error;
- 会话结束(包含主动请求结束或发生错误导致结束)。
- - (void)avatarSessionDidStartAudioCapture:(BDAvatarSession *)session;
- - (void)avatarSessionDidStopAudioCapture:(BDAvatarSession *)session;
- - (void)avatarSession:(BDAvatarSession *)session didAudioCaptureFailed:(NSError *)error;
- 本地麦克风录音发生错误(启动失败或运行中报错)。
- - (void)avatarSession:(BDAvatarSession *)session didRecordAudioFrame:(BDAvatarAudioFrame *)audioFrame;