本文將介紹如何通過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_Standard或AliVCSDK_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'
...
endARTC 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()
}