本文將介紹如何通過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:x.x.x' //修改x.x.x為你工程適配的版本 implementation 'com.aliyun.auikits.android:ARTCAICallKit:x.x.x' implementation 'com.alivc.live.component:PluginAEC:2.0.0' }說明ARTC SDK最新版本:7.9.1;
AICallKit SDK最新版本:2.9.1。
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();