音声の切り替え
複数のオーディオ ソース デバイスを使用して業務を行うユーザーが増えています ヘッドセットを管理するシンプルなソリューションへの需要が高まっています。 複数のデバイス間で 使用することを確認できます音声の切り替えでヘッドセットの接続をシームレスに切り替える ユーザー アクション(映画の開始など)に基づいてデバイス間で優先順位を設定し、 できます。
UX の原則
- 接続の切り替えは、ユーザーの操作に基づいて迅速に行う必要があります。
- 接続の切り替えは、ユーザーがその操作を中断することなく、 切り替えが望ましくない場合は、制御/元に戻します。
- デバイスを切り替える際は、ユーザーのプライバシーを尊重する必要があります。
ロール
音声の切り替えシーカー: シーカーは音声ソース デバイス( 接続できる近くのヘッドセットを探します(該当する場合)。
オーディオ スイッチ プロバイダ: プロバイダは通常、オーディオ スイッチをアドバタイズする プレゼンスと接続ステータスを、シーカーが切り替えの判断材料として使えるようにします。
要件の概要
スマート切り替えを実現するには、プロバイダは次の要件を満たす必要があります。
名前 | 説明 | 要件 | 必須かどうか |
---|---|---|---|
ページスキャン | 既存の接続がある場合に、別のシーカーからの新しい接続リクエストを受け入れるには シングルポイント プロバイダの場合:
|
パフォーマンスを改善するには、低遅延のページスキャン モード(スキャン間隔が 640 ミリ秒以下)が必要です。 バッテリー寿命と切り替えパフォーマンスとのトレードオフのため、プロバイダはほとんどの場合にデフォルトのページスキャン モードを設定できます(低電力モードでは、スキャン間隔は 1,280 ミリ秒以下)。ただし、低遅延モードは次の状況で使用する必要があります。
|
必須 |
接続履歴 | 以前の接続に切り替えて再生を再開するには(該当する場合)。 戻る場合は、Message Stream API を介した通信によってトリガーされます。 必要に応じて、再生を再開するには、一時停止した音声イベントを録音に含める必要があります。 |
接続履歴を維持し、メッセージ ストリーム API を実装する。 | 必須 |
接続ステータス | シーカーが接続の切り替えの判断を行えるようにします。接続ステータスには次のものがあります。
|
BLE アドバタイズメントとメッセージ ストリームに接続ステータスを含める。 | 必須 |
ランタイム機能の変更 | 音声の切り替えは、プロバイダのファームウェアをアップグレードすることで有効にできるため、実行時にシーカーとプロバイダ間で機能を同期する必要があります。 | Message Stream API を実装してランタイム機能にアクセスする。 | 必須 |
設定可能な切り替えルール | ユーザー設定により、既存のアクティブな音声ストリーミングと新しい音声ストリーミングのリクエストの優先度をシーカーに設定できます。 たとえば、音声の切り替えシーカーでは、ユーザーがメディア ストリーミングと通話の自動切り替えを有効または無効にできる UI 設定を提供できます。 音声の切り替えシーカーは、メッセージ ストリーム経由で切り替えルールの設定と取得を行います。 |
マルチポイント プロバイダのみ。 Message Stream API を実装して、コネクテッド デバイス間の切り替えルールを構成できるようにします。 |
省略可 |
アクティブなデバイスの切り替え | 音声の切り替えシーカーで、接続済みのデバイス間での音声の切り替えをシミュレートします。 音声の切り替えシーカー側には、接続済みのデバイスを簡単に切り替えるための UI が用意されている場合があります。 |
マルチポイント プロバイダのみ。 音声の切り替えシーカー用の Message Stream API を実装して、接続済みのデバイス間でアクティブな音源を特定します。 |
必須 |
マルチポイント切り替えの通知 | 音声の切り替えシーカーに切り替え通知を表示させることができます。 | マルチポイント プロバイダのみ。 メッセージ ストリーム API を実装して、マルチポイントの切り替えが行われたときに接続された音声の切り替えシーカーに通知します。 |
必須 |
広告ペイロード
プロバイダは、現在の接続状態をアドバタイズに含めるものとし、 ファスト ペアリングのアカウント データに基づいて作成されます。 広告: 検出できない場合。
なお、表 4.2 のバージョンは 0x1 です。
接続ステータス フィールド
オクテット | データ型 | 説明 | 値 | 必須かどうか |
---|---|---|---|---|
0 | uint8 |
フィールドの長さとタイプ 0bLLLLTTT
|
0bLLLL0101
|
必須 |
1 | uint8 |
接続状態 0bHAFRSSSS
|
0bHAFRSSSS |
必須 |
2 | uint8 |
カスタムデータ 現時点では、現在の音声ストリーミングの使用状況を記述するために使用されるコンテンツ タイプのみが含まれています。シーカーはそれをプロバイダに送信します。 |
値は、現在アクティブなストリーミングのシーカーからメッセージ ストリーム経由でプロバイダに送信されます。現在アクティブなストリーミングがシーカーからのものでない場合は 0。 | 必須 |
3 - 変数 | 接続済みのデバイス ビットマップ 現在プロバイダに接続されているデバイスを示すビットマップ。1 つのボンディング デバイスに 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 Audio - 制御なしのメディア ストリーミング
- 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(呼び出し)。
接続済みデバイスのビットマップ
望ましくない接続の切り替えを避けるために、シーカーはどの接続が ヘッドセットが現在接続されているデバイスの数。たとえば、ヘッドセットが スマートフォンに接続している場合、ユーザーは ファミリー メンバーの 1 人が 。
なお、このビットマップは匿名であるため、シーカーは他のビットマップを デバイスはプロバイダとボンディングされます。たとえば、次の 5 つのボンディング デバイスがあるとします。
- 0: ノートパソコン(0bx0000000)
- 1: phoneA(0b0x000000)
- 2: phoneB(0b00x00000)
- 3: タブレット(0b000x0000)
- 4: TV(0b0000x000)
現在接続中のデバイスがノートパソコンとタブレットの場合、 0b10010000 になります。どうしても変更できない場合は、 例:ユーザーがヘッドセットを初期状態にリセットしたとき、またはボンディング デバイスのカウントが行われたとき できます。
ランダムに解決可能な広告
トラッキングを回避し、ユーザーのプライバシーを尊重するため、プロバイダはローテーションを行い、 AES-CTR を使用してアカウントキーでフィールドを暗号化します。
encrypted_connection_status_field = connection_status_raw_data ^ AES(Key, IV)
ここで
キーは、使用中のアカウント キーから導出されます。これは、 これについては次のセクションで定義します。
SHA-256 を使用して、HKDF 関数(IETF RFC 5869)によって鍵が生成されます。 使用します。
Key = HKDF(account_key, NULL, UTF8("SASS-RRD-KEY"),16)
プロバイダはここで元のアカウントキー、すなわち最初のバイトを使用するものとする 0x04 であり、use パターンには含まれていません。
IV(初期ベクトル)は、アカウントキーデータの 2 バイトのソルトで、 つまり、IV は concat(ソルト、14 バイトの ZERO)です。
接続ステータスの元データは表 4.1 で定義されています。 ソルトと RPA は再生成が必要です。 同じ広告期間を選択します
これにより、暗号化された接続ステータス フィールドは、 アカウントキー データはローテーションされます。
BLE アドバタイズメントの構造は次のとおりです。
オクテット | データ型 | 説明 | 値 | 必須かどうか |
---|---|---|---|---|
0 | uint8 |
バージョンとフラグ | 0x10 | 必須 |
1 ~t | アカウントキー データ | 場合によって異なる | 必須 | |
t+1~s | バッテリーデータ | 場合によって異なる | 省略可 | |
s+1 - var | ランダムで解決可能なデータ | 場合によって異なる | アカウントキーのリストが空でない場合は必須、 それ以外の場合は除外されます。 |
表 4.2: ランダム解決可能なデータを伴う BLE アドバタイズ
ランダム解決可能なデータには以下が含まれます。
オクテット | データ型 | 説明 | 値 | 必須かどうか |
---|---|---|---|---|
0 | uint8 |
フィールドの長さとタイプ 0bLLLLTTT
|
0bLLLL0110
|
必須 |
1 - 変数 | 暗号化データ | 場合によって異なる | 必須 |
表 4.2.1: ランダム解決可能なデータ
たとえば、ランダム解決可能なデータに暗号化された接続が含まれている場合、 場合、復号された結果は 接続ステータス フィールドをご覧ください。
改ざんを防ぐため、上記のアカウントキーデータをわずかに変更する必要があります ランダム解決可能なデータがアドバタイズに含まれている場合。通常、 アカウントキーフィルタを作成すると、値 V はアカウント ソルトでフィルタします。ランダム解決可能なデータも 値 V は次のように構築する必要があります。
V = concat(account_key, salt, random_resolvable_data)
バッテリー データとランダム解決可能なデータの両方がアドバタイズされている場合、V は 次のように構成できます。
V = concat(account_key, salt, battery_data, random_resolvable_data)
使用中のアカウントキー
接続の切り替えはアカウント ベースであるため、プロバイダは BLE アドバタイズ内の現在の接続のアカウント情報。もし 現在接続されているデバイスが音声の切り替えシーカーである場合、プロバイダは音声の切り替えを このシーカーに関連付けられたアカウントキーを取得し、このアカウントキーを使用して 接続ステータス フィールドを暗号化します。接続されている音源が音声以外の場合 シーカーを切り替える場合、プロバイダは最後に使用したアカウント キーを使用する必要があります。
アカウント キー フィルタを計算する前に、プロバイダは最初の アカウントキーのバイトの 1 バイトに相当し、使用パターンとして次のいずれかを含めることができます。
- 0b00000100
このアカウント キーは使用されていません。
これがデフォルトのキーです(アカウント キーをご覧ください)。 - 0b00000101
このアカウントキーは、最後に使用されたアカウントキーです。
接続ステータス フィールドは、このアカウントキーによって暗号化されます。「 アカウント情報が失われた場合は、 デバイスに接続されているか、接続済みのデバイスが音声の切り替えシーカーではありません。 - 0b00000110
このアカウントキーは使用中のアカウントキーです。
接続ステータス フィールドは、このアカウントキーによって暗号化され、 このアカウントキーに関連付けられている
音声切り替えペイロードの概略図
下の図はオーディオ切り替えペイロードの概略図です。
![](https://developers.google.cn/nearby/fast-pair/images/SASS-ble-payload-schematic.png?authuser=6&hl=ja)
メッセージ
接続されると、シーカーとプロバイダはメッセージ ストリームを使用して音声を同期できます スイッチ機能、接続スイッチのトリガー、切り替えの設定と取得 設定、接続ステータスの通知などができます。メッセージグループを作成し 以下に、音声の切り替えに固有のメッセージ コードを示します。
メッセージ グループ名 | 値 |
---|---|
音声の切り替え | 0x07 |
各メッセージ コードの詳細については、以降のセクションで説明します。
メッセージ コード名 | 値 | マルチポイントのみ | ギフトの送り主 | 回答者 | 暗号化 | MAC | ACK |
---|---|---|---|---|---|---|---|
音声の切り替え機能を取得する | 0x10 | N | 両方 | 両方(コード 0x11 を使用) | N | N | N |
音声の切り替え機能を通知 | 0x11 | N | 両方 | 両方 | N | ○ | Y |
マルチポイント状態を設定する | 0×12 | Y | シーカー | プロバイダ | N | ○ | Y |
移行の設定を設定する | 0x20 | Y | シーカー | プロバイダ | N | ○ | Y |
移行の設定を取得する | 0×21 | Y | シーカー | プロバイダ、コード 0x22 経由 | N | N | N |
移行設定を通知 | 0×22 | Y | プロバイダ | シーカー | N | N | N |
アクティブな音源を切り替える(接続済みのデバイスへ) | 0x30 | Y | シーカー | プロバイダ | N | ○ | Y |
元に戻す | 0×31 | N | シーカー | プロバイダ | N | ○ | Y |
マルチポイント切り替えイベントを通知 | 0×32 | Y | プロバイダ | シーカー | N | N | N |
接続ステータスを取得する | 0x33 | Y | シーカー | プロバイダ、コード 0x34 を使用 | N | N | N |
接続ステータスを通知 | 0x34 | Y | プロバイダ | シーカー | Y | N | N |
「音声の切り替えが開始した接続を通知」 | 0x40 | N | シーカー | プロバイダ | N | ○ | Y |
使用中のアカウント キーを示す | 0x41 | N | シーカー | プロバイダ | N | ○ | Y |
カスタムデータを送信する | 0×42 | 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 | マルチポイント状態を設定する | 0×12 |
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 | 切り替え設定を取得する | 0×21 |
2 ~ 3 | uint16 | 追加データ長 | 0 |
表 4.3.2.1: 切り替え設定の取得
切り替え設定を通知
オクテット | データ型 | 説明 | 値 |
---|---|---|---|
0 | uint8 | 音声の切り替え | 0x07 |
1 | uint8 | 切り替え設定を通知 | 0×22 |
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 スイッチ、2 番目に接続されたデバイスへの 0 スイッチ
- ビット 1: 切り替え後、スイッチでの再生が再開され、それ以外の場合は 0 になります。 再生の再開とは、プロバイダがシーカーに再生通知を送信することを意味する 必要があります。以前の状態(切り替え前の状態)が、 プロバイダはこのフラグを無視する必要があります。
- ビット 2: スイッチがオフのデバイスで 1 は SCO を拒否、それ以外の場合は 0
- ビット 3: スイッチアウェイ機器で Bluetooth を 1 切断し、そうでない場合は 0。
- ビット 4 ~ 7: 予約済み。
音声の切り替えシーカーは音声の状態を常に正しく把握しているとは限らないため、 「このデバイスへのスイッチ」を受け取るためにプロバイダがユーザーが検索したときに すでにアクティブなデバイスです。この場合、シーカーに正しい UI を表示するために、 プロバイダがエラーの理由(0x4 - デバイスの冗長なアクション)を添えて NAK を送信できる。
セットのメンバーが複数存在する LE Audio プロバイダの場合、プロバイダは シーカーからすべてのメンバーを切断します。切断しないと、シーカーの Bluetooth スタックが シーカーはプロバイダに再接続します。
戻す(切断されたデバイスに切り替える)
接続の切り替えが不要な場合は、切り替えを元に戻すことができます。 状況によっては、オーディオ接続を復元して最小限のレイテンシを 困難です。シーカーは以下のメッセージを使用して、切り替えをトリガーします。
オクテット | データ型 | 説明 | 値 |
---|---|---|---|
0 | uint8 | 音声の切り替え | 0x07 |
1 | uint8 | 戻す(切断されたデバイスに切り替える) | 0×31 |
2 ~ 3 | uint16 | 追加データ長 | 17 |
4 | uint8 | アクティビティを元に戻す | 可変 0x01: 元に戻す 0x02: 戻って再生を再開 |
5 ~ 12 | メッセージのノンス | 場合によって異なる | |
13 ~ 20 | メッセージ認証コード | 場合によって異なる |
表 4.3.3.1: 切り替える(切断されたデバイスへ)
マルチポイント プロバイダの場合、接続を切り替えるために、プロバイダは 一方の音源デバイスと接続し、もう一方の音源デバイスで音声セッションを一時停止します。 あります。たとえば、マルチポイント ヘッドセットが タブレットと、サポートされている 3 つ目の音声切り替えデバイスが必要です。ユーザーが次のデバイスで動画を視聴している: 通知をミュートにすることができます。スマートフォンが起動して ヘッドセットの接続スイッチで、3 台目のデバイスの メディアは一時停止しながら、スマートフォンに接続するために セッションを開いてスマートフォンから着信音を取得します。お客様が拒否した場合 ヘッドセットが「戻って再生を再開」するよう求められることがあります。 このリクエストを受け取ったヘッドセットは、3 台目のデバイスに再接続する必要があります。 タブレットで一時停止した動画の再生を再開する。
マルチポイント切り替えイベントを通知
マルチポイントの切り替えイベントが発生していることをユーザーに認識させるには、音声の切り替え シーカーはユーザーに通知を表示することがあります。プロバイダは接続時に接続した 音声の切り替えを求めているユーザー。
オクテット | データ型 | 説明 | 値 |
---|---|---|---|
0 | uint8 | 音声の切り替え | 0x07 |
1 | uint8 | マルチポイント切り替えイベントを通知 プロバイダはスイッチごとに通知を送信(音声の切り替え、シーカーから音声以外の切り替え、シーカーから音声以外の切り替え、シーカーから音声の切り替え、音声の切り替え、シーカーから音声の切り替えなど) |
0×32 |
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 | ターゲット デバイス名 ターゲット デバイスが音声の切り替えシーカーの場合は、シーカーが送信した名前を使用します。それ以外の場合は、アドレスの最後の 2 バイトを使用して、該当しない場合は BT 名を使用します。 |
場合によって異なる |
表 4.3.3.2: マルチポイント スイッチ イベントの通知
接続ステータスを取得する
シーカーはプロバイダから現在の接続ステータスを取得できます。
オクテット | データ型 | 説明 | 値 |
---|---|---|---|
0 | uint8 | 音声の切り替え | 0x07 |
1 | uint8 | 接続ステータスを取得する | 0x33 |
2 ~ 3 | uint16 | 追加データ長 | 0 |
表 4.3.3.3: 接続ステータスの取得
プロバイダはこのメッセージを受け取った時点で、 0x34、 接続ステータスを通知。
接続ステータスを通知
BLE アドバタイジング ペイロードで定義されているように、 マルチポイント プロバイダ(接続ステータスが変更された場合) アドバタイズするパケットを送信するため、プロバイダは接続されているシーカーに 変更に関して同じアカウントキーを使用していることを確認します。プロバイダが接続されている 音声の切り替えシーカーと音声以外の切り替えシーカー(音声以外の切り替えのシーカー)を シーカーがアクティブである場合、プロバイダは接続されている音声にも通知する必要があります。 (Seeker のアカウントキーを使用して)接続ステータスについてシーカーを切り替えます。
オクテット | データ型 | 説明 | 値 |
---|---|---|---|
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, BLE で定義される アドバタイジング ペイロード フィールドの長さと型のバイトは含めないでください。これは、 ここにはメッセージコードとデータ長があります
音声の切り替えが開始した接続を通知
音声の切り替え プロバイダは、接続の切り替えがトリガーされたかどうかを知ることが必要になる場合があります 音声の切り替えでさまざまなリアクションを持たせることができます(例:音声のイアコンを無効にする イベントを切り替えます。シーカーは、このメッセージがプロバイダに届くことを 音声の切り替えによって開始された接続でした。
オクテット | データ型 | 説明 | 値 |
---|---|---|---|
0 | uint8 | 音声の切り替え | 0x07 |
1 | uint8 | 音声の切り替えが開始した接続を通知 | 0x40 |
2 ~ 3 | uint16 | 追加データ長 | 17 |
4 | uint8 | 音声の切り替えによって接続が開始したことを示す | 可変 0: この接続は音声の切り替えによってトリガーされていません 1: 音声の切り替えによって開始された接続 |
5 ~ 12 | メッセージのノンス | 場合によって異なる | |
13 ~ 20 | メッセージ認証コード | 場合によって異なる |
表 4.3.4.0: Notify Audio 切り替え開始の接続
使用中のアカウント キーを示す
シーカーの複数のアカウント(例: マルチユーザー)が 参照している場合、シーカーは以下のメッセージを使用して、 確認します。
オクテット | データ型 | 説明 | 値 |
---|---|---|---|
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 | カスタムデータを送信する | 0×42 |
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: ドロップ接続ターゲットの設定
リファレンス実装
リファレンス実装については、 Nearby 埋め込み SDK ライブラリをご覧ください。