Android使用指南
本文将介绍如何通过AICallKit SDK集成音视频智能体到您的Android应用中。
环境要求
Android Studio 插件版本4.1.3
Gradle 7.0.2
Android Studio自带JDK11
业务流程
您的App通过AppServer(你的业务服务器)获取RTC Token,便可调用call(config)方法进入通话,在通话过程中,可以调用AICallKit的API实现智能体的实时字幕、打断等交互功能。AICallKit依赖于实时音视频能力,因此在内部已实现AliVCSDK_ARTC SDK的相关功能。如果您的业务场景还需要用到直播与点播能力,可以使用音视频终端组合SDK,例如AliVCSDK_Standard或AliVCSDK_InteractiveLive,具体组合方式,请参考SDK选择与下载。
集成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:7.3.0' //修改x.x.x为你工程适配的版本 implementation 'com.aliyun.auikits.android:ARTCAICallKit:2.6.0' implementation 'com.squareup.okhttp3:okhttp:4.10.0' //第三方依赖库,请确认最新版本 }
说明ARTC SDK版本请到SDK下载/集成最新适配版本号。
SDK开发指南
步骤一:申请APP音视频权限
检查APP麦克风、摄像头权限,如未授权,则弹框交给用户进行授权。业务App需要您自行实现, 参考代码请参见PermissionUtils.java。
PermissionX.init(this)
.permissions(PermissionUtils.getPermissions())
.request((allGranted, grantedList, deniedList) -> {
});
步骤二:创建&初始化引擎
创建&初始化ARTCAICallEngine引擎,示例代码如下:
String userId = "123"; // userId推荐使用你的App登录后的用户id
ARTCAICallEngineImpl engine = new ARTCAICallEngineImpl(this, userId);
// 如果是数字人类型,则需要配置数字人显示的视图容器
if (aiAgentType == AvatarAgent) {
ViewGroup avatarlayer;
engine.setAgentView(
avatarlayer,
new ViewGroup.LayoutParams(ViewGroup.LayoutParams.MATCH_PARENT,
ViewGroup.LayoutParams.MATCH_PARENT)
);
}
// 如果是视觉理解类型,则需要配置本地视频预览显示的视图容器
else if (aiAgentType == VisionAgent) {
ViewGroup previewLayer;
engine.setLocalView(previewLayer,
new FrameLayout.LayoutParams(ViewGroup.LayoutParams.MATCH_PARENT,
ViewGroup.LayoutParams.MATCH_PARENT)
);
} else if(aiAgentType == VideoAgent) {
ARTCAICallEngine.ARTCAICallVideoCanvas remoteCanvas = new ARTCAICallEngine.ARTCAICallVideoCanvas();
remoteCanvas.zOrderOnTop = false;
remoteCanvas.zOrderMediaOverlay = false;
ViewGroup avatarlayer;
engine.setAgentView(
avatarlayer,
new ViewGroup.LayoutParams(ViewGroup.LayoutParams.MATCH_PARENT,
ViewGroup.LayoutParams.MATCH_PARENT), remoteCanvas
);
ViewGroup previewLayer;
engine.setLocalView(previewLayer,
new FrameLayout.LayoutParams(ViewGroup.LayoutParams.MATCH_PARENT,
ViewGroup.LayoutParams.MATCH_PARENT)
);
}
步骤三:实现回调方法
实现引擎回调,按需实现回调方法。引擎回调接口详情,请参见API接口详情。
protected ARTCAICallEngine.IARTCAICallEngineCallback mCallEngineCallback = new ARTCAICallEngine.IARTCAICallEngineCallback() {
@Override
public void onErrorOccurs(ARTCAICallEngine.AICallErrorCode errorCode) {
// 发生了错误,结束通话
engine.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, VoicePrintStatusCode voicePrintStatusCode) {
}
@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) {
// 用户上线回调
}
};
engine.setEngineCallback(mCallEngineCallback);
步骤四:创建并初始化ARTCAICallConfig
ARTCAICallConfig详情,请参见ARTCAICallConfig。
ARTCAICallEngine.ARTCAICallConfig artcaiCallConfig = new ARTCAICallEngine.ARTCAICallConfig();
artcaiCallConfig.agentId = "XXX"; //智能体ID,必填
artcaiCallConfig.region = "cn-shanghai";//智能体区域,必填
artcaiCallConfig.agentType = VoiceAgent;//定智能体的类型:纯语音、数字人、视觉理解、视频通话
engine.init(artcaiCallConfig);
地域名称 | Region Id |
华东1(杭州) | cn-hangzhou |
华东2(上海) | cn-shanghai |
华北2(北京) | cn-beijing |
华南1(深圳) | cn-shenzhen |
新加坡 | ap-southeast-1 |
步骤五:发起智能体呼叫
调用call()接口发起智能体呼叫。获取鉴权Token,请参见生成ARTC鉴权Token。在开启通话后,您可以根据您的业务需求处理字幕、打断智能体讲话等。详细内容,请参见功能实现。
engine.call(token);
//接通后,会触发以下回调
public void onCallBegin() {
// 通话开始(入会)
}
步骤六:通话中的业务实现
在开启通话后,您可以根据您的业务需求处理字幕、打断智能体讲话等。详细内容,请参见功能实现。
步骤七:通话结束,挂断智能体通话
调用handup()接口,挂断智能体通话。
engine.handup();