Pengalihan Audio
Karena pengguna semakin menggunakan beberapa perangkat sumber audio untuk melakukan tugas harian mereka, ada juga permintaan akan solusi yang lebih sederhana untuk mengelola penggunaan headset di seluruh perangkat. Tombol audio mentransisikan koneksi headset antar-perangkat dengan lancar berdasarkan aktivitas pengguna (misalnya, memulai film) dan peristiwa yang diprioritaskan (misalnya panggilan masuk).
Prinsip UX
- Peralihan koneksi harus cepat dan berdasarkan tindakan pengguna.
- Pengalihan koneksi harus bersifat transparan bagi pengguna, sehingga pengguna dapat mengontrol/mengembalikannya jika peralihan tidak diinginkan.
- Peralihan harus menghormati privasi pengguna.
Peran
Pencari Pengalihan Audio: Pencari adalah perangkat sumber audio (misalnya, ponsel atau tablet), yang mencari headset di sekitar untuk dihubungkan jika memungkinkan.
Penyedia Switch Audio: Penyedia biasanya adalah headset yang mengiklankan keberadaan dan status koneksinya bagi Pencari Kerja untuk membuat keputusan peralihan.
Ringkasan Persyaratan
Agar peralihan cerdas, Penyedia harus mematuhi persyaratan berikut:
Nama | Deskripsi | Persyaratan | Wajib? |
---|---|---|---|
Pemindaian Halaman | Untuk menerima permintaan koneksi baru dari Pencari Kerja lain saat ada koneksi. Untuk Penyedia layanan titik tunggal:
|
Mode pemindaian halaman berlatensi rendah (interval pemindaian tidak boleh lebih dari 640 md) diperlukan untuk meningkatkan performa. Untuk melakukan kompromi antara masa pakai baterai dan performa peralihan, Penyedia dapat memiliki mode pemindaian halaman default untuk sebagian besar kasus (mode daya rendah, interval pemindaian tidak boleh lebih dari 1280 md). Namun, mode latensi rendah harus digunakan dalam situasi berikut:
|
Wajib |
Histori koneksi | Untuk beralih kembali ke koneksi sebelumnya dan melanjutkan pemutaran jika berlaku. Beralih kembali akan dipicu oleh komunikasi melalui Message Stream API. Peristiwa audio penjedaan audio harus disertakan dalam rekaman untuk melanjutkan pemutaran jika berlaku. |
Kelola histori koneksi dan terapkan Message Stream API. | Wajib |
Status koneksi | Pencari kerja dapat melakukan penilaian pengalihan koneksi.Status koneksi mencakup:
|
Menyertakan status koneksi dalam BLE Advertisingment dan Message Stream. | Wajib |
Perubahan kemampuan runtime | Pengalihan audio dapat diaktifkan dengan mengupgrade firmware di Penyedia, sehingga kemampuannya perlu disinkronkan antara Pencari dan Penyedia saat runtime. | Implementasikan Message Stream API untuk mengakses kemampuan runtime. | Wajib |
Aturan pengalihan yang dapat dikonfigurasi | Izinkan Pencari Kerja mengonfigurasi prioritas antara streaming audio aktif yang sudah ada dan permintaan streaming audio baru melalui setelan preferensi pengguna. Misalnya, Pencari pengalihan audio dapat menyediakan setelan UI agar pengguna dapat mengaktifkan/menonaktifkan peralihan otomatis antara streaming dan panggilan media. Pencari pengalihan audio akan disetel dan mendapatkan aturan pengalihan melalui Stream Pesan. |
Khusus Penyedia Multipoint. Implementasikan Message Stream API agar aturan peralihan antar-perangkat terhubung dapat dikonfigurasi. |
Opsional |
Peralihan perangkat aktif | Izinkan Pencari pengalihan Audio menyimulasikan pengalihan Audio di antara perangkat yang terhubung. Di sisi Pencari tombol Audio, mungkin terdapat UI bagi pengguna untuk beralih dengan mudah di antara perangkat terhubung. |
Khusus Penyedia Multipoint. Terapkan Message Stream API untuk Pencari pengalihan Audio untuk menentukan sumber audio yang aktif di antara perangkat yang terhubung. |
Wajib |
Notifikasi beralih multipoint | Biarkan Pencari pengalihan Audio menampilkan notifikasi pengalihan. | Khusus Penyedia Multipoint. Terapkan Message Stream API untuk memberi tahu Pencari tombol Audio yang terhubung saat pengalihan multipoint terjadi. |
Wajib |
Payload iklan
Penyedia harus menyertakan status koneksinya saat ini dalam iklan, yang dibuat berdasarkan data Akun Sambungan Cepat yang dijelaskan dalam Iklan: Jika tidak dapat ditemukan.
Perhatikan bahwa versi tabel 4.2 adalah 0x1.
Kolom Status Koneksi
Oktet | Jenis data | Deskripsi | Nilai | Wajib? |
---|---|---|---|---|
0 | uint8 |
Panjang dan jenis kolom 0bLLTTTT
|
0bLLLL0101
|
Wajib |
1 | uint8 |
Status koneksi 0bHAFRSSSS
|
{i>0bHAFRSSSS<i}
|
Wajib |
2 | uint8 |
Data kustom Saat ini, data ini hanya berisi jenis konten yang digunakan untuk menjelaskan penggunaan streaming audio saat ini. Pencari Kerja akan mengirimkannya ke Penyedia. |
Nilai dikirim dari Pencari kerja streaming yang aktif saat ini ke Penyedia melalui aliran pesan. 0 jika streaming yang aktif saat ini bukan dari Pencari Kerja. | Wajib |
3 - var | Bitmap perangkat yang terhubung Bitmap untuk menampilkan perangkat yang saat ini terhubung ke Penyedia. Semua perangkat terikat disusun secara berurutan, satu bit untuk satu perangkat terikat. Panjang durasi akan bergantung pada jumlah perangkat terikat Penyedia yang ada. |
Bit yang dipetakan ditetapkan ke 1 jika perangkat saat ini terhubung ke Penyedia, 0 jika perangkat tidak terhubung ke Penyedia. Lihat Bitmap Perangkat yang Terhubung untuk mengetahui detailnya |
Opsional |
Tabel 4.1: Data mentah kolom status koneksi
Tanda Koneksi
0bH = saat deteksi kepala
- 1, di kepala sekarang
- 0, jika tidak, tidak di kepala atau tidak ada sensor OHD
0bA = ketersediaan koneksi
- 1, ada koneksi yang tersedia
- 0, jika tidak
0bF = mode fokus
- 1, dalam mode terfokus sekarang, pengalihan koneksi tidak diizinkan untuk penggunaan media, yaitu tidak ada pengalihan A2DP ke A2DP
- 0, jika tidak
0bR = terhubung kembali secara otomatis
- 1, jika koneksi saat ini terhubung kembali secara otomatis oleh Penyedia, artinya koneksi tidak terhubung oleh pengguna (untuk multipoint, jika salah satu koneksi yang ada terhubung kembali secara otomatis, koneksi harus disetel ke 1)
- 0, jika tidak
Status koneksi
- 0x0: tidak ada koneksi
- 0x1: paging
- 0x2: terhubung tetapi tidak ada transfer data
- 0x3: Transfer data non-audio (hanya jika dapat dialihkan, jika tidak, menggunakan 0xF)
- 0x4: Streaming A2DP, AVRCP tidak berlaku
- 0x5: Streaming A2DP dan pemutaran AVRCP
- 0x6: Streaming HFP (panggilan telepon/voip), termasuk nada dering inband dan non-inband
- 0x7: LE audio - streaming media tanpa kontrol
- 0x8: LE audio - streaming media dengan kontrol
- 0x9: LE audio - streaming panggilan
- 0xA: LE audio - siaran
- 0xF: Menonaktifkan pengalihan koneksi sementara (misalnya update firmware)
Bitmap Perangkat yang Terhubung
Untuk menghindari pengalihan koneksi yang tidak diinginkan, Pencari Kerja mungkin perlu mengetahui perangkat mana yang saat ini terhubung dengan headset. Misalnya, saat headset terhubung ke ponsel, pengguna tidak ingin diganggu oleh pengalihan koneksi saat salah satu anggota keluarga memulai YouTube di tablet.
Perhatikan bahwa bitmap ini bersifat anonim, Pencari tidak dapat mengetahui perangkat lain apa yang terikat dengan Penyedia. Misalnya, ambil 5 perangkat terhubung:
- 0: laptop (0bx0000000)
- 1: phoneA (0b0x000000)
- 2: phoneB (0b00x00000)
- 3: tablet (0b000x0000)
- 4: TV (0b0000x000)
Jika perangkat yang terhubung saat ini adalah laptop dan tablet, nilai bitmap akan menjadi 0b10010000. Perubahan pesanan dapat diterima jika tidak dapat dihindari, misalnya saat pengguna mereset headset ke setelan pabrik atau saat jumlah perangkat terikat mencapai batas atas.
Iklan yang Dapat Diselesaikan secara Acak
Untuk menghindari pelacakan dan menghormati privasi pengguna, Penyedia harus merotasi dan mengenkripsi kolom dengan kunci akun menggunakan AES-CTR:
encrypted_connection_status_field = connection_status_raw_data ^ AES(Key, IV)
dengan
Kunci berasal dari kunci akun yang sedang digunakan, yang akan didefinisikan di bagian berikutnya.
Kunci dibuat oleh fungsi HKDF, IETF RFC 5869, menggunakan fungsi hash SHA-256.
Key = HKDF(account_key, NULL, UTF8("SASS-RRD-KEY"),16)
Penyedia harus menggunakan kunci akun asli di sini, yaitu byte pertama kunci adalah 0x04, tidak disertakan dalam pola penggunaan.
IV (vektor awal) adalah salt 2 byte dari Data Kunci Akun dengan padding nol, yaitu IV adalah concat(salt, 14-byte ZEROs).
Data mentah status koneksi ditentukan dalam tabel 4.1, jika status koneksi berubah, salt dan RPA harus dibuat ulang pada jangka waktu iklan yang sama.
Hal ini membuat kolom status koneksi terenkripsi berputar secara bersamaan dengan perputaran Data Kunci Akun.
Iklan BLE akan disusun sebagai berikut:
Oktet | Jenis data | Deskripsi | Nilai | Wajib? |
---|---|---|---|---|
0 | uint8 |
Versi dan tanda | 0x10 | Wajib |
1 - t | Data Kunci Akun | bervariasi | Wajib | |
t+1 - d | Data Baterai | bervariasi | Opsional | |
s+1 - var | Data yang Dapat Diselesaikan Acak | bervariasi | Wajib jika Daftar Kunci Akun tidak kosong, jika tidak Dikecualikan. |
Tabel 4.2: Iklan BLE dengan Data yang Dapat Diselesaikan Acak
Data yang Dapat Diselesaikan Acak berisi:
Oktet | Jenis data | Deskripsi | Nilai | Wajib? |
---|---|---|---|---|
0 | uint8 |
Panjang dan jenis kolom 0bLLTTTT
|
0bLL0110
|
Wajib |
1 - var | Data terenkripsi | bervariasi | Wajib |
Tabel 4.2.1: Data yang Dapat Diselesaikan Acak
Sebagai contoh, jika Random Resolvable Data berisi kolom status koneksi terenkripsi, hasil yang didekripsi akan menjadi kolom status koneksi.
Untuk mencegah modifikasi, Data Kunci Akun di atas harus sedikit dimodifikasi saat Data yang Dapat Diselesaikan Acak disertakan dalam iklan. Biasanya, ketika membuat filter kunci akun, nilai V dihasilkan dengan menggabungkan filter kunci akun dengan salt. Sebagai gantinya, saat Data Random Resolvable juga sedang diiklankan, nilai V harus dibuat sebagai:
V = concat(account_key, salt, random_resolvable_data)
Jika Data Baterai dan Data Acak yang Dapat Diselesaikan diiklankan, V harus dibuat sebagai:
V = concat(account_key, salt, battery_data, random_resolvable_data)
Kunci Akun Sedang Digunakan
Pengalihan koneksi berbasis akun, sehingga Penyedia harus menyertakan informasi akun koneksi saat ini dalam pemberitahuan BLE. Jika perangkat yang terhubung saat ini adalah Pencari pengalihan Audio, Penyedia harus bisa mendapatkan kunci akun yang terkait dengan Pencari ini, dan menggunakan kunci akun ini untuk mengenkripsi kolom status koneksi. Jika sumber audio yang terhubung adalah Pencari pengalihan non-Audio, Penyedia harus menggunakan kunci akun yang terakhir digunakan.
Sebelum menghitung filter kunci akun, Penyedia harus memodifikasi byte pertama dari kunci akun untuk menyertakan salah satu hal berikut dalam pola penggunaan:
- 0b00000100
Kunci akun ini tidak digunakan.
Ini adalah akun default (lihat Kunci akun). - 0b00000101
Kunci akun ini adalah kunci akun yang terakhir digunakan.
Kolom status koneksi dienkripsi oleh kunci akun ini. Tidak ada informasi kunci akun tentang status koneksi saat ini. Hal ini dapat berarti tidak ada perangkat yang terhubung atau perangkat yang terhubung bukanlah Pencari tombol Audio. - 0b00000110
Kunci akun ini adalah kunci akun yang sedang digunakan.
Kolom status koneksi dienkripsi oleh kunci akun ini, dan perangkat yang saat ini terhubung akan dikaitkan dengan kunci akun ini.
Skema untuk payload pengalihan Audio
Gambar di bawah ini menampilkan skema untuk payload pengalihan Audio.
Messages
Saat terhubung, Pencari dan Penyedia dapat menggunakan Streaming pesan untuk menyinkronkan kemampuan pengalihan Audio, memicu pengalihan koneksi, menetapkan dan mendapatkan preferensi pengalihan, memberi tahu status koneksi, dan sebagainya. Kami membuat grup pesan dan kode pesan khusus untuk pengalihan Audio seperti di bawah ini.
Nama Grup Pesan | Nilai |
---|---|
Pengalihan audio | 0x07 |
Detail tambahan untuk setiap kode pesan disertakan di bagian berikut.
Nama Kode Pesan | Nilai | Hanya multititik | Pengirim | Responden | Enkripsi | MAC | ACK |
---|---|---|---|---|---|---|---|
Mendapatkan kemampuan pengalihan Audio | 0x10 | N | Keduanya | Keduanya, melalui kode 0x11 | N | T | N |
Kemampuan notifikasi untuk pengalihan Audio | 0x11 | N | Keduanya | Keduanya | N | Y | Y |
Menetapkan status multititik | 0x12 | Y | Pencari Kerja | Penyedia | N | Y | Y |
Menetapkan preferensi pengalihan | 0x20 | Y | Pencari Kerja | Penyedia | N | Y | Y |
Mendapatkan preferensi beralih | 0x21 | Y | Pencari Kerja | Penyedia, melalui kode 0x22 | N | T | N |
Beri tahu preferensi pengalihan | 0x22 | Y | Penyedia | Pencari Kerja | N | T | N |
Mengalihkan sumber audio aktif(ke perangkat yang terhubung) | 0x30 | Y | Pencari Kerja | Penyedia | N | Y | Y |
Beralih kembali (ke perangkat yang terputus) | 0x31 | N | Pencari Kerja | Penyedia | N | Y | Y |
Memberi tahu peristiwa pengalihan multipoint | 0x32 | Y | Penyedia | Pencari Kerja | N | T | N |
Mendapatkan status koneksi | 0x33 | Y | Pencari Kerja | Penyedia, melalui kode 0x34 | N | T | N |
Beri tahu status koneksi | 0x34 | Y | Penyedia | Pencari Kerja | Y | T | N |
Beri tahu bahwa pengalihan Audio dimulai | 0x40 | N | Pencari Kerja | Penyedia | N | Y | Y |
Tunjukkan bahwa kunci akun digunakan | 0x41 | N | Pencari Kerja | Penyedia | N | Y | Y |
Mengirim data kustom | 0x42 | N | Pencari Kerja | Penyedia | N | Y | Y |
Tetapkan target koneksi lepas | 0x43 | Y | Pencari Kerja | Penyedia | N | Y | Y |
Tabel 4.3: Pesan pengalihan audio
MAC Pesan pengalihan Audio
Untuk memberikan autentikasi pesan, semua pesan pengalihan Audio dengan data tambahan yang dikirim dari Pencari ke Penyedia memerlukan Kode Autentikasi Pesan. Saat menerima pesan dengan MAC, pesan tersebut harus dikonfirmasi agar Pencari Kerja mengetahui apakah Penyedia telah bereaksi terhadap pesan tersebut atau belum.
Jika autentikasi pesan berhasil, Penyedia harus mengirimkan ACK untuk pesan:
Oktet | Jenis Data | Deskripsi | Nilai |
---|---|---|---|
0 | Uint8 | Persetujuan | 0xFF |
1 | Uint8 | ACK | 0x01 |
2 - 3 | Uint16 | Panjang data tambahan | bervariasi |
4 | Uint8 | Pengalihan audio | 0x07 |
5 | Uint8 | Kode pesan pengalihan audio | bervariasi |
6 - d | Data tambahan | bervariasi |
Jika gagal, Penyedia akan mengirimkan NAK untuk pesan tersebut:
Oktet | Jenis Data | Deskripsi | Nilai |
---|---|---|---|
0 | Uint8 | Persetujuan | 0xFF |
1 | Uint8 | NAK | 0x02 |
2 - 3 | Uint16 | Panjang data tambahan | 0x0003 |
4 | Uint8 | Penyebab kesalahan | bervariasi |
5 | Uint8 | Pengalihan audio | 0x07 |
6 | Uint8 | Kode pesan pengalihan audio | bervariasi |
Perhatikan bahwa, jika Penyedia adalah pengirim, MAC tidak diperlukan.
Mendapatkan kemampuan pengalihan Audio
Penyedia pengalihan Audio dan Pencari Kerja dapat memeriksa apakah Pencari Sambungan Cepat yang terhubung mendukung pengalihan Audio atau tidak dengan menggunakan pesan di bawah:
Oktet | Jenis Data | Deskripsi | Nilai |
---|---|---|---|
0 | Uint8 | Pengalihan audio | 0x07 |
1 | Uint8 | Mendapatkan kemampuan pengalihan Audio | 0x10 |
2 - 3 | Uint16 | Panjang data tambahan | 0 |
Tabel 4.3.1.0: Mendapatkan kemampuan pengalihan Audio
Beri tahu kemampuan pengalihan Audio
Setelah menerima kode pesan dapatkan kemampuan pengalihan Audio, Pencari/Penyedia pengalihan Audio akan merespons dengan salah satu tanda berikut:
Oktet | Jenis Data | Deskripsi | Nilai |
---|---|---|---|
0 | Uint8 | Pengalihan audio | 0x07 |
1 | Uint8 | Beri tahu kemampuan pengalihan Audio | 0x11 |
2 - 3 | Uint16 | Panjang data tambahan | 20 jika dikirim oleh Pencari Kerja 4 jika dikirim oleh Penyedia |
4 - 5 | Uint16 | Kode versi pengalihan audio | Nilai yang bukan nol berarti video mendukung pengalihan Audio. Kode versi saat ini (dengan peningkatan keamanan) adalah 0x0102. 0x0000 atau tidak ada respons dalam 1 detik berarti pengalihan Audio tidak didukung di perangkat ini |
6 - 7 | flags | Tanda kemampuan pengalihan audio Penyedia Jika ini dikirim oleh Pencari, kedua byte ini harus diabaikan. |
bervariasi Lihat Tanda kemampuan pengalihan audio |
8 - 15 | Pesan nonce Hanya diperlukan jika pesan ini dikirim oleh Pencari |
bervariasi | |
16 - 23 | Kode autentikasi pesan Hanya diperlukan jika pesan ini dikirim oleh Pencari |
bervariasi |
Tabel 4.3.1.1: Notifikasi kemampuan pengalihan Audio
Tanda kemampuan pengalihan audio
Bit 0 (oktet 6, MSB): Status pengalihan audio
- 1, jika status pengalihan Audio aktif
- 0, jika tidak
Bit 1: kemampuan konfigurasi multititik
- 1, jika perangkat mendukung multipoint dan dapat dialihkan antara aktif dan nonaktif
- 0, sebaliknya (tidak mendukung multipoint atau multipoint selalu aktif)
Bit 2: status saat ini multipoint
- 1, jika multipoint aktif
- 0, jika tidak
Bit 3: deteksi di kepala
- 1, jika perangkat ini mendukung deteksi di kepala (meskipun deteksi di kepala dinonaktifkan sekarang)
- 0, jika tidak
Bit 4: status deteksi di kepala saat ini
- 1, jika deteksi di kepala diaktifkan
- 0, jika tidak (tidak mendukung deteksi di kepala atau deteksi di kepala dinonaktifkan)
Semua bit lainnya dicadangkan, {i>default-<i}nya adalah 0.
Menetapkan status multititik
Bagi Pencari pengalihan Audio, kami dapat menyediakan setelan bagi pengguna untuk mengaktifkan/menonaktifkan fungsi multipoint. Pencari akan menyetel status multipoint ke Penyedia menggunakan pesan di bawah:
Oktet | Jenis Data | Deskripsi | Nilai |
---|---|---|---|
0 | Uint8 | Pengalihan audio | 0x07 |
1 | Uint8 | Menetapkan status multititik | 0x12 |
2 - 3 | Uint16 | Panjang data tambahan | 17 |
4 | Uint8 | Status multititik | 0: menonaktifkan multipoint 1: aktifkan multipoint |
5 - 12 | Nonce pesan | bervariasi | |
13 - 20 | Kode autentikasi pesan | bervariasi |
Tabel 4.3.1.2: Menetapkan status multipoint
Tetapkan preferensi beralih
Pencari pengalihan audio dapat mengubah preferensi pengalihan multipoint dan menyetelnya ke Penyedia menggunakan pesan di bawah ini:
Oktet | Jenis Data | Deskripsi | Nilai |
---|---|---|---|
0 | Uint8 | Pengalihan audio | 0x07 |
1 | Uint8 | Tetapkan preferensi beralih | 0x20 |
2 - 3 | Uint16 | Panjang data tambahan | 18 |
4 | flags | Preferensi peralihan | bervariasi Lihat flag preferensi pengalihan multipoint |
5 | Setelan pengalihan lanjutan Byte ini sudah dicadangkan, nilai defaultnya adalah 0 |
bervariasi | |
6 - 13 | Nonce pesan | bervariasi | |
14 - 21 | Kode autentikasi pesan | bervariasi |
Tabel 4.3.2.0: Menetapkan preferensi pengalihan
Tanda preferensi pengalihan multititik
- Bit 0 (MSB): A2DP vs A2DP (default 0)
- Bit 1: HFP vs HFP (default 0)
- Bit 2: A2DP vs HFP (default 0)
- Bit 3: HFP vs A2DP (default 1)
- Bit 4 - 7: dicadangkan
- Di atas mewakili "permintaan profil baru" vs "profil aktif saat ini"
- 0 karena tidak beralih
- 1 untuk beralih
Mendapatkan preferensi beralih
Pencari pengalihan audio dapat mengkueri preferensi beralih multipoint dari Penyedia menggunakan pesan di bawah:
Oktet | Jenis Data | Deskripsi | Nilai |
---|---|---|---|
0 | Uint8 | Pengalihan audio | 0x07 |
1 | Uint8 | Mendapatkan konfigurasi pengalihan | 0x21 |
2 - 3 | Uint16 | Panjang data tambahan | 0 |
Tabel 4.3.2.1: Mendapatkan preferensi peralihan
Beri tahu preferensi pengalihan
Oktet | Jenis Data | Deskripsi | Nilai |
---|---|---|---|
0 | Uint8 | Pengalihan audio | 0x07 |
1 | Uint8 | Beri tahu preferensi pengalihan | 0x22 |
2 - 3 | Uint16 | Panjang data tambahan | 2 |
4 | flags | Mengalihkan tanda preferensi | bervariasi Lihat flag preferensi pengalihan multipoint |
5 | Setelan pengalihan lanjutan Byte ini sudah dicadangkan, nilai defaultnya harus 0 |
bervariasi |
Tabel 4.3.2.2: Preferensi notifikasi beralih
Alihkan sumber audio aktif (ke perangkat yang terhubung)
Pencari pengalihan audio dapat meminta Penyedia multititik untuk mengalihkan sumber audio aktif di antara perangkat yang terhubung menggunakan pesan di bawah:
Oktet | Jenis Data | Deskripsi | Nilai |
---|---|---|---|
0 | Uint8 | Pengalihan audio | 0x07 |
1 | Uint8 | Alihkan sumber audio aktif (ke perangkat yang terhubung) | 0x30 |
2 - 3 | Uint16 | Panjang data tambahan | 17 |
4 | flags | Mengalihkan tanda peristiwa sumber audio aktif | bervariasi Lihat mengalihkan peristiwa sumber audio aktif |
5 - 12 | Nonce pesan | bervariasi | |
13 - 20 | Kode autentikasi pesan | bervariasi |
Tabel 4.3.3.0: Mengalihkan sumber audio aktif (ke perangkat yang terhubung)
Mengalihkan peristiwa sumber audio aktif
- Bit 0 (MSB): 1 tombol ke perangkat ini, 0 tombol ke perangkat kedua yang terhubung
- Bit 1: 1 lanjutkan diputar di sakelar ke perangkat setelah peralihan, 0 jika tidak. Melanjutkan pemutaran berarti Penyedia mengirimkan notifikasi PLAY ke Pencari Kerja melalui profil AVRCP. Jika status sebelumnya (sebelum dialihkan) bukan PUTAR, Penyedia harus mengabaikan tanda ini.
- Bit 2: 1 tolak SCO pada perangkat yang beralih, 0 jika tidak
- Bit 3: 1 putuskan Bluetooth pada perangkat beralih, 0 jika sebaliknya.
- Bit 4 - 7: dicadangkan.
Pencari pengalihan audio mungkin tidak selalu mengetahui statusnya dengan benar, sehingga mungkin Penyedia mungkin menerima pesan "beralih ke perangkat ini" jika Pencari Kerja sudah menjadi perangkat aktif. Dalam hal ini, untuk menampilkan UI yang benar pada Pencari, Penyedia dapat mengirim NAK dengan alasan error, 0x4 - Tindakan perangkat yang redundan.
Beralih kembali (ke perangkat yang terputus)
Jika pengalihan koneksi tidak diinginkan, pengguna dapat mengembalikan pengalihan, dan dalam skenario tertentu, sebaiknya pulihkan koneksi audio untuk meminimalkan gangguan. Pencari kerja akan menggunakan pesan di bawah untuk memicu peralihan kembali:
Oktet | Jenis Data | Deskripsi | Nilai |
---|---|---|---|
0 | Uint8 | Pengalihan audio | 0x07 |
1 | Uint8 | Beralih kembali (ke perangkat yang terputus) | 0x31 |
2 - 3 | Uint16 | Panjang data tambahan | 17 |
4 | Uint8 | Ganti peristiwa kembali | bervariasi 0x01: beralih kembali 0x02: beralih kembali dan melanjutkan pemutaran |
5 - 12 | Nonce pesan | bervariasi | |
13 - 20 | Kode autentikasi pesan | bervariasi |
Tabel 4.3.3.1: Beralih kembali (ke perangkat yang terputus)
Bagi Penyedia multipoint, untuk melakukan pengalihan koneksi, Penyedia dapat memutus koneksi dengan satu perangkat sumber audio dan menjeda sesi audio di sumber audio lainnya. Misalnya, anggap headset multititik terhubung ke tablet dan perangkat pengalihan Audio ketiga yang didukung. Pengguna menonton video di tablet ketika ada panggilan masuk di ponsel mereka. Ponsel akan memicu tombol koneksi pada headset yang perlu memutuskan koneksi perangkat ketiga agar dapat terhubung ke ponsel, sekaligus menjeda sesi media di tablet untuk mendapatkan nada dering dari ponsel. Jika pengguna menolak panggilan, ponsel mungkin meminta headset untuk "beralih kembali dan melanjutkan pemutaran". Setelah menerima permintaan ini, headset harus terhubung kembali ke perangkat ketiga, dan melanjutkan pemutaran video yang dijeda di tablet.
Memberi tahu peristiwa pengalihan multititik
Untuk membuat pengguna mengetahui peristiwa pengalihan multititik yang sedang terjadi, Pencari pengalihan Audio dapat menampilkan notifikasi kepada pengguna. Penyedia harus memberi tahu Pencari tombol Audio yang terhubung tentang peristiwa pengalihan.
Oktet | Jenis Data | Deskripsi | Nilai |
---|---|---|---|
0 | Uint8 | Pengalihan audio | 0x07 |
1 | Uint8 | Memberi tahu peristiwa pengalihan multipoint Penyedia harus mengirimkannya di setiap tombol akses, termasuk Pencari pengalihan Audio ke Pencari Kerja non-Audio, Pencari kerja non-Audio mengalihkan Pencari ke Pencari dan Pencari pengalihan Audio, dan Pencari kerja mengalihkan Pencari ke pengalihan Audio Pencari |
0x32 |
2 - 3 | Uint16 | Panjang data tambahan | bervariasi |
4 | Uint8 | Alasan beralih | bervariasi 0x00: Tidak ditentukan 0x01: Streaming A2DP 0x02: HFP |
5 | Uint8 | Perangkat target | bervariasi 0x01: perangkat ini 0x02: perangkat lain terhubung |
6 - t | utf8 | Nama perangkat target jika perangkat target adalah Pencari pengalihan Audio, menggunakan nama yang dikirim Pencari Kerja, atau menggunakan nama BT, jika tidak berlaku, menggunakan 2 byte terakhir dari alamatnya |
bervariasi |
Tabel 4.3.3.2: Memberi tahu peristiwa pengalihan multipoint
Dapatkan status koneksi
Pencari bisa mendapatkan status koneksi saat ini dari Penyedia:
Oktet | Jenis Data | Deskripsi | Nilai |
---|---|---|---|
0 | Uint8 | Pengalihan audio | 0x07 |
1 | Uint8 | Dapatkan status koneksi | 0x33 |
2 - 3 | Uint16 | Panjang data tambahan | 0 |
Tabel 4.3.3.3: Mendapatkan status koneksi
Setelah menerima pesan ini, Penyedia harus merespons dengan kode pesan 0x34, memberi tahu status koneksi.
Beri tahu status koneksi
Seperti yang ditetapkan dalam payload iklan BLE, untuk Penyedia multipoint, jika status koneksi berubah, kecuali untuk mengubah paket iklan, Penyedia juga harus memberi tahu Pencari Lokasi yang terhubung yang menggunakan kunci akun yang sama tentang perubahan tersebut. Jika Penyedia terhubung dengan Pencari pengalihan Audio dan Pencari pengalihan non-Audio, jika Pencari tombol non-Audio aktif, Penyedia juga harus memberi tahu Pencari tombol Audio yang terhubung tentang status koneksi (menggunakan kunci akun Pencari Kerja).
Oktet | Jenis Data | Deskripsi | Nilai |
---|---|---|---|
0 | Uint8 | Pengalihan audio | 0x07 |
1 | Uint8 | Beri tahu status koneksi | 0x34 |
2 - 3 | Uint16 | Panjang data tambahan | bervariasi |
4 | Uint8 | Tanda perangkat aktif | bervariasi 0x00: Pencari ini bersifat pasif, dan perangkat aktif menggunakan kunci akun yang sama 0x01: Pencari ini adalah perangkat aktif 0x02: Pencari ini bersifat pasif, dan perangkat aktif adalah Pencari tombol non-Audio. |
5 - t | Status koneksi terenkripsi | bervariasi | |
n+1 - n+8 | Nonce pesan | bervariasi |
Tabel 4.3.3.4: Memberi tahu status koneksi
Pesan status koneksi terenkripsi
encrypted_connection_status = connection_status_raw_data ^ AES(Key, IV)
dalam hal ini:
Kunci berasal dari kunci akun yang sedang digunakan. Lihat Iklan Acak yang Dapat Diselesaikan.
Key = HKDF(account_key, NULL, UTF8("SASS-RRD-KEY"),16)
IV adalah concat(Session_nonce, Message_nonce)
connection_status_raw_data = concat(connection_state, custom_data, connected_devices) yang ditetapkan dalam BLE payload iklan Perhatikan bahwa byte untuk panjang kolom dan jenis tidak boleh disertakan karena terdapat kode pesan dan panjang data di sini.
Notifikasi untuk pengalihan Audio dimulai
Penyedia pengalihan audio mungkin perlu mengetahui apakah pengalihan koneksi dipicu oleh pengalihan Audio agar memiliki reaksi yang berbeda, misalnya menonaktifkan earcon untuk peristiwa pengalihan Audio. Pencari Kerja mengirimkan pesan untuk memberi tahu Penyedia bahwa koneksi ini adalah koneksi yang dimulai dengan pengalihan Audio.
Oktet | Jenis Data | Deskripsi | Nilai |
---|---|---|---|
0 | Uint8 | Pengalihan audio | 0x07 |
1 | Uint8 | Notifikasi untuk pengalihan Audio dimulai | 0x40 |
2 - 3 | Uint16 | Panjang data tambahan | 17 |
4 | Uint8 | Indikasi koneksi dimulai pengalihan audio | bervariasi 0: koneksi ini tidak dipicu oleh Tombol audio 1: ini adalah koneksi yang dimulai dengan pengalihan Audio |
5 - 12 | Nonce pesan | bervariasi | |
13 - 20 | Kode autentikasi pesan | bervariasi |
Tabel 4.3.4.0: Koneksi yang dimulai untuk pengalihan Notifikasi Audio
Tunjukkan kunci akun yang digunakan
Jika beberapa kunci akun di Pencari Kerja (misalnya, multi-pengguna) dikaitkan dengan Penyedia, Pencari Kerja akan menggunakan pesan di bawah untuk menunjukkan kunci akun mana yang digunakan.
Oktet | Jenis Data | Deskripsi | Nilai |
---|---|---|---|
0 | Uint8 | Pengalihan audio | 0x07 |
1 | Uint8 | Tunjukkan kunci akun yang digunakan | 0x41 |
2 - 3 | Uint16 | Panjang data tambahan | 22 |
4 - 9 | utf8 | String yang sedang digunakan | UTF8 ("sedang digunakan") |
10 - 17 | Nonce pesan | bervariasi | |
18 - 25 | Kode autentikasi pesan | bervariasi |
Tabel 4.3.4.1: Menunjukkan penggunaan kunci akun
Setelah menerima pesan ini, Penyedia dapat mengetahui kunci akun mana yang digunakan dengan memverifikasi kode autentikasi pesan.
Mengirim data kustom
Pencari tombol Audio aktif dapat merangkum informasi (misalnya penggunaan audio) streaming audio dalam byte data kustom, dan mengirimkannya ke Penyedia menggunakan pesan di bawah ini:
Oktet | Jenis Data | Deskripsi | Nilai |
---|---|---|---|
0 | Uint8 | Pengalihan audio | 0x07 |
1 | Uint8 | Mengirim data kustom | 0x42 |
2 - 3 | Uint16 | Panjang data tambahan | 17 |
4 | Uint8 | Data kustom | bervariasi |
5 - 12 | Nonce pesan | bervariasi | |
13 - 20 | Kode autentikasi pesan | bervariasi |
Tabel 4.3.4.2: Mengirim data kustom
Setelah menerima data kustom, Penyedia akan memperbarui paket iklan agar menyertakan data kustom. Untuk Penyedia multipoint, penyedia juga harus memberi tahu perubahan status koneksi ke Pencari Kerja lain yang terhubung menggunakan kunci akun yang sama.
Tetapkan target koneksi lepas
Pada headset multipoint, jika koneksi yang lebih disukai yang dilepaskan bukan yang paling jarang digunakan, Pencari pengalihan Audio dapat memberi tahu Penyedia perangkat mana yang akan dilepaskan menggunakan pesan di bawah ini:
Oktet | Jenis Data | Deskripsi | Nilai |
---|---|---|---|
0 | Uint8 | Pengalihan audio | 0x07 |
1 | Uint8 | Tetapkan target koneksi lepas | 0x43 |
2 - 3 | Uint16 | Panjang data tambahan | 17 |
4 | Uint8 | Menargetkan perangkat terhubung untuk dihapus | bervariasi 1: perangkat ini |
5 - 12 | Nonce pesan | bervariasi | |
13 - 20 | Kode autentikasi pesan | bervariasi |
Tabel 4.3.4.3: Menetapkan target koneksi lepas
Penerapan Referensi
Lihat Library SDK tersemat terdekat untuk penerapan referensi