本文檔說明如何在 Android、iOS、HarmonyOS 平台接入 AOQ Client SDK,實現 AOQ+qwen3.5-omni-plus-realtime 音視訊通話功能。
SDK 擷取
AOQ Client SDK 及音頻 Opus 外掛程式請參見SDK下載。Opus 編碼以獨立外掛程式形式提供,請根據您的情境按需引入。
SDK 匯入
請根據不同平台將核心 SDK 產物匯入工程依賴目錄,並在工程配置中聲明相關許可權。
Android
將 AoqClientSdk-release.aar 放入工程 app/libs/ 目錄,將 libPluginOpus.so 按 ABI 放入 app/libs/armeabi-v7a/ 和 app/libs/arm64-v8a/,並在 app/build.gradle 中:
AndroidManifest.xml 聲明許可權:
RECORD_AUDIO 和 CAMERA 為運行時許可權,應用需在運行時調用 Android ActivityCompat.requestPermissions() 方法,主動向 Android 系統申請使用者授權。
iOS(framework)
-
將
AoqClientSdk.framework與PluginOpus.framework拖入 Xcode 工程,在 Target > General > Frameworks, Libraries, and Embedded Content 中選擇 Embed & Sign。 -
許可權聲明:在 Xcode 中選中您的 Target > Info > Custom iOS Target Properties,添加以下兩項許可權用途描述:
Key
Value
NSMicrophoneUsageDescription用於即時語音通話
NSCameraUsageDescription用於即時視訊通話
-
Swift 工程:
import AoqClientSdk;Objective-C 工程:#import <AoqClientSdk/AoqClientSdk.h>。
HarmonyOS(har)
- 將
aoq-client-sdk.har放入工程libs/目錄,將libPluginOpus.so按 ABI 放入entry/libs/armeabi-v7a/和entry/libs/arm64-v8a/;並在entry/oh-package.json5中聲明。 - 在
entry/src/main/module.json5添加許可權:
- 在
EntryAbility中通過abilityAccessCtrl.createAtManager().requestPermissionsFromUser觸發運行時授權。
體驗 Demo
阿里雲百鍊提供適用於 Android 平台的 Demo,可用於快速驗證 AOQ 接入效果。下載 APK 並配置 API Key 和 workspaceId 後,即可體驗部分模型。
掃描以下二維碼下載並安裝 Android Demo:

AppServer擷取Token
請按照Token鑒權的 AOQ 章節搭建擷取 Token 的 AppServer。每次通話前,用戶端需要向業務側 AppServer 請求一次 Token。
實現 AI 音視訊通話
建立引擎並設定回調
調用 createEngine 介面建立 AoqClientEngine 執行個體。
iOS:
AoqEngineDelegate 協議監聽 onConnectionStatusChange、onDataMsg、onError 等回調。
Android:
啟動音視頻採集與播放
調用 startAudioCapture 與 startAudioPlayer 啟動本地音頻採集與播放;調用 startVideoCapture 啟動網路攝影機,並通過 setLocalView 將 SDK 渲染目標綁定到業務側的預覽處理常式。
iOS:
擷取串連憑證
由業務 AppServer 代理百鍊請求,參見Token鑒權。
設定編解碼及建立串連
設定編解碼參數後調用 connect。
注意:qwen3.5-omni-plus-realtime 要求用戶端在收到服務端的 session.updated 之後才能開始發送媒體資料。為避免 connect 建聯成功到 session.updated 到達之間的空檔期誤推媒體,在 connect 之前對上行音頻與視頻軌道分別調用 enableSendMediaStream(trackType, false),將上行推流暫時關閉。WebSocket事件說明詳見用戶端事件。
iOS:
配置 AI 會話
在 onConnectionStatusChange(Connected) 回調中通過 sendDataMsg 發送 session.update 訊息(業務自訂 JSON,包含 modalities、voice、instructions、turn_detection 等會話參數),完成會話握手,WebSocket事件說明詳見用戶端事件。
iOS:
收到 session.updated 後開啟媒體發送
在 onDataMsg 回調中解析下行訊息,收到模型回複 session.updated 的時候,對上一步禁推的每個軌道類型調用 enableSendMediaStream(trackType, true) 放開推流。下面為程式碼範例,WebSocket事件說明詳見服務端事件。
iOS:
中斷連線與銷毀引擎
典型情境
打斷(Barge-in)
- SDK 與百鍊深度融合,支援百鍊模型的打斷訊息會在新一輪對話開始時打斷上一輪次。
- SDK 提供本地播放器打斷介面
interruptAudioPlayer,當使用者主動需要停止時可以調用打斷 API 實現此功能。
靜音 / 取消靜音
靜音後 SDK 仍在採集音頻,但只推送靜音幀,session 不會中斷。
切換前後網路攝影機
通話字幕與ASR結果顯示
服務端通過下行資料訊息推送 ASR 結果與 AI 文本回複。業務側在 onDataMsg 回調中根據 type 欄位分流即可。WebSocket事件說明詳見服務端事件。
注意事項
-
單例語義:
createEngine是單例,重複調用返回同一執行個體;destroy後才能重新建立。多頁面共用建議在 Application/Ability 級管理引擎生命週期。 -
本地預覽 View 類型:
- Android:
SurfaceView或TextureView;其它類型不支援。 - iOS:任意
UIView子類。 - HarmonyOS:請參考 SDK 文檔。
- Android:
-
音頻路由變化:耳機插拔、藍芽串連等會觸發
onAudioDeviceRouteChanged,業務側通常無需處理;如果 UI 上顯示"擴音器/耳機"開關,需要根據該回調同步狀態。 -
後台續傳:如需通話切到後台後繼續傳音頻,
Info.plist必須開啟UIBackgroundModes = audio,並在前台時正確啟用AVAudioSession(SDK 會處理大部分情況,業務側用setAudioSessionRestriction:可精細控制是否讓 SDK 接管)。
iOS Demo 源碼
