このセクションでは、AOQ で Qwen-Audio-ASR-Streaming にアクセスするための認証、メディア設定、接続確立、タスクイベントの処理フローを説明します。
AOQ で Qwen-Audio-ASR-Streaming にアクセスする場合、クライアントは Audio トラックで音声をアップロードし、Data トラックでタスクイベントの送信と認識結果の受信を行います。
AppServer に環境変数
Token Plan を使用する場合、アクセスドメインの
次の JSON を UTF-8 にシリアライズし、
録音の終了後、新しい音声のキャプチャを停止し、送信待ち音声の送信を待ちます。
接続が不要になったら、
前提条件
qwen-audio-3.1-asr-flash-streamingまたはqwen-audio-3.0-asr-flash-streamingを使用します。詳細な対応範囲は、モデルとプロトコルの対応範囲をご覧ください。- リージョンとワークスペースを一致させ、業務 AppServer で API キーを設定して使用します。
- SDK からプラットフォーム用の AOQ SDK をダウンロードして導入します。以下では Android Java と Opus 転送を例に説明するため、Opus プラグインも導入してください。マイクで音声をキャプチャする場合は、クライアント側で録音権限を要求します。
1. 接続認証情報の取得
トークンを事前取得する場合や認証フロー全体を確認する場合は、接続認証の詳細を参照してください。
DASHSCOPE_API_KEY を設定し、{endpoint} を選択したリージョンとワークスペースのエンドポイントに置き換えます。Qwen-Audio-ASR-Streaming は Inference 接続パスを使用します。次の例は qwen-audio-3.1-asr-flash-streaming を使用します。
WorkspaceId は token-plan 固定です。リクエストボディの clientIp は任意です。クライアントの実際のパブリック IP アドレスを入力すると、ゲートウェイが Relay アクセスポイントを選択できます。未入力の場合は、リクエストの送信元 IP を使用します。
API キーは AppServer にのみ保存します。AppServer は次の表の接続パラメーターをクライアントに返します。レスポンスの sidExpiresInSecs は、秒単位のセッション有効期間を示します。
| ゲートウェイのレスポンスフィールド | AoqConnectConfig のフィールド |
|---|---|
aoqTokenForClient | token |
sid | sid |
clientRelayCertFingerprint | certFingerprint |
clientRelayEndpoints | relayEndpoints。endpoint、port、route_index を項目ごとに変換 |
extraInfo.workspaceIdHash | workspaceIdHash |
2. SDK の初期化と接続
AoqCreateConfig で SDK の作業ディレクトリを設定し、AoqClientEngine.createEngine を呼び出してエンジンを作成し、コールバックを登録します。onConnectionStatusChange で接続状態を、onDataMsg でモデルイベントを、onError で SDK エラーを処理します。エンジン初期化と接続フィールドの完全な API リファレンスは、Android SDKをご覧ください。
AppServer が返した認証情報を connectConfig に設定したら、Audio トラックと Data トラックを配信し、Data トラックを購読します。次の例は 16 kHz モノラル Opus エンコードと内蔵キャプチャを設定し、接続確立中は Audio トラックの送信を無効にします。モデルの入力形式はタスクイベントで指定し、SDK のエンコード設定はメディアトラックの転送に使用します。
onConnectionStatusChange が AoqConnectionStatusConnected を返すのを待ってから、タスクを開始します。接続異常時はローカルのタスク状態を消去します。再接続には、新しい接続認証情報の取得が必要です。
3. 認識タスクの開始とイベントの処理
次の JSON を UTF-8 にシリアライズし、AoqDataMsg.data に書き込んで、sendDataMsg で Data トラックから送信します。タスクごとに新しい task_id を生成し、このラウンドのすべてのイベントで同じ値を使用します。
onDataMsg で header.event を読み取ります。上り音声は task-started を受信してから送信できます。
result-generated の payload.output.sentence から認識テキストを読み取り、heartbeat=true のハートビートはスキップします。sentence_end=false は中間テキスト、sentence_end=true は文の最終テキストを示します。sentence_id に従って同じ文のテキストを更新します。task-failed を受信したら、このラウンドの上り送信を停止し、header.error_code と header.error_message を読み取ります。
タスクパラメーターとイベントフィールドは、クライアントイベントとサーバーイベントをご覧ください。
4. タスクの終了とリソースの解放
録音の終了後、新しい音声のキャプチャを停止し、送信待ち音声の送信を待ちます。enableSendMediaStream を呼び出して Audio トラックの上り送信を閉じ、Data トラックで finish-task を送信します。接続を維持して残りの認識結果を受信し、task-finished を待ちます。
stopAudioCapture、disconnect、AoqClientEngine.destroy の順に呼び出してリソースを解放します。