オーディオ・コネクター
Audio Connectorを使用すると、Vonage Videoのライブ・セッションから生のオーディオ(PCM 16 khz/16bit)ストリームを送信できます。 AWS、GCP、Azureなどの外部サービスに送信することができます。 および分析することができます。
Audio Connectorを使用すると、オーディオストリームを個別に、または混合して送信することができます。複数のWS接続を開き、オーディオストリームを個別に送信することで、スピーカーを特定することができます。
音声ストリームをリアルタイムかつオフラインでさらに処理することで、次のような機能を構築できます。 キャプション、トランスクリプション、翻訳、検索、インデックス、コンテンツモデレーションなどの機能を構築できます、 メディアインテリジェンス、電子カルテ、センチメント分析など。
Audio Connectorを使用して、WebSocket接続を以下のように使用することもできます。 OpenTokセッションに音声を配信する.
Audio Connector は、すべてのプロジェクトでデフォルトで有効になっており、使用ベースの製品です。 Audio Connector の使用は、WebSocket サーバーに送信された参加者(またはストリーム ID)のオーディオストリームの数に基づいて課金されます。 に応じて課金されます。Audio Connector 機能は、以下の場合にのみサポートされます。 ルーティングされたセッションでのみサポートされます。 OpenTok メディアルーター). 一度に1つのセッションから最大50のオーディオストリームを送信できます。

注: WebSocketサーバーへの接続が6秒以内に確立されない場合、Connect APIの呼び出しは失敗します。
このページには以下のセクションがあります:
WebSocket接続の開始
Audio Connector WebSocket 接続を開始するには OpenTok REST API.
また、OpenTokサーバーSDKを使用して、Audio ConnectorのWebSocket接続を開始することもできます:
- Java
OpenTok.connectAudioStream()メソッドを使用する。 - ノード
opentok.websocketConnect()メソッドを使用する。 - PHP
OpenTok->connectAudio()] メソッド。 - Python
opentok.connect_audio_to_websocket()メソッドを使用する。 - ルビー
opentok.websocket.connect()方法 - .NET
OpenTok.StartBroadcast()方法
詳しくは Audio Connector REST API ドキュメント.
カスタムヘッダ(HTTPおよびWebSocket)
RESTまたはサーバーSDK経由でWebSocket接続を開始すると、WebSocketにアップグレードするためのHTTP接続要求がWebSocketに送信されます。 接続リクエストをWebSocketにアップグレードするために、WebSocketサーバーに送信されます。 サーバーに送信されます。
最初のHTTPアップグレードの間、WebSocketサーバーへのHTTPリクエスト・ヘッダには以下が含まれます:
x-opentok-ws-conferenceid:会議 ID を設定します;x-opentok-ws-connectionid:接続IDを設定する;x-opentok-ws-sessionid:セッションIDを設定する。
さらに headers これらのヘッダーは、接続のフェーズによって動作が異なります。これらのヘッダーは、接続のフェーズによって動作が異なります:
-
最初のHTTPアップグレードの間: 提供されたヘッダーはすべて、HTTPリクエスト・ヘッダーとしてWebSocketサーバーに送信されます。
-
WebSocketが確立された後: ヘッダーはテキストベースの WebSocket コントロールメッセージにテキストブロックとして含まれます。これには以下が含まれます:
- 最初の
websocket:connectedというメッセージを送った; - について
websocket:media:updateメッセージ(オーディオがアクティブまたは非アクティブになったとき); - について
websocket:clearedというメッセージを送った; - について
websocket:notifyというメッセージを送った; - 最後の
websocket:disconnectedというメッセージを送った。
ヘッダー・キーは以下の通り。 正規化 を従来のHTTPヘッダーのケーシングに置き換えた、
X-CUSTOM-HEADERになる。X-Custom-Header).ヘッダーキーは大文字小文字を区別して扱わない。 - 最初の
-
例外だ: バッファクリア確認 (
{"event":"websocket:cleared"})はカスタムヘッダを含みません。これはAudioConnectorの次のリリースで修正する予定です。 -
バイナリオーディオフレーム: これらはオーディオデータのみを含み、ヘッダーは含まない。
-
特別な取り扱い
x-opentok-ws*ヘッダである: ヘッダキーの先頭にx-opentok-wsはHTTPハンドシェイクでのみ使用され、テキスト・メッセージでエコーされるJSONペイロードからは削除される。
について CUSTOM-HEADER-* 以下のメッセージ例に示されているプロパティは headers プロパティは、接続開始時に提供される。
カスタムヘッダーは512バイトに制限されています。 headers ウェブソケット・オブジェクト。シリアライズされたサイズが512バイトを超えると、接続リクエストは失敗します。
WebSocketメッセージ
最初のメッセージ
確立されたWebSocket接続で送信される最初のメッセージは、テキストベースでJSONペイロードを含み、それには event フィールドを websocket:connectedのオーディオ・フォーマットの詳細が表示されます。 content-type に入れた他のメタデータと一緒に。 headers プロパティを使用します。その headers プロパティはメッセージの JSON ペイロードには存在しないため、プロパティは JSON のトップ・レベルにあります。例えば
{
"content-type":"audio/l16;rate=16000",
"event": "websocket:connected",
"CUSTOM-HEADER-1": "value-1",
"CUSTOM-HEADER-2": "value-2"
}
オーディオ・メッセージのフォーマット
デフォルトでは、Audio ConnectorはWebSocket上で生のバイナリPCM 16ビットフレームとしてオーディオを送受信します。
一部のAIベンダー(例えば、OpenAI Realtime API)は、base64エンコーディングでJSONメッセージ内にラップされたオーディオを期待します。
オーディオを再フレーム化するためにプロキシを実行する代わりに audioTransport 財産
での websocket オブジェクトを作成します。 オーディオコネクタの開始.
トランスポート・コンフィギュレーション・フォーマット
について audioTransport valueは、以下のフィールドを持つJSONオブジェクトである:
| Field | Required | Description |
|---|---|---|
transport |
Yes | "binary" (raw PCM16 — the default) or "json". |
encoding |
When transport is "json" |
"base64". The encoding used for the audio payload inside the JSON message. |
audio_field |
No | The JSON key that holds the outbound audio data. Defaults to "audio". |
receive_audio_field |
No | The JSON key for inbound audio data (when bidirectional is enabled). Defaults to the same value as audio_field. |
static_fields |
No | An object of extra key-value pairs included in every outbound JSON audio message. |
例Base64エンコーディングによるJSONトランスポート
以下の通りである。 audioTransport 設定は、JSONメッセージの中にbase64としてアウトバウンドオーディオをラップし、静的な type フィールドをすべてのメッセージに追加します - OpenAI Realtime API が期待するフォーマットと一致します:
{
"transport": "json",
"encoding": "base64",
"audio_field": "audio",
"static_fields": {
"type": "input_audio_buffer.append"
}
}
各アウトバウンドWebSocketメッセージは次のようになる:
{
"type": "input_audio_buffer.append",
"audio": "<base64-encoded PCM16 audio>"
}
いつ bidirectional は trueを使用して、Audio Connector は受信 JSON メッセージも読み取ります。 receive_audio_field キー(または audio_field もし receive_audio_field が設定されていない場合)、セッションで再生するためにbase64オーディオをデコードする。
例デフォルトのバイナリ・トランスポート
省略した場合 audioTransport (または transport への "binary")、オーディオは設定されたリニアPCM 16ビットで送受信されます。 audioRate.各メッセージには20msのオーディオフレームが1つ含まれているため、フレームサイズは次のように変化します。 audioRate:8kHzで320バイト、16kHzで640バイト、24kHzで960バイト。もし audioRate を省略した場合、デフォルトのバイナリートランスポートは16kHzのオーディオを640バイトのフレームで使用します。
オーディオ・アクティブ/インアクティブ・メッセージ
WebSocketに含まれるストリームの音声がミュートされると、以下のJSONペイロードを持つテキストメッセージが送信されます。
以下のJSONペイロードでテキスト・メッセージが送信されます。 active に設定する。 false):
{
"content-type":"audio/l16;rate=16000",
"method": "update",
"event": "websocket:media:update",
"active": false,
"CUSTOM-HEADER-1": "value-1",
"CUSTOM-HEADER-2": "value-2"
}
(その CUSTOM-HEADER この例では、プロパティはメタデータを表します。
メタデータを表します。 headers プロパティを使用する)。
接続を開始します)。
オーディオがミュートされるのは、すべてのクライアントがオーディオのパブリッシュを停止したため、または次のような理由が考えられます。 強制ミュート イベントを開催する。
いずれかのストリームの音声が再開されると、以下のJSONペイロードを持つテキストメッセージが送信される。
以下のJSONペイロードでテキストメッセージが送信される active に設定する。 true):
{
"content-type":"audio/l16;rate=16000",
"method": "update",
"event": "websocket:media:update",
"active": true,
"CUSTOM-HEADER-1": "value-1",
"CUSTOM-HEADER-2": "value-2"
}
イベントメッセージのストリーム配信
パブリッシャーがセッションに接続すると、テキストメッセージが以下の JSON
ペイロード( method に設定する。 created):
{
"content-type": "audio/l16;rate=16000",
"method": "created",
"event": "websocket:stream:created",
"info": {
"projectId": "100",
"sessionId": "1_MX4xMDB-fjE3NzA3NDAzMzIzMjh-ZXkvR1d6YjZoZHlkcHlySFRuNmtlTFZMfn5-",
"stream": {
"id": "c4ed69a1-b9a1-44a9-bbc5-edfcf099d772",
"connection": {
"id": "33f8c459-a18a-4a81-b1e4-b7d1bdbbc323"
}
}
},
"CUSTOM-HEADER-1": "value-1",
"CUSTOM-HEADER-2": "value-2"
}
(その CUSTOM-HEADER この例では、プロパティはメタデータを表します。
メタデータを表します。 headers プロパティを使用する)。
接続を開始します)。
ストリームがセッションから切断すると、テキスト・メッセージが以下の JSON
ペイロード ( method に設定する。 destroyed):
{
"content-type": "audio/l16;rate=16000",
"method": "destroyed",
"event": "websocket:stream:destroyed",
"info": {
"projectId": "100",
"sessionId": "1_MX4xMDB-fjE3NzA3NDAzMzIzMjh-ZXkvR1d6YjZoZHlkcHlySFRuNmtlTFZMfn5-",
"stream": {
"id": "c4ed69a1-b9a1-44a9-bbc5-edfcf099d772",
"connection": {
"id": "33f8c459-a18a-4a81-b1e4-b7d1bdbbc323"
}
}
},
"CUSTOM-HEADER-1": "value-1",
"CUSTOM-HEADER-2": "value-2"
}
バッファのフラッシュ (CLEAR) メッセージ
WebSocketサーバはオプションでテキストベースの制御メッセージを送信し、Audio Connectorに現在バッファされているがまだ配信されていないオーディオフレームを直ちに破棄するよう指示することができます。これは、割り込み、TTS再生の中断、会話ターンのリセットなど、リアルタイムで使用する場合に便利です。
バッファリングされたオーディオをフラッシュするには、以下のJSONメッセージをWebSocketで送信します:
{
"action": "CLEAR"
}
Audio Connectorがこのメッセージを受信すると、保留中のバッファリングされたオーディオフレームはすべて破棄され、新しい着信オーディオは中断されることなくストリーミングを続け、確認メッセージが返されます:
{
"event": "websocket:cleared"
"CUSTOM-HEADER-1": "value-1",
"CUSTOM-HEADER-2": "value-2"
}
このコントロール・メッセージはオプションである。もし "action": "CLEAR"オーディオストリーミングは正常に進行する。
通知(NOTIFY)メッセージ
WebSocketサーバーは、オプションでテキストベースの制御メッセージ(NOTIFY).オーディオコネクタは、メッセージがオーディオストリームと順番に処理されると、元のペイロードを変更せずにエコーバックします。これは、アプリケーションイベントとオーディオフローを関連付けるマーカーとして使用できます。
を送信する。 NOTIFY イベントで、以下のJSONメッセージをWebSocket経由で送信する:
{
"action": "NOTIFY",
"payload": "some info"
}
メッセージが受信されると、オーディオキューの最後に置かれます。オーディオが消費された後、Audio Connectorがこのメッセージを処理すると、確認メッセージがWebSocketサーバに送信されます:
{
"event": "websocket:notify",
"payload": "some info",
"CUSTOM-HEADER-1": "value-1",
"CUSTOM-HEADER-2": "value-2"
}
このコントロール・メッセージはオプションである。もし "action": "NOTIFY"オーディオストリーミングは正常に進行する。
切断メッセージ
Audio Connector WebSocketが 強制切断RESTメソッド または に達したからである。 WebSocket接続の停止), テキスト・メッセージは、以下のJSONペイロードで送信される:
{
"content-type":"audio/l16;rate=16000",
"method": "delete",
"event": "websocket:disconnected",
"CUSTOM-HEADER-1": "value-1",
"CUSTOM-HEADER-2": "value-2"
}
このメッセージはWebSocket接続の終了を示す。
(その CUSTOM-HEADER この例では、プロパティはメタデータを表します。
メタデータを表します。 headers プロパティを使用する)。
接続を開始します)。
WebSocket接続の停止
WebSocketサーバーが接続を切断すると、その通話に関するOpenTokの接続も終了します。 セッションに接続している各クライアントにおいて、OpenTokのクライアント側SDKは、 接続が終了したことを示すイベントをディスパッチします(他のクライアントがセッションから切断された場合と同様です)。
Audio Connector WebSocket 接続を切断するには 強制切断RESTメソッド.このメソッドで Audio Connector WebSocket 接続の接続 ID を使用する。
セキュリティ対策として、WebSocketは6時間後に自動的に閉じられます。
自動再接続
Audio Connector は、WebSocket 接続の再確立を数回試みます。 を呼び出すことなくWebSocketがクローズした場合など)。 への呼び出しから 強制切断RESTメソッド).
WebSocket経由でセッションにオーディオをパブリッシュする
Audio ConnectorのWebSocket接続を使用すると、(WebSocket接続でセッションから音声を受信することに加え)WebSocket接続からOpenTokセッションで公開されているストリームへ音声データを送信することができます。以下の設定を行ってください。 bidirectional プロパティ true に REST API メソッドで送信するデータの中にある。 オーディオコネクタの開始.
参照 オーディオメッセージのフォーマット WebSocket接続で送信するオーディオデータのフォーマットの詳細については、こちらをご覧ください。
Audio Connectorが使用するトークンを作成する際に、トークン data Audio Connectorストリームを特定するため。(OpenTokクライアントライブラリには、セッション内のストリームの接続に関する接続データを検査するためのメソッドが含まれています。)
注: について bidirectional このオプションはREST APIでのみ利用可能です。現在、OpenTokサーバーSDKではサポートされていません。
サンプルアプリケーション
参照 デモ動画 - ノード・オーディオ・コネクタ Audio Connector を使用する Node アプリケーションのサンプルプロジェクト。
詳細情報
こちらをご覧ください ブログ記事.