全部產品
Search
文件中心

Intelligent Media Services:整合概覽

更新時間:Nov 11, 2025

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

環境要求

  • Xcode 16.0 及以上版本,推薦使用最新正式版本

  • CocoaPods 1.9.3 及以上版本

  • 準備 iOS 11.0 及以上版本的真機

商務程序

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

整合SDK

target '你的Target' do

  # 依賴即時音視頻能力,引入AliVCSDK_ARTC或AliVCSDK_Standard或AliVCSDK_InteractiveLive
  pod 'AliVCSDK_ARTC', '~> x.x.x'
  # 引入AICallKit SDK
  pod 'ARTCAICallKit', '~> x.x.x'
  
  ...

end
說明
  • ARTC SDK最新版本:7.8.0

  • AICallKit SDK最新版本:2.9.0

工程配置

  • 添加麥克風與網路攝影機許可權,開啟工程info.Plist,添加NSMicrophoneUsageDescription和NSCameraUsageDescription許可權。

  • 開啟工程設定,在Signing & Capabilities中開啟Background Modes,強烈推薦開啟後台模式,否則在進入後台後無法繼續通話,這時候在您的APP中需要調用結束通話介面。

SDK開發指南

步驟一:檢查APP麥克風、網路攝影機許可權

檢查APP麥克風、網路攝影機許可權,如未授權,則彈框交給使用者進行授權。業務App需要您自行實現, 參考代碼請參見AVDeviceAuth.h

步驟二:建立&初始化引擎

建立&初始化ARTCAICallEngine引擎,範例程式碼如下:

// 建立engine執行個體
let engine = ARTCAICallEngineFactory.createEngine()
let agentType: ARTCAICallAgentType

// 初始化engine執行個體
public func setup() {
    // 設定回調
    self.engine.delegate = self

    // 如果是數字人類型,則需要配置數字人顯示的視圖配置
    if self.agentType == .AvatarAgent {
        let agentViewConfig = ARTCAICallViewConfig(view: self.avatarAgentView)
        self.engine.setAgentViewConfig(viewConfig: agentViewConfig)
    }
    // 如果是視覺理解類型,則需要配置本地視頻預覽配置
    else if self.agentType == .VisionAgent {
        let cameraViewConfig = ARTCAICallViewConfig(view: self.cameraView)
        self.engine.setLocalViewConfig(viewConfig: cameraViewConfig)
    }
    // 如果是視訊通話類型,則需要配置數字人顯示的視圖配置+本地視頻預覽配置
    else if self.agentType == .VideoAgent {
        let agentViewConfig = ARTCAICallViewConfig(view: self.avatarAgentView)
        self.engine.setAgentViewConfig(viewConfig: agentViewConfig)

        let cameraViewConfig = ARTCAICallViewConfig(view: self.cameraView)
        self.engine.setLocalViewConfig(viewConfig: cameraViewConfig)
    }
}

步驟三:實現回調方法

實現引擎回調,按需實現回調方法。引擎回調介面詳情,請參見API介面詳情

// 回調處理(僅樣本不分核心的回調操作)
public func onErrorOccurs(code: ARTCAICallErrorCode) {
    // 發生了錯誤
    self.engine.handup()
}

public func onCallBegin() {
    // 通話開始
}

public func onCallEnd() {
    // 通話結束
}

public func onAgentStateChanged(state: ARTCAICallAgentState) {
    // 智能體狀態改變
}

public func onUserSubtitleNotify(text: String, isSentenceEnd: Bool, sentenceId: Int) {
    // 使用者提問被智能體識別結果的通知
}

public func onVoiceAgentSubtitleNotify(text: String, isSentenceEnd: Bool, userAsrSentenceId: Int) {
    // 智能體回答結果通知
}

public func onVoiceIdChanged(voiceId: String) {
    // 當前通話的音色發生了改變
}

public func onVoiceInterrupted(enable: Bool) {
    // 當前通話的語音打斷是否啟用
}

步驟四:建立並初始化ARTCAICallConfig

ARTCAICallConfig詳情,請參見ARTCAICallConfig

let callConfig = ARTCAICallConfig()
callConfig.agentId = "xxx"             // 智能體Id
callConfig.agentType = self.agentType  // 智能體類型
callConfig.userId = "xxx"              // 推薦使用你的App登入後的使用者id
callConfig.region = "xx-xxx"           // 智能體服務所在的地區
callConfig.userJoinToken = "xxxxxxxxx" // RTC Token

// 針對視覺理解&視訊通話,需要設定視頻配置
// 這裡frameRate設定為5,需要根據控制台上的智能體的抽幀率(一般為2)進行調整,最大不建議超過15fps
// bitrate: frameRate超過10可以設定為512
if self.config.agentType == .VisionAgent{
    callConfig.videoConfig = ARTCAICallVideoConfig(frameRate: 5, bitrate: 340, useFrontCameraDefault: false)
}
if self.config.agentType == .VideoAgent {
    callConfig.videoConfig = ARTCAICallVideoConfig(frameRate: 5, bitrate: 340, useFrontCameraDefault: true)
}
                

地區名稱

Region Id

華東1(杭州)

cn-hangzhou

華東2(上海)

cn-shanghai

華北2(北京)

cn-beijing

華南1(深圳)

cn-shenzhen

新加坡

ap-southeast-1

userJoinToken需要您擷取RTC Token,詳情請參見產生ARTC鑒權Token

步驟五:發起智能體呼叫

調用call(config)介面發起智能體呼叫。

// 啟動智能體後,開始通話
public func start() {
    let callConfig = ...   // 參考上面代碼產生callConfig對象
    if self.engine.call(config: callConfig) {
        // API被成功調用
    }
}


//接通後,會觸發以下回調
public func onCallBegin() {
    // 通話開始
}

步驟六:通話中的業務實現

在開啟通話後,您可以根據您的業務需求處理字幕、打斷智能體講話等。詳細內容,請參見功能實現

步驟七:通話結束,掛斷智能體通話

調用handup()介面,掛斷智能體通話。

public func handup() {
    self.engine.handup()
}