すべてのプロダクト
Search
ドキュメントセンター

Alibaba Cloud Model Studio:AOQ 接続

最終更新日:Sep 29, 2026

AOQ クライアント SDK の認証情報取得、初期化、メディア方向の設定、接続、モデルイベント交換、リソース解放の手順を説明します。

AOQ は音声、映像、モデルイベントを別々のトラックで転送します。SDK はメディアのキャプチャ、エンコード、デコード、転送、再生を処理します。アプリケーションは Data トラックでモデルイベントを送信し、応答を処理します。対象モデルに必要なメディア方向とイベントプロトコルを選択してください。

前提条件

  • 接続の概要の準備を完了し、対象モデル、リージョン、AOQ 対応状況を確認します。

  • SDK のダウンロードからプラットフォームに対応する SDK をインポートします。Opus を使用する場合は対応するプラグインもインポートします。

  • アプリケーションサーバー (AppServer) にトークン認証を実装します。API キーは AppServer に保持し、クライアントには一時的な接続認証情報を渡します。

注記マイクやカメラの権限は、キャプチャが必要な場合にのみ要求します。たとえば、音声合成にはどちらの権限も不要です。

処理フロー

AOQ 接続シーケンス図
  1. AppServer 経由で接続認証情報を取得します。
  2. SDK エンジンを作成し、コールバックを登録します。
  3. メディアトラックと Data トラックを設定し、上りメディアの送信を無効にします。
  4. AOQ 接続を開始し、接続完了を待ちます。
  5. モデルのプロトコルに従って設定します。確認後、必要な上りメディアを有効にします。
  6. 対話が終了したら切断し、リソースを解放します。

注記

  • AOQ SDK はメディアのキャプチャ、処理、送信、受信、再生を担当します。アプリケーションは対象モデルのイベント定義に従って Data メッセージを送受信する必要があります。

  • 接続成功はモデルへのトランスポートチャネルの確立を意味します。音声の設定などの事前操作が必要な場合は、モデルの設定を完了してからメディアを送信してください。たとえば、Realtime モデルでは session.updated、Inference モデルでは task-started を待つ必要があります。クライアントはモデルの初期化成功後にのみ、必要な上りメディアを有効にできます。

1. 接続認証情報の取得

クライアントは AppServer に認証情報を要求します。AppServer は対象モデルに応じて Realtime または Inference の接続エンドポイントを選択し、API キーと x-dashscope-rtc-transport: moq ヘッダーをゲートウェイに送信します。エンドポイント、リクエスト、フィールドについてはトークン認証を参照してください。

応答を AoqConnectConfig に対応付けます。

ゲートウェイの応答SDK 設定
aoqTokenForClienttoken
sidsid
clientRelayCertFingerprintcertFingerprint
clientRelayEndpointsrelayEndpoints:各エンドポイントを必要な構造に変換
extraInfo.workspaceIdHashworkspaceIdHash

新しい接続ごとに新しい認証情報を取得してください。同じ接続でセッションを再利用したり、別のタスクを開始したりできるかどうかは、対象モデルのプロトコルに依存します。

2. SDK の初期化とコールバックの登録

エンジンを作成し、接続状態、Data メッセージ、エラーのコールバックを登録します。以下は iOS の Swift の例です。

let createConfig = AoqCreateConfig()
createConfig.workDir = workDir
createConfig.enableDumpAudio = false
engine = AoqClientEngine.createEngine(createConfig, delegate: self)

AoqEngineDelegate を実装します。onConnectionStatusChange で接続状態を管理し、onDataMsg でモデルイベントを解析し、onError で SDK エラーを処理します。モデルのエラーイベントは Data メッセージのハンドラーで別途処理してください。SDK インターフェイスとエラーについては AOQ クライアント SDK を参照してください。

3. SDK の設定

メディア方向の選択

方向はクライアントから見たものです。アプリケーションに必要な入力と出力のモダリティだけを設定し、使用しない方向のトラックは追加しないでください。

方向設定主な用途
音声送信Audio トラックを発行し、エンコーダーを設定して、内蔵または外部キャプチャを使用音声認識、会話、翻訳
音声受信Audio トラックを購読し、デコーダーを設定して、内蔵または外部再生を使用音声合成、音声応答
映像送信Video トラックを発行し、カメラまたは外部入力とエンコードを設定視覚入力対応モデルに画像を提供
映像受信対象モデルまたはアプリケーションが映像出力を明示的にサポートする場合のみ、購読と受信を設定対象モデルまたはアプリケーションのドキュメントに従う

Data トラックは、この 4 方向とは独立しています。モデルイベントの送信用に Data トラックを発行し、応答を受信するために購読します。テキストの入出力にも Data トラックが必要です。

モデルに応じた方向の選択

以下に代表的な設定を示します。対応モデルとバージョンは Realtime API の概要およびモデルのドキュメントを参照してください。

モデルまたはアプリケーション音声送信音声受信映像送信映像受信
Qwen-Omni-Realtime音声入力時音声応答時視覚入力時非対応
Qwen-Audio-Realtime音声会話時音声応答時非対応非対応
Qwen-Audio-TTS, CosyVoice非対応有効非対応非対応
Qwen-Audio-ASR-Streaming有効非対応非対応非対応
Fun-ASR-Realtime有効非対応非対応非対応
Qwen-LiveTranslate-Realtime音声入力時音声翻訳出力時バージョンとシナリオに依存非対応
multimodal-dialogアプリケーションの入力に応じるアプリケーションの出力に応じるアプリケーションの機能に応じるアプリケーションが明示的にサポートする場合のみ

メディアパラメーターとトラックの設定

上り音声と下り音声を別々に設定します。上りには setAudioEncoderConfig、下りには setAudioDecoderConfig を使用します。これらはネットワーク転送を制御するパラメーターで、ゲートウェイがモデルに必要な形式に音声を変換します。転送時のエンコードは SDK の要件に、モデルイベント内の音声形式は対象モデルの要件に従って設定してください。

必要に応じて startAudioCapture、startAudioPlayer、startVideoCapture を開始します。カスタム入出力については後述の高度な機能を参照してください。

publishTracks はクライアントが送信するトラック、subscribeTracks はクライアントが受信するトラックです。

シナリオpublishTrackssubscribeTracks
音声会話Audio, DataAudio, Data
視覚入力を伴う音声会話Audio, Video, DataAudio, Data
音声認識Audio, DataData
音声合成DataAudio, Data

モデルの準備前に入力が届かないよう、接続前に上りメディアを無効にします。

engine.enableSendMediaStream(.audio, enable: false)
engine.enableSendMediaStream(.video, enable: false)

キャプチャ、トラック発行、送信許可は別々の操作です。送信を無効にしてもローカルのキャプチャは停止せず、Data イベントにも影響しません。送信を有効にしても、未追加のトラックが作成されるわけではありません。

4. 接続の確立

認証情報とトラック設定を AoqConnectConfig に設定し、次を呼び出します。

engine.connect(connectConfig)

onConnectionStatusChange で .connected を受け取ってからモデルを初期化します。connect の呼び出しが戻っただけでは接続成功を意味しません。

5. モデルイベントとメディアの交換

モデルイベントの送信と解析

Data トラックでイベントを送信します。以下は iOS の Swift の例です。

// Build eventJSON according to the target model client event protocol.
let msg = AoqDataMsg()
msg.data = eventJSON.data(using: .utf8)!
engine.send(msg)

onDataMsg で応答を解析します。すべてのイベントが type を使用すると想定しないでください。Realtime イベントは通常 type、Inference のサーバーイベントは header.event を使用します。フィールド、パラメーター、完了条件は対象モデルのドキュメントに従ってください。

モデルの準備完了後にメディアを有効化

現在のモデル、セッション、タスクの準備完了条件を満たした後、設定済みの上り方向だけを有効にします。音声入力の場合は次を呼び出します。

engine.enableSendMediaStream(.audio, enable: true)

映像入力が必要な場合のみ .video を有効にします。TTS はテキスト入力を使用するため、上り音声や映像は不要です。

音声と映像はそれぞれのメディアトラックで、モデルイベントとテキストは Data トラックで送信します。たとえば AOQ 経由の Omni では、同じメディアを input_audio_buffer.append や input_image_buffer.append で再送する必要はありません。下り音声は設定済みプレーヤーまたは外部再生ロジックで処理します。

6. 対話の終了とリソースの解放

接続が不要になったら、アプリケーションから AOQ SDK の切断とリソース解放のインターフェイスを呼び出します。

engine.disconnect()
AoqClientEngine.destroy()

予期しない切断後はアプリケーションの準備完了状態をクリアし、接続状態の管理に従ってください。再接続後はモデルを再初期化します。

Data トラックでのイベント送受信

接続時に Data トラックを発行、購読します。送信時はイベントを AoqDataMsg にシリアライズして engine.send(msg) を呼び出します。受信メッセージは onDataMsg で解析します。

送信するイベント名、フィールド、パラメーター、タイミングは対象モデルのクライアントイベント定義に従ってください。応答の解析、状態変化、結果、エラーはサーバーイベント定義に従います。モデルに必要な初期化イベントを送り、その後はアプリケーションに必要なテキストや制御イベントを送信します。

モデルまたはアプリケーションクライアントイベント (送信)サーバーイベント (受信)
Qwen-Omni-Realtimeクライアントイベントサーバーイベント
Qwen-Audio-Realtimeクライアントイベントサーバーイベント
Qwen-Audio-TTS, CosyVoiceクライアントイベントサーバーイベント
Qwen-Audio-ASR-Streamingクライアントイベントサーバーイベント
Fun-ASR-Realtimeクライアントイベントサーバーイベント
Qwen-LiveTranslate-Realtimeクライアントイベントサーバーイベント
multimodal-dialog対話プロトコルの Input Message対話プロトコルの Output Message

マルチモーダル対話スイートでは 1 つの対話プロトコルに両方向を定義しています。実際に使用するモデルバージョンのイベント定義を選択してください。すべてのモデルに共通する固定のイベントスキーマはありません。

次のルールにも従ってください。

  • モデルに応じてイベント種別と相関 ID を識別します。Realtime は通常 type、Inference クライアントは header.action、サーバーは header.event を使用し、タスクは task_id で関連付けます。

  • 初期化確認、入力送信、応答キャンセル、タスク完了は、プロトコルに従って Data トラックで処理します。これらはトランスポート接続を閉じる操作とは異なります。

  • たとえば Inference モデルでは finish-task でタスクを終了し、task-finished で完了を確認します。残りの結果を受信してから接続を解放してください。最後まで再生する必要がある場合は、ローカルに残っている音声の再生完了も待ちます。

  • メディアにはメディアトラックを使用します。モデルイベントのドキュメントを参照する場合も、メディア転送と利用可能な対話モードはこの AOQ ページに従い、WebSocket のメディアアップロード方式をコピーしないでください。

高度な機能

機能用途ドキュメント
音声と映像の送信を個別制御モデルの準備完了待ち、上りメディアの一時停止、必要に応じた映像の有効化メディア送信の管理
音声デバイスと処理エンコード、デコード、スピーカー、ファイルミキシング、音声フレームのコールバック一般的な音声機能
外部音声入力アプリケーションが提供する音声ソースの使用カスタム音声キャプチャ
外部音声出力アプリケーションで出力音声を処理または再生カスタム音声再生
映像キャプチャと入力カメラまたはアプリケーションが提供する画像の使用一般的な映像機能, カスタム映像入力

メディア送信の制御はメディアのみに作用します。モデル応答のキャンセルやターンの送信には、対象モデルのイベントが引き続き必要です。

ベストプラクティス