本文将介绍如何将AICallKit SDK集成到您的Android应用中。
环境要求
Android Studio 插件版本4.1.3
Gradle 7.0.2
Android Studio自带JDK11
集成SDK
在项目级build.gradle项目文件中添加阿里云Maven仓库。
allprojects { repositories { google() jcenter() maven { url 'https://maven.aliyun.com/repository/google' } maven { url 'https://maven.aliyun.com/repository/public' } } }
在相应build.gradle项目文件下,加入引入ARTCAICallKit依赖项。
dependencies { implementation 'com.aliyun.aio:AliVCSDK_ARTC:x.x.x' //修改x.x.x为你工程适配的版本 implementation 'com.aliyun.auikits.android:ARTCAICallKit:1.4.0' }
说明ARTC SDK版本请到官网获取最新适配版本号。
SDK使用示例
ARTCAICallEngine mARTCAICallEngine = null;
// 创建engine实例
void initEngine(Context context, String userId) {
// 初始化
// context -> Android Context
// userId -> 进入rtc频道的用户id
mARTCAICallEngine = new ARTCAICallDepositEngineImpl(context, userId);
}
// 设置回调
void initCallback() {
mARTCAICallEngine.setEngineCallback(mCallEngineCallbackWrapper);
}
// 启动智能体后,开始通话
void call() {
// 设置engine的启动参数
ARTCAICallEngine.ARTCAICallConfig artcaiCallConfig = new ARTCAICallEngine.ARTCAICallConfig();
// 如果有临时的智能体ID,可以配置
artcaiCallConfig.aiAgentId = aiAgentId;
mARTCAICallEngine.init(artcaiCallConfig);
// 指定智能体的类型:纯语音、数字人、视觉理解
ARTCAICallEngine.ARTCAICallAgentType aiAgentType = VoiceAgent;
mARTCAICallEngine.setAiAgentType(aiAgentType);
// 如果是数字人类型,则需要配置数字人显示的视图容器
if (aiAgentType == AvatarAgent) {
ViewGroup avatarlayer;
mARTCAICallEngine.setAvatarAgentView(
avatarlayer,
new ViewGroup.LayoutParams(ViewGroup.LayoutParams.MATCH_PARENT,
ViewGroup.LayoutParams.MATCH_PARENT)
);
}
// 如果是视觉理解类型,则需要配置本地视频预览显示的视图容器
else if (aiAgentType == VisionAgent) {
ViewGroup previewLayer;
mARTCAICallEngine.setVisionPreviewView(previewLayer,
new FrameLayout.LayoutParams(ViewGroup.LayoutParams.MATCH_PARENT,
ViewGroup.LayoutParams.MATCH_PARENT)
);
}
// 进入频道
String aIAgentInstanceId = “XXX”;
String rtcAuthToken = "XXX";
String aIAgentUserId = "XXX";
String channelId = "XXX";
mARTCAICallEngine.call(rtcAuthToken, aIAgentInstanceId,
aIAgentUserId, channelId);
}
// 结束通话
void handup() {
mARTCAICallEngine.handup();
}
// 其他功能调用示例,请参考API说明
// 回调处理(仅示例不分核心的回调操作)
ARTCAICallEngine.IARTCAICallEngineCallback mCallEngineCallbackWrapper = new ARTCAICallEngine.IARTCAICallEngineCallback() {
@Override
public void onErrorOccurs(ARTCAICallEngine.AICallErrorCode errorCode) {
// 发生了错误,结束通话
mARTCAICallEngine.handup();
}
@Override
public void onCallBegin() {
// 通话开始(入会)
}
@Override
public void onCallEnd() {
// 通话结束(离会)
}
@Override
public void onAICallEngineRobotStateChanged(ARTCAICallEngine.ARTCAICallRobotState oldRobotState, ARTCAICallEngine.ARTCAICallRobotState newRobotState) {
// 机器人状态同步
}
@Override
public void onUserSpeaking(boolean isSpeaking) {
// 用户说话回调
}
@Override
public void onUserAsrSubtitleNotify(String text, boolean isSentenceEnd, int sentenceId) {
// 同步ASR识别用户的话
}
@Override
public void onAIAgentSubtitleNotify(String text, boolean end, int userAsrSentenceId) {
// 同步智能体回应的话
}
@Override
public void onNetworkStatusChanged(String uid, ARTCAICallEngine.ARTCAICallNetworkQuality quality) {
// 网络状态回调
}
@Override
public void onVoiceVolumeChanged(String uid, int volume) {
// 音量变化
}
@Override
public void onVoiceIdChanged(String voiceId) {
// 当前通话的音色发生了改变
}
@Override
public void onVoiceInterrupted(boolean enable) {
// 当前通话的语音打断设置改变
}
@Override
public void onAgentVideoAvailable(boolean available) {
// 智能体视频是否可用(推流)
}
@Override
public void onAgentAudioAvailable(boolean available) {
// 智能体音频是否可用(推流)
}
@Override
public void onAgentAvatarFirstFrameDrawn() {
// 数字人首视频帧渲染
}
@Override
public void onUserOnLine(String uid) {
// 用户上线回调
}
};
API说明
API概览
类/协议 | API | 说明 |
ARTCAICallEngine 引擎接口定义 | 初始化 | |
设置智能体类型 | ||
创建&开始通话 | ||
挂断 | ||
切换麦克风状态 | ||
打断机器人说话 | ||
开启/关闭智能打断 | ||
开启/关闭扬声器 | ||
开启/关闭对讲机模式 | ||
对讲机模式是否开启 | ||
对讲机模式:开始讲话 | ||
对讲机模式:结束讲话 | ||
对讲机模式:取消这次通话 | ||
切换音色 | ||
获取正在使用的音色 | ||
注册回调 | ||
是否关闭麦克风 | ||
扬声器是否开启 | ||
智能打断是否开启 | ||
设置数字人视图载体 | ||
设置本地视频预览视图载体 | ||
关闭/取消关闭摄像头 | ||
摄像头是否关闭 | ||
切换前后摄像头 | ||
获取RTC引擎实例 | ||
获取官方协议实现 | ||
IARTCAICallEngineCallback 引擎回调事件 | 发生了错误 | |
通话开始 | ||
通话结束 | ||
机器人状态同步 | ||
用户说话回调 | ||
同步ASR识别用户的话 | ||
同步智能体回应的话 | ||
网络状态回调 | ||
音量变化 | ||
onVoiceIdChanged | ||
当前通话的语音打断设置改变 | ||
智能体视频是否可用(推流) | ||
智能体音频是否可用(推流) | ||
数字人首视频帧渲染 | ||
用户上线回调 | ||
当前智能体即将离开(结束当前通话) | ||
智能体自定义消息 | ||
IARTCAICallService类 | 请求启动分享的智能体通话 | |
ARTCAIAgentUtil类 | 解析分享智能体的信息 | |
解析智能体启动的响应信息 |
ARTCAICallEngine详情
init
初始化
/**
* 初始化
* @param config 初始化配置
*/
public abstract void init(ARTCAICallConfig config);
setAICallAgentType
设置智能体类型
/**
* 设置智能体类型
* @param aiAgentType
*/
public abstract void setAICallAgentType(ARTCAICallAgentType aiAgentType);
call
创建&开始通话
/**
* 创建&开始通话
*/
public abstract void call(String rtcToken, String aiAgentInstanceId, String aiAgentUserId, String channelId);
handup
挂断
/**
* 挂断
*/
public abstract void handup();
switchMicrophone
切换麦克风状态
/**
* 切换麦克风状态
* @param on
*/
public abstract void switchMicrophone(boolean on);
interruptSpeaking
打断机器人说话
/**
* 打断机器人说话
*/
public abstract boolean interruptSpeaking();
enableVoiceInterrupt
开启/关闭智能打断
/**
* 开启/关闭智能打断
*/
public abstract boolean enableVoiceInterrupt(boolean enable);
enableSpeaker
开启/关闭扬声器
/**
* 开启/关闭扬声器
*/
public abstract boolean enableSpeaker(boolean enable);
enablePushToTalk
开启/关闭对讲机模式
/**
* 开启/关闭对讲机模式,对讲机模式下,只有在finishPushToTalk被调用后,智能体才会播报结果
* @param enable
* @return
*/
public abstract boolean enablePushToTalk(boolean enable);
isPushToTalkEnable
对讲机模式是否开启
/**
* 对讲机模式是否开启
* @return
*/
public abstract boolean isPushToTalkEnable();
startPushToTalk
对讲机模式:开始讲话
/**
* 对讲机模式:开始讲话
* @return
*/
public abstract boolean startPushToTalk();
finishPushToTalk
对讲机模式:结束讲话
/**
* 对讲机模式:结束讲话
* @return
*/
public abstract boolean finishPushToTalk();
cancelPushToTalk
对讲机模式:取消这次通话
/**
* 对讲机模式:取消这次通话
* @return
*/
public abstract boolean cancelPushToTalk();
switchRobotVoice
切换音色
/**
* 切换音色
*/
public abstract boolean switchRobotVoice(String voiceId);
getRobotVoiceId
获取正在使用的音色
/**
* 获取正在使用的音色
* @return
*/
public abstract String getRobotVoiceId();
setEngineCallback
注册回调
/**
* 注册回调
* @param engineCallback
*/
public abstract void setEngineCallback(IARTCAICallEngineCallback engineCallback);
isMicrophoneOn
是否关闭麦克风
/**
* 是否关闭麦克风
* @return
*/
public abstract boolean isMicrophoneOn();
isSpeakerOn
扬声器是否开启
/**
* 扬声器是否开启
* @return
*/
public abstract boolean isSpeakerOn();
isVoiceInterruptEnable
智能打断是否开启
/**
* 智能打断是否开启
* @return
*/
public abstract boolean isVoiceInterruptEnable();
setAvatarAgentView
设置数字人视图载体
/**
* 设置数字人视图载体
* @param viewGroup
* @param avatarLayoutParams
*/
public abstract void setAvatarAgentView(ViewGroup viewGroup, ViewGroup.LayoutParams avatarLayoutParams);
setVisionPreviewView
设置本地视频预览视图载体
/**
* 设置本地视频预览视图载体
* @param viewGroup
* @param visionLayoutParams
*/
public abstract void setVisionPreviewView(ViewGroup viewGroup, ViewGroup.LayoutParams visionLayoutParams);
muteLocalCamera
关闭/取消关闭摄像头
/**
* 关闭/取消关闭摄像头
*/
public abstract boolean muteLocalCamera(boolean mute);
isLocalCameraMute
摄像头是否关闭
/**
* 摄像头是否关闭
* @return
*/
public abstract boolean isLocalCameraMute();
switchCamera
切换前后摄像头
/**
* 切换前后摄像头
*/
public abstract boolean switchCamera();
getRtcEngine
获取RTC引擎实例
/**
* 获取rtc引擎实例
* @return
*/
public abstract AliRtcEngine getRtcEngine();
getIARTCAICallService
获取官方协议实现
/**
* 获取官方协议实现
* @return
*/
public abstract IARTCAICallService getIARTCAICallService();
IARTCAICallEngineCallback详情
onErrorOccurs
发生了错误
/**
* 发生了错误
* @param errorCode 错误码
*/
void onErrorOccurs(AICallErrorCode errorCode);
onCallBegin
通话开始(入会)
/**
* 通话开始(入会)
*/
void onCallBegin();
onCallEnd
通话结束(离会)
/**
* 通话结束(离会)
*/
void onCallEnd();
onAICallEngineRobotStateChanged
机器人状态同步
/**
* 机器人状态同步
* @param oldRobotState
* @param newRobotState
*/
void onAICallEngineRobotStateChanged(ARTCAICallRobotState oldRobotState, ARTCAICallRobotState newRobotState);
onUserSpeaking
用户说话回调
/**
* 用户说话回调
* @param isSpeaking 是否在说话
*/
void onUserSpeaking(boolean isSpeaking);
onUserAsrSubtitleNotify
同步ASR识别用户的话
/**
* 同步ASR识别用户的话
* @param text ASR识别出的具体文本
* @param isSentenceEnd 当前文本是否为这句话的最终结果
* @param sentenceId 当前文本属于的句子ID
*/
void onUserAsrSubtitleNotify(String text, boolean isSentenceEnd, int sentenceId);
onAIAgentSubtitleNotify
同步智能体回应的话
/**
* 同步智能体回应的话
* @param text 智能体的话
* @param end 当前回复是否结束
* @param userAsrSentenceId 表示回应对应sentenceId语音输入的llm内容
*/
void onAIAgentSubtitleNotify(String text, boolean end, int userAsrSentenceId);
onNetworkStatusChanged
网络状态回调
/**
* 网络状态回调
* @param uid 入会用户id
* @param quality 网络状态
*/
void onNetworkStatusChanged(String uid, ARTCAICallNetworkQuality quality);
onVoiceVolumeChanged
音量变化
/**
* 音量变化
* @param uid 用户id
* @param volume 音量[0-255]
*/
void onVoiceVolumeChanged(String uid, int volume);
onVoiceIdChanged
当前通话的音色发生了改变
/**
* 当前通话的音色发生了改变
*/
void onVoiceIdChanged(String voiceId);
onVoiceInterrupted
当前通话的语音打断设置改变
/**
* 当前通话的语音打断设置改变
*/
void onVoiceInterrupted(boolean enable);
onAgentVideoAvailable
智能体视频是否可用(推流)
/**
* 智能体视频是否可用(推流)
*/
void onAgentVideoAvailable(boolean available);
onAgentAudioAvailable
智能体音频是否可用(推流)
/**
* 智能体音频是否可用(推流)
*/
void onAgentAudioAvailable(boolean available);
onAgentAvatarFirstFrameDrawn
数字人首视频帧渲染
/**
* 数字人首视频帧渲染
*/
void onAgentAvatarFirstFrameDrawn();
onUserOnLine
用户上线回调
/**
* 用户上线回调
*/
void onUserOnLine(String uid);
onAgentWillLeave
当前智能体即将离开(结束当前通话)
/**
* 当前智能体即将离开(结束当前通话)
* @param reason 原因:2001(闲时退出) 0(其他)
* @param message 描述原因
*/
void onAgentWillLeave(int reason, String message);
onReceivedAgentCustomMessage
智能体自定义消息
/**
* 智能体自定义消息
* @param data 自定义消息体,使用json字符串
*/
public void onReceivedAgentCustomMessage(String data);
IARTCAICallService详情
generateAIAgentShareCall
请求启动分享的智能体通话
/**
* 请求启动分享的智能体通话
* @param userId 当前登录的用户id
* @param aiAgentId 智能体id
* @param aiAgentType 智能体类型
* @param artcaiCallConfig 智能体配置
* @param callback 请求回调
*/
void generateAIAgentShareCall(String userId, String aiAgentId, ARTCAICallEngine.ARTCAICallAgentType aiAgentType, ARTCAICallEngine.ARTCAICallConfig artcaiCallConfig, IARTCAICallServiceCallback callback);
ARTCAIAgentUtil详情
parseAiAgentShareInfo
解析分享智能体的信息
/**
* 解析分享智能体的信息
* @param shareInfoText
* @return 分享智能体的结构化配置
*/
public static ARTCAIAgentShareInfo parseAiAgentShareInfo(String shareInfoText);
parseAiAgentInfo
解析智能体启动的响应信息
/**
* 解析智能体启动的响应信息
* @param jsonObject 智能体启动的响应信息
* @return 智能体启动响应的结构化信息
*/
public static ARTCAIAgentInfo parseAiAgentInfo(JSONObject jsonObject);