音声の切り替え
日常業務で複数の音源デバイスを使用するユーザーが増加する中、デバイス間でヘッドセットの使用を管理するためのよりシンプルなソリューションに対する需要が高まっています。音声の切り替えは、ユーザーのアクティビティ(映画の開始など)と優先順位の高いイベント(着信など)に基づいて、デバイス間のヘッドセット接続をシームレスに移行します。
UX の方針
- 接続の切り替えは、ユーザーの操作に応じてすばやく行う必要があります。
- 接続の切り替えは、ユーザーに対して透過的に行い、切り替えが望ましくない場合はユーザーが制御/元に戻せるようにする必要があります。
- 移行ではユーザーのプライバシーを尊重する必要があります。
ロール
音声切り替えシーカー: シーカーは音源デバイス(スマートフォンやタブレットなど)であり、必要に応じて近くのヘッドセットを探します。
音声切り替えプロバイダ: プロバイダは通常、シーカーが切り替えの判断を下すために、その存在と接続ステータスをアドバタイズするヘッドセットです。
要件の概要
スマート切り替えを実現するには、プロバイダは次の要件を満たす必要があります。
名前 | 説明 | 要件 | 必須? |
---|---|---|---|
ページスキャン | 既存の接続がある場合に、別のシーカーからの新しい接続リクエストを受け入れるには。 シングルポイント プロバイダの場合:
|
パフォーマンスを向上させるには、低レイテンシのページ スキャンモード(スキャン間隔が 640 ミリ秒以下)が必要です。 バッテリー寿命とスイッチング パフォーマンスのトレードオフのため、プロバイダはほとんどの場合、デフォルトのページスキャン モードを設定できます(低電力モード、スキャン間隔は 1,280 ミリ秒以下である必要があります)。ただし、次のような状況では低遅延モードを使用する必要があります。
|
必須 |
接続履歴 | 以前の接続に戻り、必要に応じて再生を再開するため。 切り替えの戻りは、Message Stream API を介した通信によってトリガーされます。 必要に応じて再生を再開するには、一時停止している音声イベントをレコードに含める必要があります。 |
接続履歴を維持し、Message Stream API を実装します。 | 必須 |
接続ステータス | シーカーが接続切り替えの判断を行います。接続ステータスには以下が含まれます。
|
BLE アドバタイズメントとメッセージ ストリームに接続ステータスを追加。 | 必須 |
ランタイム機能の変更 | 音声の切り替えは、プロバイダでファームウェアをアップグレードすることで有効にできます。そのため、実行時にシーカーとプロバイダの間で機能を同期する必要があります。 | Message Stream API を実装して、ランタイム機能にアクセスします。 | 必須 |
構成可能な切り替えルール | シーカーがユーザー設定を使用して、既存のアクティブな音声ストリーミングと新しい音声ストリーミング リクエストの優先度を設定できるようにします。 たとえば、音声の切り替えシーカーは、ユーザーがメディア ストリーミングと通話の自動切り替えを有効または無効にできる UI 設定を提供する場合があります。 音声の切り替えシーカーは、メッセージ ストリームを介して切り替えルールを設定、取得します。 |
マルチポイント プロバイダのみ。 Message Stream API を実装して、接続されているデバイス間の切り替えルールを設定できるようにします。 |
任意 |
アクティブなデバイスの切り替え | 音声の切り替えシーカーで接続済みデバイス間の音声の切り替えをシミュレートできるようにします。 音声の切り替えシーカー側に、接続済みのデバイスを簡単に切り替えられる UI がある場合があります。 |
マルチポイント プロバイダのみ。 接続されているデバイス間のアクティブな音源を特定するために、音声切り替えシーカー用の Message Stream API を実装します。 |
必須 |
マルチポイントの切り替えに関する通知 | 音声の切り替えシーカーで切り替え通知を表示させます。 | マルチポイント プロバイダのみ。 マルチポイント切り替えが行われているときに、接続されている音声切り替えシーカーに通知する Message Stream API を実装します。 |
必須 |
広告ペイロード
本プロバイダは、アドバタイジング: 検出できない場合に説明されているファスト ペアリング アカウント データの上に構築された現在の接続ステータスをアドバタイズに含めるものとします。
表 4.2 のバージョンは 0x1 です。
接続ステータス フィールド
オクテット | データの種類 | 説明 | 値 | 必須? |
---|---|---|---|---|
0 | uint8 |
フィールドの長さと型 0bLLLLTTTT
|
0bLLLL0101
|
必須 |
1 | uint8 |
接続状態 0bHAFRSSSS
|
0bHAFRSSSS |
必須 |
2 | uint8 |
カスタムデータ 現時点では、現在の音声ストリーミングの使用方法を説明するために使用されるコンテンツ タイプのみが含まれています。シーカーはそれをプロバイダに送信します。 |
この値は、現在アクティブなストリーミングのシーカーからメッセージ ストリームを介してプロバイダに送信されます。現在アクティブなストリーミングが Seeker からのものでない場合は 0。 | 必須 |
3 - var | 接続済みデバイスのビットマップ 現在プロバイダに接続されているデバイスを示すビットマップ。すべてのボンディング デバイスが順番に配置され、1 つのボンディング デバイスに 1 ビットが対応します。その長さは、プロバイダのボンディング デバイスの数によって異なります。 |
デバイスが現在プロバイダに接続されている場合は 1 に設定され、接続されていない場合は 0 に設定されるマッピングされたビット。 詳しくは、接続済みデバイスのビットマップをご覧ください |
任意 |
表 4.1: 接続ステータス フィールドの元データ
接続フラグ
0bH = オンヘッド検出
- 1 が進行中
- 0、それ以外の場合は頭部なし、または OHD センサーなし
0bA = 接続の可用性
- 1 です。利用可能な接続があります。
- 0、それ以外の場合は 0
0bF = フォーカス モード
- 1 です。フォーカス モードでは、メディアの使用について接続の切り替えは許可されていません(A2DP から A2DP への切り替えはありません)。
- 0、それ以外の場合は 0
0bR = 自動再接続
- 1: 現在の接続がプロバイダによって自動再接続される場合、つまりユーザーによって接続されていない場合(マルチポイントの場合、既存の接続の 1 つが自動再接続された場合は 1 に設定する必要があります)
- 0、それ以外の場合は 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: 接続スイッチを一時的に無効にする(ファームウェアの更新など)
接続済みデバイスのビットマップ
望ましくない接続の切り替えを避けるため、シーカーはヘッドセットが現在どのデバイスに接続されているかを把握しなければならない場合があります。たとえば、ヘッドセットがスマートフォンに接続されているときに、ファミリー メンバーの 1 人がタブレットで 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)
ここで
キーは、次のセクションで定義する使用中のアカウントキーから取得されます。
鍵は、SHA-256 ハッシュ関数を使用して HKDF 関数(IETF RFC 5869)によって生成されます。
Key = HKDF(account_key, NULL, UTF8("SASS-RRD-KEY"),16)
プロバイダは、ここで元のアカウントキーを使用するものとします。つまり、キーの最初のバイトは 0x04 であり、使用パターンには含まれません。
IV(初期ベクトル)は、パディングなしの 2 バイトのアカウントキー データです。つまり、IV は concat(ソルト、14 バイトの 0)です。
接続ステータスの元データは表 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: ランダムに解決可能なデータ
たとえば、ランダム解決可能データに暗号化された接続ステータス フィールドが含まれている場合、復号された結果は 接続ステータス フィールドになります。
改ざんを防ぐため、ランダム解決可能データがアドバタイズメントに含まれる場合は、上記のアカウント キーデータをわずかに変更する必要があります。通常、アカウントキー フィルタを作成するときに、アカウント キー フィルタとソルトを組み合わせて値 V が生成されます。代わりに、ランダム解決可能データもアドバタイズされている場合は、値 V を次のように構成する必要があります。
V = concat(account_key, salt, random_resolvable_data)
バッテリー データとランダム解決可能データの両方がアドバタイズされている場合、V を次のように構築する必要があります。
V = concat(account_key, salt, battery_data, random_resolvable_data)
使用中のアカウントキー
接続の切り替えはアカウント ベースであるため、プロバイダは現在の接続のアカウント情報を BLE アドバタイズに含める必要があります。現在接続されているデバイスがオーディオ スイッチ シーカーである場合、プロバイダはこのシーカーに関連付けられているアカウントキーを取得し、このアカウントキーを使用して接続ステータス フィールドを暗号化できます。接続された音源がオーディオ スイッチのシーカーでない場合、プロバイダは最後に使用されたアカウントキーを使用する必要があります。
アカウント キー フィルタを計算する前に、プロバイダはアカウントキーの最初のバイトを変更して、次のいずれかの使用パターンを含める必要があります。
- 0b00000100
このアカウントキーは現在使用されていません。
これがデフォルトのキーです(アカウント キーを参照)。 - 0b00000101
このアカウントキーは、最後に使用されたアカウントキーです。
接続ステータス フィールドはこのアカウントキーによって暗号化されます。現在の接続状態に関するアカウント キー情報が存在しない場合、接続されているデバイスがないか、接続されているデバイスが音声切り替えシーカーではないことが考えられます。 - 0b00000110
このアカウントキーは、使用中のアカウントキーです。
接続ステータス フィールドはこのアカウントキーによって暗号化され、現在接続されているデバイスはこのアカウントキーに関連付けられています。
音声の切り替えペイロードの概略図
次の図は、音声切り替えペイロードの概略図を示しています。
メッセージ
接続されると、シーカーとプロバイダはメッセージ ストリームを使用して、音声切り替え機能の同期、接続切り替えのトリガー、切り替え設定の設定と取得、接続ステータスの通知などを行うことができます。次のように、音声の切り替えに固有のメッセージ グループとメッセージ コードを作成します。
メッセージ グループ名 | 値 |
---|---|
音声の切り替え | 0x07 |
各メッセージ コードの詳細については、以降のセクションで説明します。
メッセージ コード名 | 値 | マルチポイントのみ | ギフトの送り主 | 回答者 | 暗号化 | MAC | ACK |
---|---|---|---|---|---|---|---|
音声の切り替えの機能を取得する | 0x10 | N | 両方 | 両方、コード 0x11 を使用 | N | N | N |
音声の切り替え機能の通知 | 0x11 | N | 両方 | 両方 | N | ○ | ○ |
マルチポイント状態を設定する | 0×12 | ○ | 探求者 | 提供元 | N | ○ | ○ |
切り替え設定を行う | 0x20 | ○ | 探求者 | 提供元 | N | ○ | ○ |
移行設定を取得する | 0×21 | ○ | 探求者 | プロバイダ(コード 0x22 経由) | N | N | N |
移行設定の通知 | 0×22 | ○ | 提供元 | 探求者 | N | N | N |
アクティブな音源を(接続済みのデバイスに)切り替える | 0×30 | ○ | 探求者 | 提供元 | N | ○ | ○ |
接続を解除したデバイスに戻す | 0x31 | N | 探求者 | 提供元 | N | ○ | ○ |
マルチポイント スイッチ イベントの通知 | 0×32 | ○ | 提供元 | 探求者 | N | N | N |
接続ステータスを取得する | 0x33 | ○ | 探求者 | プロバイダ(コード 0x34 経由) | N | N | N |
接続ステータスを通知する | 0x34 | ○ | 提供元 | 探求者 | ○ | N | N |
音声の切り替えで開始された接続を通知する | 0x40 | N | 探求者 | 提供元 | N | ○ | ○ |
使用中アカウントキーを示す | 0×41 | N | 探求者 | 提供元 | N | ○ | ○ |
カスタムデータを送信する | 0×42 | N | 探求者 | 提供元 | N | ○ | ○ |
ドロップ接続ターゲットを設定する | 0x43 | ○ | 探求者 | 提供元 | N | ○ | ○ |
表 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、それ以外の場合は 0
ビット 1: マルチポイント構成の柔軟性
- 1: デバイスがマルチポイントをサポートし、オンとオフの切り替えができる場合
- 0、それ以外の場合は 0(マルチポイントをサポートしていないか、マルチポイントは常にオン)
ビット 2: マルチポイントの現在の状態
- 1(マルチポイントがオンの場合)
- 0、それ以外の場合は 0
ビット 3: オンヘッド検出
- 1: このデバイスが装着検知をサポートしている場合(装着検知が現在オフになっている場合でも)
- 0、それ以外の場合は 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 | アクティブな音源を(接続済みのデバイスに)切り替える | 0×30 |
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 - 冗長デバイス アクション)を含む NAK を送信できます。
接続解除されたデバイスに戻す
接続の切り替えが不要な場合、ユーザーは切り替えを元に戻すことができます。また、状況によっては、中断を最小限に抑えるためにオーディオ接続を復元するのが合理的です。シーカーは以下のメッセージを使用して切り替えを戻します。
オクテット | データ型 | 説明 | 値 |
---|---|---|---|
0 | uint8 | 音声の切り替え | 0x07 |
1 | uint8 | 接続解除されたデバイスに戻す | 0x31 |
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 | 切り替えの理由 | 変動 0x00: 未指定 0x01: A2DP ストリーミング 0x02: HFP |
5 | uint8 | ターゲット デバイス | 変動する 0x01: このデバイス 0x02: 別の接続済みデバイス |
6 ~ n | UtF8 | ターゲット デバイス名 ターゲット デバイスが Audio Switch Seeker の場合は、シーカーが送信した名前を使用。それ以外の場合は 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)
BLE アドバタイジング ペイロードで定義される connection_status_raw_data = concat(connection_state, custom_data,connected_devices)。ここにメッセージ コードとデータ長が存在するため、フィールドの長さと型のバイトは含めないでください。
音声の切り替えで開始された接続を通知する
音声切り替えのプロバイダは、さまざまなリアクション(音声切り替えイベントでイアコンを無効にするなど)を行うために、音声の切り替えによって接続の切り替えがトリガーされるかどうかを把握しなければならない場合があります。シーカーは、この接続が音声の切り替えによって開始された接続であることをプロバイダに通知するためのメッセージを送信します。
オクテット | データ型 | 説明 | 値 |
---|---|---|---|
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 | 使用中のアカウントキーを示す | 0×41 |
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 Embed SDK ライブラリをご覧ください