全部產品
Search
文件中心

Intelligent Media Services:整合概覽

更新時間:Dec 25, 2025

本文將介紹如何通過AICallKit SDK整合音視頻智能體到您的Android應用中。

環境要求

  • Android Studio 外掛程式版本4.1.3

  • Gradle 7.0.2

  • Android Studio內建JDK11

商務程序

image

您的App通過AppServer(你的商務服務器)擷取RTC Token,便可調用call(config)方法進入通話,在通話過程中,可以調用AICallKit的API實現智能體的即時字幕、打斷等互動功能。AICallKit依賴於即時音視頻能力,因此在內部已實現AliVCSDK_ARTC SDK的相關功能。如果您的業務情境還需要用到直播與點播能力,可以使用音視頻終端組合SDK,例如AliVCSDK_StandardAliVCSDK_InteractiveLive,具體組合方式,請參考SDK選擇與下載

整合SDK

  1. 在專案級build.gradle專案檔中添加阿里雲Maven倉庫。

    allprojects {
        repositories {
            google()
            jcenter()
            maven { url 'https://maven.aliyun.com/repository/google' }
            maven { url 'https://maven.aliyun.com/repository/public' }
        }
    }
  2. 在相應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();