音声の切り替え
複数の音源デバイスを使用して日々のタスクを実行するユーザーが増えており、複数のデバイスにまたがるヘッドセットの使用を簡素化するソリューションに対する需要が高まっています。音声の切り替えは、ユーザーのアクティビティ(映画の再生など)と優先イベント(着信など)に基づいて、デバイス間のヘッドセット接続をシームレスに移行します。
UX の方針
- 接続切り替えはユーザーの操作に基づいて迅速に行う必要があります。
- 接続切り替えは、ユーザーが望まない場合に制御/元に戻すことができるように、透過的である必要があります。
- 切り替えはユーザーのプライバシーを尊重する必要があります。
ロール
音声切り替えシーカー: シーカーは音源デバイス(スマートフォンやタブレット)で、該当する場合は、接続可能な付近のヘッドセットを探します。
オーディオ スイッチ プロバイダ: 通常、プロバイダは、シーカーの判断を下すために、自身の存在と接続ステータスをアドバタイズするヘッドセットです。
要件の概要
スマート スイッチングを実現するには、プロバイダは以下の要件を満たす必要があります。
名前 | 説明 | 要件 | 必須 |
---|---|---|---|
ページのスキャン | 既存の接続がある場合に、別の Seeker からの新しい接続リクエストを受け入れるには、 シングル ポイント プロバイダの場合:
|
パフォーマンスを向上させるには、低レイテンシのページスキャン モード(スキャン間隔を 640 ミリ秒以下にする必要があります)です。 バッテリー駆動時間とスイッチング パフォーマンスとのトレードオフを考慮して、プロバイダはほとんどの場合、デフォルトのページスキャン モードを設定できます(低電力モード、スキャン間隔は 1,280 ミリ秒以下にしてください)。ただし、以下の場合は低レイテンシ モードを使用する必要があります。
|
必須 |
接続履歴 | 前の接続に切り替えて再生を再開する(該当する場合)。 切り替えは、Message Stream API を介した通信によってトリガーされます。 該当する場合、再生を再開するには、一時停止するオーディオ イベントをレコードに含める必要があります。 |
接続履歴を維持し、Message Stream API を実装する。 | 必須 |
接続ステータス | 検索ユーザーが接続切り替えの判断を行う場合。接続ステータスは次のとおりです。
|
BLE アドバタイズとメッセージ ストリームに接続ステータスを含めます。 | 必須 |
ランタイム機能の変更 | オーディオ スイッチを有効にするには、プロバイダのファームウェアをアップグレードし、実行時に Seeker とプロバイダ間で機能を同期する必要があります。 | Message Stream API を実装してランタイム機能にアクセスする。 | 必須 |
構成可能な切り替えルール | ユーザー設定を使用して、既存のアクティブな音声ストリーミングと新しい音声ストリーミング リクエストの優先度を設定します。 たとえば、音声の切り替え Seeker では、ユーザーがメディア ストリーミングと通話の自動切り替えを有効または無効にできる UI 設定を提供している場合があります。 音声の切り替えシーカーは、メッセージ ストリームで切り替えルールを設定し、取得します。 |
マルチポイントのプロバイダのみ。 Message Stream API を実装して、接続されたデバイス間の切り替えルールを設定可能にします。 |
任意 |
アクティブなデバイスの切り替え | 音声の切り替えシーカーに、接続済みデバイス間の音声の切り替えをシミュレートします。 音声切り替えのシーカー側には、接続されているデバイスを簡単に切り替えることができます。 |
マルチポイント プロバイダのみ。 オーディオ スイッチ シーカー用の Message Stream API を実装して、接続済みのデバイス間のアクティブな音源を特定します。 |
必須 |
マルチポイントの切り替え通知 | 「音声の切り替え」のシーカーに、切り替え通知を表示させます。 | マルチポイント プロバイダのみ。 マルチストリーム切り替えが起こったときに、接続された音声切り替えシーカーに通知するように Message Stream API を実装します。 |
必須 |
広告ペイロード
プロバイダは、広告: 検出できない場合に記載されているファスト ペアのアカウント データの上に構築された現在の接続ステータスを広告に含めるものとします。
テーブル 4.2 のバージョンは 0x1 です。
接続ステータス フィールド
オクテット | データ型 | 説明 | 値 | 必須 |
---|---|---|---|---|
0 | uint8 |
フィールドの長さと型 0bLLLLTTTT
|
0bLLLL0101
|
必須 |
1 | uint8 |
接続状態 0bHAFRSSSS
|
0bHAFRSSSS |
必須 |
2 | uint8 |
カスタムデータ 現時点では、現行の音声ストリーミングの使用を記述するために使用されるコンテンツ タイプのみが含まれています。検索者はプロバイダに情報を送信します。 |
この値は、現在アクティブなストリーミングのシーカーからメッセージ ストリームを介してプロバイダに送信されます。0: アクティブなストリーミングが Seeker からのものでない場合は 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: 接続スイッチを一時的に無効にする(ファームウェアの更新など)
コネクテッド デバイスのビットマップ
望ましくない接続切り替えを避けるには、ヘッドセットが現在接続されているデバイスをシーカーが把握する必要があります。たとえば、ヘッドセットがスマートフォンに接続されているときに、家族の一人がタブレットで 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 は連結(ソルト、14 バイト ZERO)です。
接続ステータスの元データは表 4.1 で定義されています。接続ステータスが変更された場合、ソルトと RPA を同じ広告期間中に再生成する必要があります。
これにより、暗号化された接続ステータス フィールドがアカウントキー データのローテーションと同時にローテーションします。
BLE アドバタイズは以下のように構成されます。
オクテット | データ型 | 説明 | 値 | 必須 |
---|---|---|---|---|
0 | uint8 |
バージョンとフラグ | 0x10 | 必須 |
1 ~t | アカウント キーデータ | 場合によって異なる | 必須 | |
t+1~s | バッテリー データ | 場合によって異なる | 任意 | |
s+1~var | 解決可能なランダムなデータ | 場合によって異なる | アカウントキーのリストが空でない場合は必須、それ以外の場合は です。 |
表 4.2: ランダムな解決可能なデータを使用した BLE アドバタイズ
解決可能なランダムなデータには次のものが含まれます。
オクテット | データ型 | 説明 | 値 | 必須 |
---|---|---|---|---|
0 | uint8 |
フィールドの長さと型 0bLLLLTTTT
|
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 アドバタイズに含める必要があります。現在接続されているデバイスがオーディオ スイッチ Seeker の場合、プロバイダは、この Seeker に関連付けられているアカウントキーを取得し、このアカウントキーを使用して接続ステータス フィールドを暗号化できる必要があります。接続されている音源が音声以外のスイッチシーカーの場合、プロバイダは最後に使用したアカウント キーを使用する必要があります。
アカウントキー フィルタを計算する前に、プロバイダはアカウントキーの最初のバイトを変更して、使用パターンに次のいずれかを含める必要があります。
- 0b00000100
このアカウントキーは使用されていません。
これがデフォルトです(アカウントキーをご覧ください)。 - 0b00000101
このアカウントキーは、最後に使用されたアカウントキーです。
接続ステータス フィールドは、このアカウント鍵によって暗号化されています。現在の接続状態に関するアカウント キー情報がありません。接続されているデバイスがないか、接続されたデバイスがオーディオ スイッチ シーカーでない可能性があります。 - 0b00000110
このアカウントキーは、使用中のアカウントキーです。
接続ステータス フィールドは、このアカウントキーによって暗号化されており、現在接続されているデバイスがこのアカウントキーに関連付けられています。
オーディオ スイッチ ペイロードの概略図
次の図は、オーディオ スイッチ ペイロードの概略図を示しています。

メッセージ
接続後、シーカーとプロバイダはメッセージ ストリームを使用して音声の切り替え機能の同期、接続スイッチのトリガー、切り替え設定の設定と取得、接続ステータスの通知などを行うことができます。次のように、音声の切り替えに特化したメッセージ グループとメッセージ コードを作成します。
メッセージ グループ名 | 値 |
---|---|
音声の切り替え | 0x07 |
以降のセクションでは、各メッセージ コードについて詳しく説明します。
メッセージ コード名 | 値 | マルチポイントのみ | ギフトの送り主 | 回答者 | 暗号化 | MAC | ACK |
---|---|---|---|---|---|---|---|
音声の切り替え機能を利用する | 0x10 | × | 両方 | どちらもコード 0x11 を使用 | × | × | × |
音声の切り替え機能を通知する | 0x11 | × | 両方 | 両方 | × | ○ | ○ |
マルチポイントの状態を設定する | 0×12 | ○ | シーカー | プロバイダ | × | ○ | ○ |
切り替えの設定を指定する | 0x20 | ○ | シーカー | プロバイダ | × | ○ | ○ |
切り替えの設定を取得する | 0×21 | ○ | シーカー | プロバイダ(コード 0x22 を使用) | × | × | × |
切り替えの設定を通知する | 0×22 | ○ | プロバイダ | シーカー | × | × | × |
アクティブな音源を(接続済みのデバイスに)切り替える | 0×30 | ○ | シーカー | プロバイダ | × | ○ | ○ |
元に戻す(切断されたデバイスへ) | 0×31 | × | シーカー | プロバイダ | × | ○ | ○ |
マルチポイントの切り替えイベントの通知 | 0×32 | ○ | プロバイダ | シーカー | × | × | × |
接続ステータスを取得する | 0x33 | ○ | シーカー | プロバイダ(コード 0x34) | × | × | × |
接続ステータスの通知 | 0x34 | ○ | プロバイダ | シーカー | ○ | × | × |
音声の切り替えが完了したことを通知する | 0x40 | × | シーカー | プロバイダ | × | ○ | ○ |
使用中のアカウントキーを示す | 0×41 | × | シーカー | プロバイダ | × | ○ | ○ |
カスタムデータを送信する | 0×42 | × | シーカー | プロバイダ | × | ○ | ○ |
ドロップ接続の目標を設定する | 0×43 | ○ | シーカー | プロバイダ | × | ○ | ○ |
表 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 | プロバイダ の音声切り替え機能フラグ。これが Seeker によって送信される場合、この 2 バイトは無視されます。 |
異なります 音声の切り替え機能のフラグをご覧ください |
8 ~ 15 人 | メッセージノンス - Seeker から送信された場合のみ必須 |
場合によって異なる | |
16 ~ 23 | メッセージ認証コード : Seeker から送信された場合のみ必須 |
場合によって異なる |
表 4.3.1.1: 音声の切り替えの通知
音声の切り替え機能のフラグ
ビット 0(オクテット 6、MSB): オーディオ スイッチの状態
- 1(音声の切り替えの状態がオンの場合)
- 0、それ以外の場合は
ビット 1: マルチポイント構成
- 1。デバイスがマルチポイントをサポートし、オンとオフを切り替えられる場合
- それ以外の場合は 0(マルチポイントをサポートしていないか、マルチポイントが常にオン)
ビット 2: マルチポイントの現在の状態
- 1(マルチポイントがオンの場合)
- 0、それ以外の場合は
ビット 3: オンヘッド検出
- 1、このデバイスがオンヘッド検出をサポートしている場合(オンヘッド検出をオフにしている場合でも)
- 0、それ以外の場合は
ビット 4: オンヘッド検出の現在の状態
- 1(装着センサーがオンの場合)
- 0 に設定すると、オンヘッド検出がサポートされなくなります(オンヘッド検出は無効になります)。
その他のビットはすべて予約されています。デフォルトは 0 です。
マルチポイントの状態を設定する
「音声の切り替え」機能では、ユーザーがマルチポイント機能のオンとオフを切り替える設定を利用できる場合があります。Seeker は、次のメッセージを使用して、マルチポイント状態をプロバイダに設定します。
オクテット | データの種類 | 説明 | 値 |
---|---|---|---|
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 つのスイッチ、2 番目の接続済みデバイスへの 0 のスイッチ
- ビット 1: デバイスの切り替え後に再生を再開し、それ以外の場合は 0 にします。 再生を再開すると、プロバイダは AVRCP プロファイルを介してシーカーに PLAY 通知を送信します。前の状態(切り替える前)が PLAY ではなかった場合、プロバイダはこのフラグを無視する必要があります。
- ビット 2: 1 は切り替え先のデバイスで SCO を拒否する、それ以外の場合は 0
- ビット 3: 1 - 切り替えデバイスに対する Bluetooth の切断、それ以外の場合は 0
- ビット 4 ~ 7: 予約済み。
オーディオ スイッチャーは、常に状態が正確にわからない場合があるため、シーカーがすでにアクティブなデバイスであるときに、プロバイダが「このデバイスに切り替える」メッセージを受信する可能性があります。この場合、プロバイダは Seeker で正しい UI を表示するために、エラーの理由「0x4 - Redundant device action」で NAK を送信できます。
切断して戻す(切断されたデバイスへ)
接続の切り替えが不要な場合、ユーザーは切り替えを元に戻すことができます。特定の状況では、音声接続を復元して中断を最小限に抑えることが理にかなっています。Seeker は、以下のメッセージを使用して切り替えをトリガーします。
オクテット | データの種類 | 説明 | 値 |
---|---|---|---|
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 | 切り替えの理由 | 変化 0x00: 指定なし 0x01: A2DP ストリーミング 0x02: HFP |
5 | Uint8 | 対象デバイス | 変化 0x01: このデバイス 0x02: 接続されている別のデバイス |
6 - n | UTF-8 | 場合によって異なる |
表 4.3.3.2: マルチポイント切り替えイベントの通知
接続ステータスを取得する
シーカーは、プロバイダから現在の接続ステータスを取得できます。
オクテット | データの種類 | 説明 | 値 |
---|---|---|---|
0 | Uint8 | 音声の切り替え | 0x07 |
1 | Uint8 | 接続ステータスを取得する | 0x33 |
2 ~ 3 | uint16 | 追加データ長 | 0 |
表 4.3.3.3: 接続ステータスの取得
このメッセージを受け取ったプロバイダは、メッセージ コード 0x34 を使用して接続ステータスを通知します。
接続ステータスの通知
BLE 広告ペイロードで定義されているように、マルチポイント プロバイダは、広告パケットの変更を除き、接続状態が変化した場合、同じアカウントキーを使用している接続済みのシーカーにも変更について通知する必要があります。プロバイダがオーディオ スイッチ Seeker と非オーディオ スイッチ Seeker に接続されている場合、非オーディオ スイッチ Seeker がアクティブな場合は、接続済みオーディオ シーカーに(Seeker のアカウントキーを使用して)接続ステータスを通知する必要もあります。
オクテット | データの種類 | 説明 | 値 |
---|---|---|---|
0 | Uint8 | 音声の切り替え | 0x07 |
1 | Uint8 | 接続ステータスの通知 | 0x34 |
2 ~ 3 | uint16 | 追加データ長 | 場合によって異なる |
4 | Uint8 | アクティブなデバイスフラグ | 変化する 0x00: この Seeker はパッシブで、アクティブなデバイスは同じアカウント キーを使用しています 0x01: この Seeker はアクティブなデバイスです 0x02: この Seeker はパッシブで、アクティブなデバイスはオーディオ スイッチではないシーカーです。 |
5 - n | 暗号化された接続ステータス | 場合によって異なる | |
n+1 ~ n+8 | メッセージのノンス | 場合によって異なる |
表 4.3.3.4: 接続ステータスの通知
暗号化された接続ステータス メッセージ
encrypted_connection_status = connection_status_raw_data ^ AES(Key, IV)
ここで
キーは使用中のアカウントキーから派生します。詳しくは、Random Resolvable Advertisement をご覧ください。
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: 音声の切り替え開始の通知
使用中のアカウントキーを示す
Seeker のアカウント アカウント キー(マルチユーザーなど)がプロバイダに関連付けられている場合、Seeker は以下のメッセージを使用して、使用中のアカウントキーを示します。
オクテット | データの種類 | 説明 | 値 |
---|---|---|---|
0 | Uint8 | 音声の切り替え | 0x07 |
1 | Uint8 | 使用中のアカウントキーを示す | 0×41 |
2 ~ 3 | uint16 | 追加データ長 | 22 |
4 ~ 9 | UTF-8 | 使用中の文字列 | UTF8(「使用中」) |
10 ~ 17 | メッセージのノンス | 場合によって異なる | |
18 ~ 25 歳 | メッセージ認証コード | 場合によって異なる |
表 4.3.4.1: アカウント キーの使用を指示する
このメッセージを受信すると、プロバイダは、メッセージ認証コードを確認することで、使用中のアカウントキーを認識できます。
カスタムデータを送信する
アクティブな音声スイッチ Seeker は、音声ストリームの情報(音声使用量など)をカスタムデータバイトにカプセル化し、次のメッセージを使用してプロバイダに送信できます。
オクテット | データの種類 | 説明 | 値 |
---|---|---|---|
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 | ドロップ接続のターゲットを設定します | 0×43 |
2 ~ 3 | uint16 | 追加データ長 | 17 |
4 | Uint8 | ドロップ先の接続済みデバイス | 変わります 1: このデバイス |
5 ~ 12 | メッセージのノンス | 場合によって異なる | |
13 ~ 20 | メッセージ認証コード | 場合によって異なる |
表 4.3.4.3: ドロップ接続の目標の設定
リファレンス実装
リファレンス実装については、付近の埋め込み SDK ライブラリをご覧ください。