更新时间:2024年3月12日
本文介绍如何使用SAAS DUIX iOS SDK,包括安装下载,关键接口及其代码示例。
GJDigitalSDK.framework、WebRTC.framework 下载:下载Demo
开发⼯具: Xcode
[[GJAccess manager] getCamerapermissions:^(bool isPermis) {
if (isPermis) {
[DigitalConfig shareConfig].conversationId = conversationId;
[[DigitalManager manager] initWithAppId:appId appKey:appKey block:^(BOOL isSuccee, NSString *errorMsg) {
if (isSuccee) {
[[DigitalManager manager] toStart];
} else {
NSLog(@"errorMsg==%@",errorMsg);
}
}];
}
}];
1.启动DUIX服务前需要准备好授权的appId,appKey,conversationId;
2.授权麦克风权限、相机权限;
3.init初始化数字人渲染,ASR及对话交互服务,开始初始化通讯;
4.根据需要是否打开麦克风-(void)setMute:(BOOL)isEnabled;
5.asr语音识别说话内容并调用问答接口- (void)questionCommandEvent:(NSString *)content userId:(NSString *)userId;
6.给中控发送答案文本和音频地址,是否中断上一句话- (void)commandEvent:(NSString *)content wavPath:(NSString *)wavPath interrupt:(BOOL)interrupt;
7.打断数字人播报- (void)toBreakDigital;
8.结束通讯-(void)toStop。
framework
GJDigitalSDK.framework
WebRTC.framework
改为Embed & Sign
<key>NSLocalNetworkUsageDescription</key>
<string>获取本地网络权限</string>
<key>NSMicrophoneUsageDescription</key>
<string>需要录音权限来语音识别</string>
<key>NSCameraUsageDescription</key>
<string>需要相机权限</string>
/*
* SDK初始化
* - Parameters:
* - appId: appId
* - appKey: appkey
* - block: 回调初始化成功-执行toStart
*/
- (void)initWithAppId:(NSString *)appId appKey:(NSString *)appKey block:(void (^) (BOOL isSuccee, NSString *errorMsg))block;
/*
* 开始初始化通讯
*/
-(void)toStart;
/*
* 结束通讯
*/
-(void)toStop;
/*
* 客户端控制开启、关闭asr识别
* isOpen yes:打开,no:关闭
*/
- (void)changeAsrEvent:(BOOL)isOpenAsr;
/*
*给中控发送文本
* @param content 文本内容
* @param interrupt 是否打断上一句
*/
- (void)commandEvent:(NSString *)content interrupt:(BOOL)interrupt;
/*
*发送说话内容给中控
* @param content 文本内容
* @param wavPath 音频地址
* @param interrupt 是否打断上一句
*/
- (void)commandEvent:(NSString *)content wavPath:(NSString *)wavPath interrupt:(BOOL)interrupt;
@protocol DigitalViewDelegate <NSObject>
@optional
/*
*错误信息返回码
*/
- (void)onError:(NSInteger)errorCode errorMsg:(NSString *)errorMsg;
/*
*远程视频通讯完成
*/
- (void)onRTCReomteSuccess;
/*
*中控获取到渲染端信息后通知客户端
*@param ID id
*@param name name
*/
- (void)onRender:(NSString *)ID name:(NSString *)name;
/*
*识别出来的asr数据 vad 开始信息和结束信息
*@param asrText asr识别文本
*@param vad vad[@"state"] 1开始播放 0播放结束
*/
-(void)detectedSpeech:(NSString*)asrText vad:(NSDictionary *)vad;
/*
*一句话开始播放和停止播放状态
*dic[@"state"] == playStart 开始播放, ==playStop 播放结束
*dic[@"content"] 播放文本
*/
-(void)playState:(NSDictionary *)dic;
/*
*播放异常 可重试播放或终止
*/
- (void)playException:(NSString *)wavUrl content:(NSString *)content;
/*
*webrtc连接状态回调
*@param state RTCIceConnectionState
*/
- (void)didIceConnectionChange:(RTCIceConnectionState)state;
/*
*中控结束通话,发送bye事件
*/
- (void)onByeBye;
/*
*是否成功加载数字人
*/
- (void)onVideoShow:(BOOL)isSuccess :(float)progress;
/*
*获取本地视频的视频流
*/
- (void)capturer:(RTCVideoCapturer *)capturer didCaptureVideoFrame:(RTCVideoFrame *)frame;
/*
提问后获取答案成功
- Parameters:
- answerStr: 答案
- filePath: filepath
*/
- (void)answerWithAnserStr:(NSString *)answerStr filePath:(NSString *)filePath;
/*
提问后获取答案失败
- Parameters:
- errorMsg: 错误
*/
- (void)answerWithErrorMsg:(NSString *)errorMsg;
@end
详细⻅Demo终代码,:
//初始化
[[GJAccess manager] getCamerapermissions:^(bool isPermis) {
if (isPermis) {
[DigitalConfig shareConfig].conversationId = conversationId;
[[DigitalManager manager] initWithAppId:appId appKey:appKey block:^(BOOL isSuccee, NSString *errorMsg) {
if (isSuccee) {
[[DigitalManager manager] toStart];
} else {
NSLog(@"errorMsg==%@",errorMsg);
}
}];
}
}];
//提问
- (void)startQuestion:(NSString *)userQuestion {
[[DigitalManager manager] questionCommandEvent:userQuestion userId:@"123"];
}
//给中控发送文本&语音
- (void)vcCommandEvent:(NSString *)content wavPath:(NSString *)wavPath interrupt:(BOOL)interrupt {
[[DigitalManager manager] commandEvent:content wavPath:wavPath interrupt:interrupt];
}
#pragma mark -DigitalViewDelegate
//问题回答
- (void)answerWithQuestion:(NSString *)question anserStr:(NSString *)answerStr filePath:(NSString *)filePath errorMsg:(NSString *)errorMsg {
if (errorMsg.length == 0) {
[self vcCommandEvent:answerStr wavPath:filePath interrupt:YES];
}
}
/// 错误信息返回
- (void)onError:(NSInteger)error_code errorMsg:(NSString *)errorMsg {
if (error_code == 50001) {
//错误或者空的appId
} else if (error_code == 50002) {
//资源检查失败,请联系管理员
} else if (error_code == 50003) {
//资源占用中,请检查后再试~
} else if (error_code == 50004) {
//human请求超时~
} else if (error_code == 50005) {
//从资源组中获取资源异常
} else if (error_code == 50006) {
//签名失败
} else if (error_code == 50007) {
//资源总并发不足,请检查后再试~
} else if (error_code == 50009) {
//资源超时或未配置~
}
NSLog(@"errorMsg==%@",errorMsg);
}
///识别出来的asr内容
- (void)detectedSpeech:(NSString*)asrText vad:(NSDictionary *)vad {
if (vad.count > 0) {
return;
}
if (asrText.length == 0) {
return;
}
[self startQuestion:asrText];
}
/// 显示视频是否加载完成
- (void)onVideoShow:(BOOL)isSuccess progress:(float)progress {
if (isSuccess) {
} else {
//可做加载进度
}
}
- (void)playState:(NSDictionary *)dic {
NSString * state=dic[@"state"];
if ([state isEqualToString:@"playStart"]) {
NSLog(@"一句话开始播放");
} else if([state isEqualToString:@"playStop"]) {
NSLog(@"一句话结束播放");
}
}
错误码 | 说明 |
---|---|
-1 | 客户端网络请求异常 |
-2 | 客户端接口请求http状态码异常。 |
-3 | 客户端获取DUIX资源异常 |
-4 | 客户端MQTT连接失败 |
-5 | 客户端WebRTC的SDP创建失败,一般为iceServer异常。 |
-6 | 客户端WebRTC的SDP设置失败,一般为iceServer异常。 |
-7 | 客户端会话交互异常,常见的有鉴权失败、ASR资源启动失败等。 |
1005 | 服务端token不能为空 |
1006 | 服务端toke失效 |
1007 | 服务端话术信息不存在 |
1009 | 服务端用户可用次数不足 |
2002 | 服务端会话信息不存在 |
40001 | 服务端appid或者appscrect无效 |
40002 | 服务端内部错误 |
50001 | 错误或者空的appId |
50002 | 资源检查失败,请联系管理员 |
50003 | 资源占用中,请检查后再试~ |
50004 | human请求超时~ |
50005 | 从资源组中获取资源异常 |
50006 | 签名失败 |
50007 | 资源总并发不足,请检查后再试~ |
50009 | 资源超时或未配置~ |