音声の切り替え
ユーザーが日常のタスクを実行するために複数のオーディオ ソース デバイスを使用するケースが増えるにつれ、デバイス間でヘッドセットの使用を管理するよりシンプルなソリューションに対する需要が高まっています。音声の切り替えは、ユーザーのアクティビティ(映画の開始など)と優先イベント(着信など)に基づいて、デバイス間でヘッドセットの接続をシームレスに切り替えます。
UX の原則
- 接続の切り替えは、ユーザーの操作に基づいて迅速に行う必要があります。
- 接続の切り替えはユーザーに対して透過的である必要があります。切り替えが望ましくない場合は、ユーザーが制御または元に戻すことができます。
- 切り替えはユーザーのプライバシーを尊重する必要があります。
ロール
音声の切り替えシークア: シークアは、音声ソース デバイス(スマートフォンやタブレットなど)で、接続可能なヘッドセットを探します。
オーディオ切り替えプロバイダ: 通常、プロバイダは、シーカーが切り替えを決定できるように、その存在と接続ステータスをアドバタイズするヘッドセットです。
要件の概要
スマート スイッチングを実現するには、プロバイダは次の要件を満たす必要があります。
名前 | 説明 | 要件 | 必須か |
---|---|---|---|
ページスキャン | 既存の接続がある場合に、別のシーカーからの新しい接続リクエストを受け入れます。 単一ポイント プロバイダの場合:
|
パフォーマンスを向上させるには、低レイテンシのページスキャン モード(スキャン間隔は 640 ms 以下)が必要です。 バッテリー駆動時間と切り替えのパフォーマンスをトレードオフするために、プロバイダはほとんどの場合、デフォルトのページスキャン モード(低電力モード、スキャン間隔は 1,280 ms 以下)を設定できます。ただし、低レイテンシ モードは次の状況で使用する必要があります。
|
必須 |
接続履歴 | 以前の接続に戻って再生を再開する場合。 以前の接続に戻る操作は、Message Stream API を介した通信によってトリガーされます。 再生を再開する場合は、レコードに音声の一時停止イベントを含める必要があります。 |
接続履歴を維持し、Message Stream API を実装する。 | 必須 |
接続ステータス | シーカーが接続切り替えの判断を行うための接続ステータス。接続ステータスには次のようなものがあります。
|
BLE アドバタイズとメッセージ ストリームに接続ステータスを含める。 | 必須 |
ランタイム機能の変更 | 音声切り替えはプロバイダのファームウェアをアップグレードすることで有効にできます。そのため、この機能は実行時にシーカーとプロバイダの間で同期する必要があります。 | Message Stream API を実装して、ランタイム機能にアクセスします。 | 必須 |
構成可能な切り替えルール | 既存のアクティブな音声ストリーミングと新しい音声ストリーミング リクエストの優先度を、ユーザー設定で設定できるようにします。 たとえば、音声切り替えシーケンサーでは、メディア ストリーミングと通話の自動切り替えをユーザーが有効または無効にできる UI 設定を提供できます。 音声切り替えシーケンサーは、メッセージ ストリームを介して切り替えルールを設定し、取得します。 |
マルチポイント プロバイダのみ。 Message Stream API を実装して、接続されたデバイス間の切り替えルールを構成できるようにします。 |
省略可 |
アクティブなデバイスの切り替え | 音声切り替えシーケンサーが、接続されたデバイス間での音声切り替えをシミュレートできるようにします。 音声切り替えシーケンサー側には、接続されたデバイスを簡単に切り替えるための UI が用意されている場合があります。 |
マルチポイント プロバイダのみ。 音声の切り替えシーケンサーが接続されたデバイス間でアクティブな音声ソースを判断できるように、Message Stream API を実装します。 |
必須 |
マルチポイント切り替えの通知 | 音声切り替えシーケンサーに切り替え通知を表示できるようにします。 | マルチポイント プロバイダのみ。 マルチポイントの切り替えが行われたときに、接続されている音声の切り替えシーケンサーに通知する Message Stream API を実装します。 |
必須 |
広告ペイロード
プロバイダは、広告: 検出できない場合で説明されている Fast Pair アカウント データに基づいて、現在の接続ステータスを広告に含める必要があります。
表 4.2 のバージョンは 0x1 です。
接続ステータス フィールド
オクテット | データ型 | 説明 | 値 | 必須か |
---|---|---|---|---|
0 | uint8 |
フィールドの長さとタイプ 0bLLLLTTTT
|
0bLLLL0101
|
必須 |
1 | uint8 |
接続状態 0bHAFRSSSS
|
0bHAFRSSSS |
必須 |
2 | uint8 |
カスタムデータ 現在、現在の音声ストリーミングの使用状況を記述するために使用されるコンテンツ タイプのみが含まれます。求職者がプロバイダに送信します。 |
この値は、現在アクティブなストリーミングのシーカから、メッセージ ストリームを介してプロバイダに送信されます。現在のアクティブなストリーミングがシーカーからのものでない場合は 0 です。 | 必須 |
3 - var | 接続済みデバイスのビットマップ 現在プロバイダに接続されているデバイスを示すビットマップ。すべてのボンディング デバイスは、ボンディング デバイスごとに 1 ビットずつ順番に並べられます。長さは、プロバイダのボンディング デバイスの数によって異なります。 |
デバイスが現在プロバイダに接続されている場合は 1、接続されていない場合は 0 に設定されるマッピングされたビット。 詳しくは、接続済みデバイスのビットマップをご覧ください。 |
省略可 |
表 4.1: 接続ステータス フィールドの元データ
接続フラグ
0bH = 頭部装着の検知
- 1、現在頭上にあります
- 0(頭部に装着されていないか、OHD センサーがない)
0bA = 接続の可用性
- 1、利用可能な接続がある
- 0(それ以外の場合)
0bF = フォーカス モード
- 1. フォーカス モードでは、メディア使用時の接続切り替えが許可されなくなりました(A2DP から A2DP への切り替えは許可されません)
- 0(それ以外の場合)
0bR = 自動再接続
- 1: 現在の接続がプロバイダによって自動的に再接続される場合(つまり、ユーザーによって接続されていない場合)。(マルチポイントの場合、既存の接続のいずれかが自動的に再接続される場合は、1 に設定する必要があります)
- 0(それ以外の場合)
接続状態
- 0x0: 接続なし
- 0x1: ページング
- 0x2: 接続されているがデータ転送なし
- 0x3: 音声以外のデータ転送(切り替え可能な場合のみ。切り替えられない場合は 0xF を使用)
- 0x4: A2DP ストリーミング、AVRCP は適用外
- 0x5: A2DP ストリーミングと AVRCP 再生
- 0x6: HFP(電話/VoIP 通話)ストリーミング(インバンドとインバンド以外の着信音を含む)
- 0x7: LE オーディオ - 制御なしのメディア ストリーミング
- 0x8: LE Audio - 制御付きメディア ストリーミング
- 0x9: LE Audio - 通話ストリーミング
- 0xA: LE Audio - ブロードキャスト
- 0xF: 接続切り替えを一時的に無効にする(ファームウェアの更新など)
LE Audio のコンテキスト タイプと接続状態
LE Audio プロバイダは、 割り当てられた番号 6.12.3 で指定されているすべてのコンテキスト タイプを処理し(プロバイダが特定のコンテキスト タイプを明示的にサポートしていない場合を除く)、以下のようにコンテキスト タイプを接続状態にマッピングすることを推奨します。
- 会話型: 0x9
- メディア: 0x8
- ゲーム: 0x7
- 説明: 0x7
- 音声アシスタント: 0x9
- ライブ: 0x9
- 効果音: 0x2
- 通知: 0x2
- 着信音: 0x9
- アラート: 0x7
- 緊急アラーム: 0x9
通話中のメディア再生など、混合 LE Audio コンテキスト タイプのシナリオの場合、プロバイダは優先度が最も高い接続状態を使用する必要があります。つまり、上記のシナリオでは 0x8(メディア)ではなく 0x9(通話)を使用します。
接続済みデバイスのビットマップ
不要な接続切り替えを回避するため、ヘッドセットが現在接続されているデバイスをお客様に確認する必要がある場合があります。たとえば、ヘッドセットがスマートフォンに接続されているときに、家族の誰かがタブレットで YouTube を開始したときに接続が切り替わって中断されるのをユーザーが望まない場合などです。
このビットマップは匿名であり、シーカーはプロバイダとペア設定されている他のデバイスを把握できません。たとえば、5 台のデバイスをペア設定したとします。
- 0: ノートパソコン(0bx0000000)
- 1: phoneA(0b0x000000)
- 2: phoneB(0b00x00000)
- 3: タブレット(0b000x0000)
- 4: テレビ(0b0000x000)
現在接続されているデバイスがラップトップとタブレットの場合、ビットマップの値は 0b10010000 になります。注文の変更は、ユーザーがヘッドセットを出荷時の設定にリセットした場合や、ペア設定されたデバイス数が上限に達した場合など、避けられない場合は許可されます。
ランダムな解決可能な広告
トラッキングを回避し、ユーザーのプライバシーを保護するため、プロバイダは AES-CTR を使用してアカウント キーでフィールドをローテーションして暗号化する必要があります。
encrypted_connection_status_field = connection_status_raw_data ^ AES(Key, IV)
ここで
Key は、次のセクションで定義する使用中のアカウント鍵から派生します。
鍵は、SHA-256 ハッシュ関数を使用して HKDF 関数(IETF RFC 5869)によって生成されます。
Key = HKDF(account_key, NULL, UTF8("SASS-RRD-KEY"),16)
プロバイダはここで元のアカウント キーを使用します。つまり、キーの最初のバイトは 0x04 で、使用パターンには含まれません。
IV(初期ベクトル)は、ゼロ パディングされたアカウント キーデータの 2 バイトのソルトです。つまり、IV は concat(salt, 14-byte ZEROs) です。
接続ステータスの元データは 表 4.1 で定義されています。接続ステータスが変更された場合は、広告配信期間と同じタイミングで塩と RPA を再生成する必要があります。
これにより、暗号化された接続ステータス フィールドがアカウント キーデータのローテーションと同時にローテーションされます。
BLE アドバタイズは次のように構成されます。
オクテット | データ型 | 説明 | 値 | 必須か |
---|---|---|---|---|
0 | uint8 |
バージョンとフラグ | 0x10 | 必須 |
1 - t | アカウント キーデータ | 変動あり | 必須 | |
t+1 - s | バッテリー データ | 変動あり | 省略可 | |
s+1 - var | ランダムな解決可能なデータ | 変動あり | アカウントキーリストが空でない場合必須、 それ以外の場合は除外。 |
表 4.2: ランダムな解決可能なデータを含む BLE アドバタイズ
ランダムな解決可能なデータには次のものが含まれます。
オクテット | データ型 | 説明 | 値 | 必須か |
---|---|---|---|---|
0 | uint8 |
フィールドの長さとタイプ 0bLLLLTTTT
|
0bLLLL0110
|
必須 |
1 - var | 暗号化データ | 変動あり | 必須 |
表 4.2.1: ランダムな解決可能なデータ
たとえば、Random Resolvable Data に暗号化された接続ステータス フィールドが含まれている場合、復号された結果は 接続ステータス フィールドになります。
改ざんを防ぐため、広告にランダム解決可能データが含まれている場合は、上記のアカウント キーデータを少し変更する必要があります。通常、アカウント キー フィルタを構築するときに、アカウント キー フィルタと塩を組み合わせて値 V が生成されます。代わりに、Random Resolvable Data もアドバタイズされている場合は、値 V を次のように構成する必要があります。
V = concat(account_key, salt, random_resolvable_data)
バッテリー データとランダム解決可能データの両方がアドバタイズされている場合、V は次のように構成する必要があります。
V = concat(account_key, salt, battery_data, random_resolvable_data)
使用中のアカウント キー
接続の切り替えはアカウントベースであるため、プロバイダは BLE アドバタイズに現在の接続のアカウント情報を含める必要があります。現在接続されているデバイスがオーディオ スイッチ シーカーである場合、プロバイダはこのシーカーに関連付けられたアカウント キーを取得し、このアカウント キーを使用して接続ステータス フィールドを暗号化できる必要があります。接続された音声ソースが Audio Switch Seeker 以外の場合、プロバイダは最後に使用したアカウントキーを使用する必要があります。
プロバイダは、アカウント キー フィルタを計算する前に、アカウント キーの最初のバイトを変更して、使用パターンに次のいずれかを含める必要があります。
- 0b00000100
このアカウントキーは使用されていません。
これがデフォルトです(アカウントキーを参照)。 - 0b00000101
このアカウント キーは、最後に使用されたアカウント キーです。
接続ステータス フィールドは、このアカウント キーによって暗号化されます。現在の接続状態のアカウントキー情報がありません。これは、デバイスが接続されていないか、接続されているデバイスがオーディオ スイッチ シーカーではないことを意味します。 - 0b00000110
このアカウント キーは、使用中のアカウント キーです。
接続ステータス フィールドは、このアカウント キーによって暗号化され、現在接続されているデバイスがこのアカウント キーに関連付けられています。
音声切り替えペイロードの回路図
以下の図は、オーディオ スイッチ ペイロードの概略を示しています。

メッセージ
接続すると、シーカーとプロバイダはメッセージ ストリームを使用して、オーディオ切り替え機能を同期したり、接続切り替えをトリガーしたり、切り替え設定を取得したり、接続ステータスを通知したりできます。以下のように、音声スイッチに固有のメッセージ グループとメッセージ コードを作成します。
メッセージ グループ名 | 値 |
---|---|
音声の切り替え | 0x07 |
各メッセージ コードの詳細については、次のセクションをご覧ください。
メッセージ コード名 | 値 | マルチポイントのみ | ギフトの送り主 | Responder | 暗号化 | MAC | ACK |
---|---|---|---|---|---|---|---|
音声の切り替えの機能を取得する | 0x10 | N | 両方 | 両方(コード 0x11 経由) | N | N | N |
音声切り替えの通知機能 | 0x11 | N | 両方 | 両方 | N | ○ | Y |
マルチポイントの状態を設定する | 0x12 | Y | 検索者 | プロバイダ | N | ○ | Y |
切り替えの設定を行う | 0x20 | Y | 検索者 | プロバイダ | N | ○ | Y |
切り替え設定を取得する | 0x21 | Y | 検索者 | プロバイダ(コード 0x22) | N | N | N |
切り替えの通知設定 | 0x22 | Y | プロバイダ | 検索者 | N | N | N |
アクティブな音声ソースを切り替える(接続済みデバイスに切り替える) | 0x30 | Y | 検索者 | プロバイダ | N | ○ | Y |
元に戻す | 0x31 | N | 検索者 | プロバイダ | N | ○ | Y |
マルチポイント切り替えイベントを通知する | 0x32 | Y | プロバイダ | 検索者 | N | N | N |
接続ステータスを取得する | 0x33 | Y | 検索者 | プロバイダ(コード 0x34) | N | N | N |
接続ステータスを通知する | 0x34 | Y | プロバイダ | 検索者 | Y | N | N |
音声スイッチによって開始された接続を通知する | 0x40 | N | 検索者 | プロバイダ | N | ○ | Y |
使用中のアカウント キーを示す | 0x41 | N | 検索者 | プロバイダ | N | ○ | Y |
カスタムデータを送信する | 0x42 | N | 検索者 | プロバイダ | N | ○ | Y |
ドロップ接続のターゲットを設定する | 0x43 | Y | 検索者 | プロバイダ | N | ○ | Y |
表 4.3: 音声の切り替えメッセージ
音声切り替えメッセージの MAC
メッセージの認証を行うには、シーカーからプロバイダに送信される追加データを含むすべての音声切り替えメッセージに メッセージ認証コードが必要です。MAC を含むメッセージが受信された場合は、プロバイダがメッセージに反応したかどうかをシーカーが把握できるように、確認応答する必要があります。
メッセージ認証が成功すると、プロバイダはメッセージの ACK を送信します。
オクテット | データ型 | 説明 | 値 |
---|---|---|---|
0 | uint8 | 謝辞 | 0xFF |
1 | uint8 | ACK | 0x01 |
2 ~ 3 | uint16 | 追加データの長さ | 変動あり |
4 | uint8 | 音声の切り替え | 0x07 |
5 | uint8 | 音声切り替えメッセージ コード | 変動あり |
6 - 秒 | 追加データ | 変動あり |
失敗した場合、プロバイダはメッセージの NAK を送信します。
オクテット | データ型 | 説明 | 値 |
---|---|---|---|
0 | uint8 | 謝辞 | 0xFF |
1 | uint8 | NAK | 0x02 |
2 ~ 3 | uint16 | 追加データの長さ | 0x0003 |
4 | uint8 | エラーの理由 | 変動あり |
5 | uint8 | 音声の切り替え | 0x07 |
6 | uint8 | 音声切り替えメッセージ コード | 変動あり |
プロバイダが送信者である場合、MAC は必要ありません。
音声の切り替えの機能を取得する
オーディオ スイッチのプロバイダとシーカーの両方が、接続されたファスト ペアリング シーカー/プロバイダがオーディオ スイッチに対応しているかどうかを、次のメッセージを使用して確認できます。
オクテット | データ型 | 説明 | 値 |
---|---|---|---|
0 | uint8 | 音声の切り替え | 0x07 |
1 | uint8 | 音声の切り替えの機能を取得する | 0x10 |
2 ~ 3 | uint16 | 追加データの長さ | 0 |
表 4.3.1.0: 音声の切り替えの機能を取得する
音声の切り替えの通知機能
音声スイッチの機能を取得メッセージ コードを受信すると、音声スイッチのシーカ/プロバイダは次のいずれかのフラグで応答します。
オクテット | データ型 | 説明 | 値 |
---|---|---|---|
0 | uint8 | 音声の切り替え | 0x07 |
1 | uint8 | 音声の切り替えの通知機能 | 0x11 |
2 ~ 3 | uint16 | 追加データの長さ | 20(求職者から送信された場合) 4(提供元から送信された場合) |
4 ~ 5 | uint16 | 音声切り替えのバージョン コード | ゼロ以外の値は、音声切り替えをサポートしていることを意味します。現在のバージョン(セキュリティ強化版)のコードは 0x0102 です。 0x0000 または 1 秒以内に応答がない場合は、このデバイスで音声スイッチがサポートされていないことを意味します |
6 ~ 7 | flags | プロバイダの音声切り替え機能フラグ シーカーから送信された場合、この 2 バイトは無視されます。 |
様々 音声切り替え機能フラグをご覧ください。 |
8 ~ 15 | メッセージのノンス シーカーから送信される場合にのみ必要 |
変動あり | |
16 ~ 23 | メッセージ認証コード 求職者から送信された場合にのみ必要 |
変動あり |
表 4.3.1.1: 音声の切り替えの通知機能
オーディオ切り替え機能フラグ
ビット 0(オクテット 6、MSB): 音声の切り替えの状態
- 1: 音声の切り替えの状態がオンの場合
- 0(それ以外の場合)
ビット 1: マルチポイントの構成可能性
- 1: デバイスがマルチポイントに対応しており、オンとオフを切り替えることができる場合
- 0(それ以外の場合: マルチポイントをサポートしていない、またはマルチポイントが常にオンになっている)
ビット 2: マルチポイントの現在の状態
- 1(マルチポイントがオンの場合)
- 0(それ以外の場合)
ビット 3: 装着検知
- 1(このデバイスがオンヘッド検出をサポートしている場合)(オンヘッド検出が現在オフになっている場合でも)
- 0(それ以外の場合)
ビット 4: 装着センサーの現在の状態
- 1(装着センサーがオンの場合)
- 0(それ以外の場合: オンヘッド検出をサポートしていないか、オンヘッド検出が無効になっている)
他のビットはすべて予約済みです(デフォルトは 0)。
マルチポイントの状態を設定する
音声スイッチ シーケンサーでは、ユーザーがマルチポイント機能をオンまたはオフに切り替える設定が提供される場合があります。シーカーは、次のメッセージを使用して、マルチポイント ステータスをプロバイダに設定します。
オクテット | データ型 | 説明 | 値 |
---|---|---|---|
0 | uint8 | 音声の切り替え | 0x07 |
1 | uint8 | マルチポイントの状態を設定する | 0x12 |
2 ~ 3 | uint16 | 追加データの長さ | 17 |
4 | uint8 | マルチポイントの状態 | 0: マルチポイントをオフ 1: マルチポイントをオン |
5 ~ 12 | メッセージ ノンス | 変動あり | |
13 ~ 20 | メッセージ認証コード | 変動あり |
表 4.3.1.2: マルチポイントの状態を設定する
切り替えの設定を行う
音声スイッチの検索者は、マルチポイントの切り替え設定を変更し、次のメッセージを使用してプロバイダに設定できます。
オクテット | データ型 | 説明 | 値 |
---|---|---|---|
0 | uint8 | 音声の切り替え | 0x07 |
1 | uint8 | 切り替えの設定を行う | 0x20 |
2 ~ 3 | uint16 | 追加データの長さ | 18 |
4 | flags | 切り替えの設定 | 異なる マルチポイント切り替え設定フラグをご覧ください。 |
5 | 高度な切り替え設定 このバイトは予約済みです。デフォルト値は 0 です。 |
変動あり | |
6 ~ 13 | メッセージ ノンス | 変動あり | |
14 ~ 21 | メッセージ認証コード | 変動あり |
表 4.3.2.0: 切り替えの設定
マルチポイント切り替えの設定フラグ
- ビット 0(MSB): A2DP 対 A2DP(デフォルト 0)
- ビット 1: HFP と HFP(デフォルト 0)
- ビット 2: A2DP と HFP(デフォルト 0)
- ビット 3: HFP と A2DP(デフォルト 1)
- ビット 4 ~ 7: 予約済み
- 上記は、「新しいプロファイル リクエスト」と「現在の有効なプロファイル」を表しています。
- 0(切り替えない)
- 1(切り替え)
切り替え設定を取得する
オーディオ切り替えのシーカは、次のメッセージを使用して、プロバイダからマルチポイントの切り替え設定をクエリできます。
オクテット | データ型 | 説明 | 値 |
---|---|---|---|
0 | uint8 | 音声の切り替え | 0x07 |
1 | uint8 | スイッチング構成を取得する | 0x21 |
2 ~ 3 | uint16 | 追加データの長さ | 0 |
表 4.3.2.1: 切り替え設定を取得する
切り替えの通知設定
オクテット | データ型 | 説明 | 値 |
---|---|---|---|
0 | uint8 | 音声の切り替え | 0x07 |
1 | uint8 | 切り替えの通知設定 | 0x22 |
2 ~ 3 | uint16 | 追加データの長さ | 2 |
4 | flags | 切り替え設定フラグ | 異なる マルチポイント切り替え設定フラグをご覧ください。 |
5 | 高度な切り替え設定 このバイトは予約済みです。デフォルト値は 0 にする必要があります |
変動あり |
表 4.3.2.2: 切り替えの通知設定
有効なオーディオ ソースを切り替える(接続済みデバイスに切り替える)
音声切り替えシーケンサーは、接続されたデバイス間でアクティブな音声ソースを切り替えるよう、マルチポイント プロバイダにリクエストできます。リクエストには次のメッセージを使用します。
オクテット | データ型 | 説明 | 値 |
---|---|---|---|
0 | uint8 | 音声の切り替え | 0x07 |
1 | uint8 | 有効なオーディオ ソースを切り替える(接続済みデバイスに切り替える) | 0x30 |
2 ~ 3 | uint16 | 追加データの長さ | 17 |
4 | flags | アクティブな音声ソースの切り替えイベントフラグ | 様々 アクティブな音声ソースの切り替えイベントを参照 |
5 ~ 12 | メッセージ ノンス | 変動あり | |
13 ~ 20 | メッセージ認証コード | 変動あり |
表 4.3.3.0: アクティブな音声ソースを切り替える(接続済みデバイスに切り替える)
アクティブな音声ソースの切り替えイベント
- ビット 0(MSB): 1: このデバイスに切り替え、0: 2 番目の接続デバイスに切り替え
- ビット 1: 1 は、切り替え後にデバイスに切り替えて再生を再開します。それ以外の場合は 0 です。再生を再開すると、プロバイダは AVRCP プロファイルを通じてシーカーに PLAY 通知を送信します。前の状態(切り替える前)が再生状態ではなかった場合、プロバイダはこのフラグを無視する必要があります。
- ビット 2: 1 は、切り替え先のデバイスで SCO を拒否します。それ以外の場合は 0 です。
- ビット 3: 1 はスイッチを切ったデバイスで Bluetooth を切断し、0 は切断しない。
- ビット 4 ~ 7: 予約済み。
音声切り替えシーカーが自分の状態を正しく認識していない場合があるため、シーカーがすでにアクティブなデバイスであるときに、プロバイダが「このデバイスに切り替える」メッセージを受信することがあります。この場合、シーカーに正しい UI を表示するために、プロバイダはエラー理由 0x4 - Redundant device action を含む NAK を送信できます。
複数のセット メンバーを持つ LE Audio プロバイダの場合、プロバイダはすべてのメンバーをシーカーから切断する必要があります。そうしないと、シーカーの Bluetooth スタックがプロバイダに再接続します。
元のデバイスに戻る(接続解除されたデバイスに切り替える)
接続の切り替えが不要な場合は、ユーザーが切り替えを元に戻すことができます。また、特定のシナリオでは、音声接続を復元して中断を最小限に抑えることが理にかなっています。シーカーは、以下のメッセージを使用して、元の検索結果に戻す操作をトリガーします。
オクテット | データ型 | 説明 | 値 |
---|---|---|---|
0 | uint8 | 音声の切り替え | 0x07 |
1 | uint8 | 元のデバイスに戻る(接続解除されたデバイスに切り替える) | 0x31 |
2 ~ 3 | uint16 | 追加データの長さ | 17 |
4 | uint8 | 元に戻すイベント | さまざま 0x01: 元に戻す 0x02: 元に戻して再生を再開する |
5 ~ 12 | メッセージ ノンス | 変動あり | |
13 ~ 20 | メッセージ認証コード | 変動あり |
表 4.3.3.1: 切り替える(接続解除されたデバイスに)
マルチポイント プロバイダの場合、接続を切り替えるために、プロバイダは 1 つの音源デバイスとの接続を切断し、もう一方の音源で音声セッションを一時停止することがあります。たとえば、マルチポイント ヘッドセットがタブレットと、サポートされているサードパーティ製の音声の切り替えデバイスに接続されているとします。スマートフォンに着信があったときに、ユーザーがタブレットで動画を視聴している。スマートフォンがヘッドセットの接続スイッチをトリガーします。スマートフォンに接続するにはサードパーティ製デバイスの接続を切断する必要があります。また、タブレットのメディア セッションを一時停止して、スマートフォンから着信音を取得する必要があります。お客様が通話を拒否した場合、スマートフォンからヘッドセットに「切り替えて再生を再開」するよう求められることがあります。このリクエストを受け取ったら、ヘッドセットはサードパーティ製デバイスに再接続し、タブレットで一時停止した動画の再生を再開する必要があります。
マルチポイント切り替えイベントを通知する
マルチポイント スイッチ イベントが発生したことをユーザーに知らせるため、オーディオ スイッチ シーケンサーから通知が表示されることがあります。プロバイダは、接続されたオーディオ スイッチ シーカーに切り替えイベントを通知する必要があります。
オクテット | データ型 | 説明 | 値 |
---|---|---|---|
0 | uint8 | 音声の切り替え | 0x07 |
1 | uint8 | マルチポイント切り替えイベントを通知 プロバイダは、音声の切り替えシーケンサーから音声の切り替え以外のシーケンサーへの切り替え、音声の切り替え以外のシーケンサーから音声の切り替えシーケンサーへの切り替え、音声の切り替えシーケンサーから音声の切り替えシーケンサーへの切り替えなど、すべての切り替えで送信する必要があります。 |
0x32 |
2 ~ 3 | uint16 | 追加データの長さ | 変動あり |
4 | uint8 | 切り替えの理由 この値は、接続状態に基づいて決定する必要があります。LE Audio のユースケースでは、LE Audio コンテキスト タイプと接続状態のマッピングを調べると役立つ場合があります。たとえば、音声アシスタントに該当する接続状態は 0x9(LE オーディオ - 通話ストリーミング)です。したがって、音声アシスタントによって開始された切り替えの切り替え理由は 0x02 にする必要があります。 |
様々 0x00: 未指定 0x01: メディア(A2DP ストリーミング、LEA メディア ストリーミングなど) 0x02: 通話(HFP ストリーミング、LEA 通話ストリーミングなど) |
5 | uint8 | 対象デバイス | 様々 0x01: このデバイス 0x02: 接続されている別のデバイス |
6 - n | utf8 | ターゲット デバイス名 : ターゲット デバイスがオーディオ スイッチ シーカーの場合は、シーカーが送信した名前を使用します。それ以外の場合は、BT 名を使用します。該当しない場合は、アドレスの最後の 2 バイトを使用します。 |
変動あり |
表 4.3.3.2: マルチポイント切り替えイベントを通知する
接続ステータスを取得する
求職者は、プロバイダから現在の接続ステータスを取得できます。
オクテット | データ型 | 説明 | 値 |
---|---|---|---|
0 | uint8 | 音声の切り替え | 0x07 |
1 | uint8 | 接続ステータスを取得する | 0x33 |
2 ~ 3 | uint16 | 追加データの長さ | 0 |
表 4.3.3.3: 接続ステータスを取得する
このメッセージを受信したプロバイダは、メッセージ コード 0x34 で応答し、 接続ステータスを通知します。
接続ステータスを通知する
BLE のアドバタイズ ペイロードで定義されているように、マルチポイント プロバイダの場合、接続ステータスが変更された場合(アドバタイズ パケットの変更を除く)、プロバイダは、同じアカウント キーを使用している接続済みのシーカにも変更を通知する必要があります。プロバイダが音声の切り替えを希望するシーカーと音声の切り替えを希望しないシーカーに接続している場合、音声の切り替えを希望しないシーカーがアクティブな場合は、プロバイダは接続ステータスについて、接続されている音声の切り替えを希望するシーカーにも通知する必要があります(シーカーのアカウントキーを使用)。
オクテット | データ型 | 説明 | 値 |
---|---|---|---|
0 | uint8 | 音声の切り替え | 0x07 |
1 | uint8 | 接続ステータスを通知する | 0x34 |
2 ~ 3 | uint16 | 追加データの長さ | 変動あり |
4 | uint8 | アクティブなデバイス フラグ | 様々 0x00: このシーカーは受動で、アクティブなデバイスが同じアカウント キーを使用している 0x01: このシーカーがアクティブなデバイスである 0x02: このシーカーは受動で、アクティブなデバイスが音声スイッチ以外のシーカーである |
5 - n | 暗号化された接続のステータス | 変動あり | |
n+1 - n+8 | メッセージ ノンス | 変動あり |
表 4.3.3.4: 接続ステータスを通知する
暗号化された接続のステータス メッセージ
encrypted_connection_status = connection_status_raw_data ^ AES(Key, IV)
ここで
キーは使用中のアカウント キーから派生します。 ランダム リゾルバブル広告をご覧ください。
Key = HKDF(account_key, NULL, UTF8("SASS-RRD-KEY"),16)
IV は concat(Session_nonce, Message_nonce) です。
connection_status_raw_data = concat(connection_state, custom_data, connected_devices)。これは BLE のアドバタイズ ペイロードで定義されています。ここにはメッセージ コードとデータ長があるため、フィールドの長さと型のバイトを含めないでください。
音声の切り替えによって接続が開始されたことを通知する
音声切り替えプロバイダは、音声切り替えによって接続切り替えがトリガーされたかどうかを把握し、異なる動作(音声切り替えイベントのイヤホン通知を無効にするなど)を行う必要がある場合があります。シーカーは、この接続がオーディオ スイッチによって開始された接続であることをプロバイダに通知するメッセージを送信します。
オクテット | データ型 | 説明 | 値 |
---|---|---|---|
0 | uint8 | 音声の切り替え | 0x07 |
1 | uint8 | 音声の切り替えによって接続が開始されたことを通知する | 0x40 |
2 ~ 3 | uint16 | 追加データの長さ | 17 |
4 | uint8 | 音声切り替えによる接続開始の通知 | 様々 0: この接続は音声の切り替えによってトリガーされませんでした 1: この接続は音声の切り替えによって開始されました |
5 ~ 12 | メッセージ ノンス | 変動あり | |
13 ~ 20 | メッセージ認証コード | 変動あり |
表 4.3.4.0: 音声スイッチによって開始された接続を通知する
使用中のアカウント キーを示す
シーカーの複数のアカウントキー(マルチユーザーなど)がプロバイダに関連付けられている場合、シーカーは以下のメッセージを使用して、使用中のアカウントキーを示します。
オクテット | データ型 | 説明 | 値 |
---|---|---|---|
0 | uint8 | 音声の切り替え | 0x07 |
1 | uint8 | 使用中のアカウント キーを示す | 0x41 |
2 ~ 3 | uint16 | 追加データの長さ | 22 |
4 ~ 9 | utf8 | 使用中文字列 | UTF8(「使用中」) |
10 ~ 17 | メッセージ ノンス | 変動あり | |
18 ~ 25 歳 | メッセージ認証コード | 変動あり |
表 4.3.4.1: 使用中のアカウント キーを示す
プロバイダは、このメッセージを受信すると、メッセージ認証コードを検証することで、使用中のアカウント キーを把握できます。
カスタムデータを送信する
アクティブな音声切り替えシーケンサーは、音声ストリームの情報をカスタムデータバイトにカプセル化し、次のメッセージを使用してプロバイダに送信できます。
オクテット | データ型 | 説明 | 値 |
---|---|---|---|
0 | uint8 | 音声の切り替え | 0x07 |
1 | uint8 | カスタムデータを送信する | 0x42 |
2 ~ 3 | uint16 | 追加データの長さ | 17 |
4 | uint8 | カスタムデータ | 変動あり |
5 ~ 12 | メッセージ ノンス | 変動あり | |
13 ~ 20 | メッセージ認証コード | 変動あり |
表 4.3.4.2: カスタムデータを送信する
プロバイダはカスタムデータを受信すると、広告パケットを更新してカスタムデータを含めます。マルチポイント プロバイダの場合は、同じアカウントキーを使用して接続されている別のシーカーにも接続ステータスの変更を通知する必要があります。
接続ドロップ ターゲットを設定する
マルチポイント ヘッドセットで、切断する優先接続が最近使用されていない接続でない場合は、音声の切り替えシーケンサーは、以下のメッセージを使用して、切断するデバイスをプロバイダに伝えることができます。
オクテット | データ型 | 説明 | 値 |
---|---|---|---|
0 | uint8 | 音声の切り替え | 0x07 |
1 | uint8 | 接続ドロップ ターゲットを設定する | 0x43 |
2 ~ 3 | uint16 | 追加データの長さ | 17 |
4 | uint8 | 接続されたデバイスをドロップするターゲット | 様々 1: このデバイス |
5 ~ 12 | メッセージ ノンス | 変動あり | |
13 ~ 20 | メッセージ認証コード | 変動あり |
表 4.3.4.3: ドロップ接続のターゲットを設定する