このトピックでは、AICallKit ソフトウェア開発キット (SDK) を使用して、オーディオおよびビデオエージェントを iOS アプリケーションに統合する方法について説明します。
前提条件
Xcode 16.0 以降。最新の公式バージョンを推奨します。
CocoaPods 1.9.3 以降
iOS 11.0 以降を実行する物理デバイス
フローチャート
お使いのアプリは AppServer からRTC トークンを取得し、call(config) メソッドを呼び出して通話を開始できます。通話中に、AICallKit API を呼び出して、AI エージェントのライブ字幕や割り込みなどのインタラクティブな機能を実装できます。AICallKit はリアルタイムのオーディオおよびビデオ機能に依存しているため、ApsaraVideo リアルタイム音声・映像 (ARTC) の機能が AICallKit SDK に統合されています。ビジネスシナリオでライブストリーミングおよび VOD 機能が必要な場合は、ApsaraVideo MediaBox SDK の使用を検討してください。詳細については、「SDK の選択とダウンロード」をご参照ください。
SDK の統合
target 'YourTarget' do
# ApsaraVideo リアルタイム音声・映像機能のために 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 を有効にします。これを強く推奨します。このモードを有効にしない場合、アプリケーションがバックグラウンドに入った後に通話を続行できません。この場合、アプリは通話を終了する必要があります。
SDK 開発ガイド
ステップ 1: アプリのマイクとカメラの権限を確認する
アプリのマイクとカメラの権限を確認します。権限が付与されていない場合は、ダイアログボックスを表示してユーザーに権限付与を求めます。この機能はアプリに実装する必要があります。詳細については、「AVDeviceAuth.h」をご参照ください。
ステップ 2: エンジンを作成して初期化する
ARTCAICallEngine インスタンスを作成して初期化します。次のコードに例を示します。
// エンジンインスタンスを作成します。
let engine = ARTCAICallEngineFactory.createEngine()
let agentType: ARTCAICallAgentType
// エンジンインスタンスを初期化します。
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)
}
}ステップ 3: コールバックメソッドを実装する
必要なエンジンコールバックメソッドを実装します。エンジンコールバック操作の詳細については、「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) {
// 現在の通話で音声割り込みが有効になっているかどうか。
}ステップ 4: ARTCAICallConfig を作成して初期化する
ARTCAICallConfig の詳細については、「ARTCAICallConfig」をご参照ください。
let callConfig = ARTCAICallConfig()
callConfig.agentId = "xxx" // エージェント ID。
callConfig.agentType = self.agentType // エージェントタイプ。
callConfig.userId = "xxx" // アプリにログインしているユーザーの ID を使用します。
callConfig.region = "xx-xxx" // エージェントサービスが配置されているリージョン。
callConfig.userJoinToken = "xxxxxxxxx" // RTC トークン。
// 視覚理解およびビデオ通話の場合、ビデオ構成を設定する必要があります。
// この例では、frameRate は 5 に設定されています。この値は、コンソールで構成され、通常は 2 であるエージェントのフレームサンプリングレートに基づいて調整してください。フレームレートを 15 fps より大きい値に設定しないでください。
// 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)
}
リージョン名 | リージョン ID |
中国 (杭州) | cn-hangzhou |
中国 (上海) | cn-shanghai |
中国 (北京) | cn-beijing |
中国 (深セン) | cn-shenzhen |
シンガポール | ap-southeast-1 |
userJoinToken パラメーターについては、RTC トークンを取得する必要があります。詳細については、「ARTC 認証トークンを生成する」をご参照ください。
ステップ 5: エージェントへの通話を開始する
call(config) メソッドを呼び出して、エージェントへの通話を開始します。
// エージェントが開始したら、通話を開始します。
public func start() {
let callConfig = ... // 前のコードに基づいて callConfig オブジェクトを作成します。
if self.engine.call(config: callConfig) {
// API 操作は正常に呼び出されます。
}
}
// 通話が接続されると、次のコールバックがトリガーされます。
public func onCallBegin() {
// 通話が開始されました。
}ステップ 6: 通話中の機能を実装する
通話が開始された後、必要に応じて字幕の処理、エージェントへの割り込み、その他の操作を実行できます。詳細については、「機能を実装する」をご参照ください。
ステップ 7: 通話を終了する
hangup() メソッドを呼び出して、エージェントとの通話を終了します。
public func handup() {
self.engine.handup()
}