Pengalihan Audio
Seiring makin banyaknya pengguna yang memanfaatkan berbagai perangkat sumber audio untuk melakukan tugas sehari-hari, permintaan akan solusi yang lebih sederhana untuk mengelola headset terus meningkat digunakan di seluruh perangkat. Pengalihan audio beralih koneksi headset dengan lancar antar perangkat berdasarkan aktivitas pengguna (mis. memulai film) dan diprioritaskan peristiwa (misalnya, panggilan masuk).
Prinsip UX
- Peralihan koneksi harus dilakukan dengan cepat dan berdasarkan tindakan pengguna.
- Peralihan koneksi harus transparan kepada pengguna, memungkinkan pengguna untuk {i>control/revert<i} jika pengalihan tidak diinginkan.
- Peralihan harus menghormati privasi pengguna.
Peran
Pencari Beralih Audio: Pencari adalah perangkat sumber audio (misalnya, ponsel atau tablet), mencari headset di sekitar untuk dihubungkan jika perlu.
Penyedia Beralih Audio: Penyedia biasanya adalah headset yang mengiklankan status kehadiran dan koneksi bagi Pencari Kerja untuk membuat keputusan peralihan.
Ringkasan Persyaratan
Untuk mencapai smart switch, Penyedia harus mematuhi persyaratan berikut:
Nama | Deskripsi | Persyaratan | Wajib? |
---|---|---|---|
Pemindaian Halaman | Untuk menerima permintaan koneksi baru dari Pencari Kerja lain saat ada koneksi yang ada. Untuk Penyedia titik tunggal:
|
Mode pemindaian halaman latensi rendah (interval pemindaian tidak boleh lebih besar dari 640 md) diperlukan untuk meningkatkan performa. Untuk mengimbangi masa pakai baterai dan performa pengalihan, Penyedia dapat memiliki mode pemindaian halaman default untuk sebagian besar kasus (mode daya rendah, interval pemindaian tidak boleh lebih besar dari 1.280 md). Namun, mode latensi rendah harus digunakan dalam situasi berikut:
|
Wajib |
Histori koneksi | Untuk beralih kembali ke koneksi sebelumnya dan melanjutkan pemutaran jika memungkinkan. Beralih kembali akan dipicu oleh komunikasi melalui Message Stream API. Peristiwa jeda audio harus disertakan dalam rekaman untuk melanjutkan pemutaran jika berlaku. |
Mempertahankan histori koneksi dan menerapkan Message Stream API. | Wajib |
Status koneksi | Agar Pencari Kerja dapat melakukan penilaian pengalihan koneksi.Status sambungan mencakup:
|
Menyertakan status koneksi di BLE Broadcastment dan Message Stream. | Wajib |
Perubahan kemampuan runtime | Pengalihan audio dapat diaktifkan dengan mengupgrade firmware di Penyedia, sehingga kemampuan antara Pencari dan Penyedia perlu disinkronkan saat runtime. | Mengimplementasikan Message Stream API untuk mengakses kemampuan runtime. | Wajib |
Aturan pengalihan yang dapat dikonfigurasi | Izinkan Pencari mengonfigurasi prioritas antara streaming audio aktif yang ada dan permintaan streaming audio baru melalui setelan preferensi pengguna. Misalnya, Pencari tombol audio dapat memberikan setelan UI untuk memungkinkan pengguna mengaktifkan/menonaktifkan pengalihan otomatis antara streaming dan panggilan media. Pencari pengalihan audio akan menetapkan dan mendapatkan aturan pengalihan melalui Aliran Pesan. |
Khusus Penyedia Multipoint. Implementasikan Message Stream API agar aturan peralihan antar-perangkat terhubung dapat dikonfigurasi. |
Opsional |
Pengalihan perangkat aktif | Izinkan Audio beralih Pencarier menyimulasikan Pengalihan audio antar-perangkat terhubung. Di sisi Pencari beralih Audio, mungkin terdapat UI yang memudahkan pengguna beralih antar-perangkat terhubung. |
Khusus Penyedia Multipoint. Implementasikan Message Stream API untuk Pencari tombol Audio untuk menentukan sumber audio aktif di antara perangkat terhubung. |
Wajib |
Notifikasi pengalihan multipoint | Izinkan Pencari pengalihan Audio menampilkan notifikasi pengalihan. | Khusus Penyedia Multipoint. Mengimplementasikan Message Stream API untuk memberi tahu Pencari pengalihan Audio yang terhubung saat pengalihan multipoint terjadi. |
Wajib |
Payload iklan
Penyedia harus menyertakan status koneksinya saat ini dalam iklan, dibuat berdasarkan data Akun Sambungan Cepat yang dijelaskan dalam Iklan: Saat 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 0bLLLLTTTT
|
0bLLLL0101
|
Wajib |
1 | uint8 |
Status koneksi 0bHAFRSSSS
|
0bHAFRSSSS
|
Wajib |
2 | uint8 |
Data kustom Saat ini, format ini hanya berisi jenis konten yang digunakan untuk menjelaskan penggunaan streaming audio saat ini. Pencari akan mengirimkannya ke Penyedia. |
Nilai dikirim dari Pencari streaming aktif saat ini ke Penyedia melalui aliran pesan. 0 jika streaming yang aktif saat ini bukan dari Pencari Kerja. | Wajib |
3 - var | Bitmap perangkat terhubung Bitmap untuk menunjukkan perangkat mana yang saat ini terhubung ke Penyedia. Semua perangkat dengan ikatan disusun berurutan, satu bit untuk satu perangkat dengan ikatan. Durasinya akan bergantung pada jumlah perangkat berikat dari Penyedia. |
Bit yang dipetakan disetel ke 1 jika perangkat saat ini terhubung ke Provider, 0 jika tidak. Lihat Bitmap Perangkat yang Terhubung untuk mengetahui detailnya |
Opsional |
Tabel 4.1: Data mentah kolom status koneksi
Tanda Koneksi
0bH = deteksi kepala
- 1, di depan mata
- 0, jika tidak, tidak ada 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 media penggunaan, yaitu tidak ada peralihan A2DP ke A2DP
- 0, jika tidak
0bR = terhubung kembali secara otomatis
- 1, jika koneksi saat ini dihubungkan secara otomatis oleh Penyedia, yang berarti tidak dihubungkan oleh pengguna (untuk multipoint, jika salah satu dari koneksi terhubung kembali secara otomatis, seharusnya disetel ke 1)
- 0, jika tidak
Status koneksi
- 0x0: tidak ada koneksi
- 0x1: {i>paging<i}
- 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 untuk sementara (mis. update firmware)
Jenis Konteks LE Audio dan Status Koneksi
Menyarankan bahwa Penyedia Audio LE harus menangani semua jenis konteks yang ditentukan di Assigned Numbers 6.12.3 (kecuali jika Penyedia secara eksplisit tidak mendukung jenis konteks tertentu) dan pemetaan tipe konteks ke status koneksi seperti di bawah ini.
- Percakapan: 0x9
- Media: 0x8
- Game: 0x7
- Instruksional: 0x7
- Asisten Suara: 0x9
- Live: 0x9
- Efek Suara: 0x2
- Notifikasi: 0x2
- Nada dering: 0x9
- Peringatan: 0x7
- Alarm Darurat: 0x9
Untuk skenario jenis konteks LE Audio campuran seperti memutar media selama , Penyedia harus menggunakan status koneksi dengan prioritas tertinggi, yaitu menggunakan 0x9 (panggilan) untuk skenario di atas, bukan 0x8 (media).
Bitmap Perangkat Terhubung
Untuk menghindari pengalihan koneksi yang tidak diinginkan, Pencari Kerja mungkin perlu mengetahui perangkat yang saat ini tersambung dengan headset. Misalnya, saat headset terhubung ke ponsel, pengguna tidak ingin diganggu oleh beralih koneksi saat salah satu anggota keluarganya memulai YouTube di tablet.
Perhatikan bahwa bitmap ini bersifat anonim, Pencari Kerja tidak dapat mengetahui apa perangkat terhubung dengan Penyedia. Misalnya, ambil 5 perangkat yang memiliki ikatan:
- 0: laptop (0bx0000000)
- 1: teleponA (0b0x000000)
- 2: teleponB (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, mis. saat pengguna mereset headset ke setelan pabrik atau saat jumlah perangkat yang terhubung mencapai batas atas.
Iklan Acak yang Dapat Diselesaikan
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)
di mana
Kunci berasal dari kunci akun yang sedang digunakan, yang akan didefinisikan di bagian berikutnya.
Kunci dihasilkan oleh fungsi HKDF, IETF RFC 5869, menggunakan SHA-256 fungsi {i>hash<i}.
Key = HKDF(account_key, NULL, UTF8("SASS-RRD-KEY"),16)
Penyedia harus menggunakan kunci akun asli di sini, yaitu byte pertama kuncinya adalah 0x04, tidak termasuk dalam pola penggunaan.
IV (vektor awal) adalah salt 2 byte dari Data Kunci Akun dengan nol padding, yaitu IV adalah concat(garam, 14-byte ZERO).
Status koneksi data mentah didefinisikan dalam tabel 4.1, jika perubahan status koneksi, {i>salt<i} dan RPA harus dibuat kembali di rentang waktu iklan yang sama.
Hal ini membuat isian status koneksi yang dienkripsi berputar pada waktu yang sama dengan Data Kunci Akun dirotasi.
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 - s | Data Baterai | bervariasi | Opsional | |
s+1 - var | Data yang Dapat Diselesaikan secara Acak | bervariasi | Wajib jika Daftar Kunci Akun tidak kosong, jika tidak Dikecualikan. |
Tabel 4.2: Iklan BLE dengan Data Acak yang Dapat Diselesaikan
Data yang Dapat Diselesaikan Acak berisi:
Oktet | Jenis data | Deskripsi | Nilai | Wajib? |
---|---|---|---|---|
0 | uint8 |
Panjang dan jenis kolom 0bLLLLTTTT
|
0bLL0110
|
Wajib |
1 - var | Data terenkripsi | bervariasi | Wajib |
Tabel 4.2.1: Data Acak yang Dapat Diselesaikan
Sebagai contoh, jika Data yang Dapat Diselesaikan Acak berisi koneksi yang dienkripsi status, hasil yang didekripsi akan menjadi bidang status koneksi.
Untuk mencegah sabotase, Data Kunci Akun di atas harus sedikit diubah jika Data yang Dapat Diselesaikan Acak disertakan dalam iklan. Biasanya, ketika membuat filter kunci akun, nilai V dihasilkan dengan menggabungkan bagian dan menambahkan {i>salt<i}. Sebaliknya, ketika Data yang Dapat Diselesaikan Acak juga diiklankan, nilai V harus disusun sebagai:
V = concat(account_key, salt, random_resolvable_data)
Jika Data Baterai dan Data yang Dapat Diselesaikan Acak diiklankan, V harus disusun sebagai:
V = concat(account_key, salt, battery_data, random_resolvable_data)
Kunci Akun yang Sedang Digunakan
Pengalihan koneksi berbasis akun, sehingga Penyedia harus menyertakan informasi akun dari koneksi saat ini dalam iklan BLE. Jika perangkat yang terhubung saat ini adalah Pencari tombol akses audio, Penyedia harus dapat mendapatkan kunci akun yang terkait dengan Pencari Kerja ini, dan gunakan kunci akun ini untuk mengenkripsi kolom status koneksi. Jika sumber audio yang terhubung adalah non-Audio beralih Pencari, Penyedia harus menggunakan kunci akun yang terakhir digunakan.
Sebelum menghitung filter kunci akun, Penyedia harus memodifikasi kunci sandi byte kunci akun untuk menyertakan salah satu hal berikut dalam pola penggunaan:
- 0b00000100
Kunci akun ini tidak digunakan.
Kunci akun ini adalah kunci 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 dari status koneksi saat ini, itu bisa berarti tidak perangkat yang terhubung atau perangkat yang tersambung bukanlah Pencari sakelar audio. - 0b00000110
Kunci akun ini adalah kunci akun yang sedang digunakan.
Kolom status koneksi dienkripsi oleh kunci akun ini, dan perangkat terhubung akan dikaitkan dengan kunci akun ini.
Skema untuk payload pengalihan Audio
Gambar di bawah menunjukkan skema untuk payload pengalihan Audio.
![](https://developers-dot-devsite-v2-prod.appspot.com/nearby/fast-pair/images/SASS-ble-payload-schematic.png?authuser=4&hl=id)
Pesan
Saat terhubung, Pencari dan Penyedia dapat menggunakan Stream pesan untuk menyinkronkan Audio kemampuan beralih, memicu pengalihan koneksi, menyetel dan memulai pengalihan preferensi, memberi tahu status koneksi dan sebagainya. Kita membuat grup pesan dan kode pesan khusus untuk Pengalihan audio seperti di bawah ini.
Nama Grup Pesan | Nilai |
---|---|
Beralih audio | 0x07 |
Detail tambahan untuk setiap kode pesan disertakan di bagian berikut.
Nama Kode Pesan | Nilai | Hanya multipoint | Pengirim | Perespons | Enkripsikan | MAC | ACK |
---|---|---|---|---|---|---|---|
Mendapatkan kemampuan pengalihan Audio | 0x10 | T | Keduanya | Keduanya, melalui kode 0x11 | T | T | T |
Memberi tahu kemampuan pengalihan Audio | 0x11 | T | Keduanya | Keduanya | T | Y | Y |
Menetapkan status multititik | 0x12 | Y | Pencari Kerja | Penyedia | T | Y | Y |
Menetapkan preferensi pengalihan | 0x20 | Y | Pencari Kerja | Penyedia | T | Y | Y |
Mendapatkan preferensi pengalihan | 0x21 | Y | Pencari Kerja | Penyedia, melalui kode 0x22 | T | T | T |
Memberi tahu preferensi pengalihan | 0x22 | Y | Penyedia | Pencari Kerja | T | T | T |
Mengganti sumber audio aktif(ke perangkat yang terhubung) | 0x30 | Y | Pencari Kerja | Penyedia | T | Y | Y |
Beralih kembali | 0x31 | T | Pencari Kerja | Penyedia | T | Y | Y |
Memberi tahu peristiwa multipoint-switch | 0x32 | Y | Penyedia | Pencari Kerja | T | T | T |
Mendapatkan status koneksi | 0x33 | Y | Pencari Kerja | Penyedia, melalui kode 0x34 | T | T | T |
Beri tahu status koneksi | 0x34 | Y | Penyedia | Pencari Kerja | Y | T | T |
Beri tahu koneksi yang dimulai saat pengalihan Audio | 0x40 | T | Pencari Kerja | Penyedia | T | Y | Y |
Sebutkan kunci akun yang digunakan | 0x41 | T | Pencari Kerja | Penyedia | T | Y | Y |
Mengirim data kustom | 0x42 | T | Pencari Kerja | Penyedia | T | Y | Y |
Menetapkan target koneksi drop | 0x43 | Y | Pencari Kerja | Penyedia | T | Y | Y |
Tabel 4.3: Pesan beralih audio
MAC Pesan pengalihan Audio
Untuk memberikan autentikasi pesan, semua pesan beralih Audio dengan data yang dikirim dari Pencari Kerja ke Penyedia memerlukan Kode Autentikasi Pesan. Kapan pesan dengan MAC diterima, pesan tersebut harus dikonfirmasi agar Pencari Kerja mengetahui apakah Penyedia telah bereaksi terhadap pesan atau tidak.
Jika otentikasi pesan berhasil, Penyedia harus mengirim 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 | Beralih audio | 0x07 |
5 | uint8 | Kode pesan pengalihan audio | bervariasi |
6 - dtk | Data tambahan | bervariasi |
Jika gagal, Penyedia harus mengirim NAK untuk pesan:
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 | Beralih 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 Sambungan Cepat yang terhubung Pencari/Penyedia mendukung Pengalihan audio atau tidak dengan menggunakan pesan di bawah:
Oktet | Jenis Data | Deskripsi | Nilai |
---|---|---|---|
0 | uint8 | Beralih 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
Memberi tahu kemampuan pengalihan Audio
Setelah menerima pesan dapatkan kemampuan pengalihan Audio kode, Pencari/Penyedia tombol audio akan merespons dengan salah satu tanda:
Oktet | Jenis Data | Deskripsi | Nilai |
---|---|---|---|
0 | uint8 | Beralih audio | 0x07 |
1 | uint8 | Memberi 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 bukan nol berarti fungsi ini mendukung pengalihan Audio. Kode versi saat ini (dengan peningkatan keamanan) adalah 0x0102. 0x0000 respons atau tidak ada respons dalam 1 detik berarti Pengalihan audio tidak didukung di perangkat ini |
6 - 7 | flags | Tanda kemampuan pengalihan audio Penyedia Jika dikirim oleh Pencari Kerja, kedua byte ini harus diabaikan. |
bervariasi Lihat Tanda kemampuan pengalihan audio |
8-15 tahun | Pesan nonce Hanya diperlukan saat dikirim oleh Pencari Kerja |
bervariasi | |
16 - 23 | Kode autentikasi pesan Hanya diperlukan saat dikirim oleh Pencari Kerja |
bervariasi |
Tabel 4.3.1.1: Kemampuan notifikasi untuk 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 multipoint
- 1, jika perangkat mendukung multipoint dan dapat diaktifkan nonaktif
- 0, jika tidak (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 pada kepala (meskipun deteksi pada kepala dinonaktifkan sekarang)
- 0, jika tidak
Bit 4: status saat ini deteksi di kepala
- 1, jika deteksi pada kepala diaktifkan
- 0, jika tidak (tidak mendukung deteksi pada kepala atau deteksi kepala dinonaktifkan)
Semua bit lainnya dicadangkan, secara default 0.
Menetapkan status multipoint
Di Pencari tombol Audio, kami dapat menyediakan setelan untuk mengaktifkan/menonaktifkan Pencari tombol audio fungsi multipoint. Pencari akan menyetel status multipoint ke Penyedia menggunakan pesan di bawah ini:
Oktet | Jenis Data | Deskripsi | Nilai |
---|---|---|---|
0 | uint8 | Beralih audio | 0x07 |
1 | uint8 | Menetapkan status multipoint | 0x12 |
2 - 3 | uint16 | Panjang data tambahan | 17 |
4 | uint8 | Status multipoint | 0: nonaktifkan multipoint 1: aktifkan multipoint |
5-12 tahun | Nonce pesan | bervariasi | |
13 - 20 | Kode autentikasi pesan | bervariasi |
Tabel 4.3.1.2: Menetapkan status multipoint
Menyetel preferensi pengalihan
Pencari pengalihan audio dapat memodifikasi preferensi pengalihan multipoint dan ke Penyedia menggunakan pesan di bawah ini:
Oktet | Jenis Data | Deskripsi | Nilai |
---|---|---|---|
0 | uint8 | Beralih audio | 0x07 |
1 | uint8 | Menyetel preferensi pengalihan | 0x20 |
2 - 3 | uint16 | Panjang data tambahan | 18 |
4 | flags | Beralih preferensi | bervariasi Lihat tanda preferensi pengalihan multititik |
5 | Setelan pengalihan lanjutan Byte ini dicadangkan, nilai defaultnya adalah 0 |
bervariasi | |
6-13 tahun | 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: cadangan
- Di atas mewakili "permintaan profil baru" vs "profil yang aktif saat ini"
- 0 jika tidak beralih
- 1 untuk beralih
Mendapatkan preferensi beralih
Pencari pengalihan audio dapat mengkueri preferensi pengalihan multipoint dari Penyedia menggunakan pesan di bawah ini:
Oktet | Jenis Data | Deskripsi | Nilai |
---|---|---|---|
0 | uint8 | Beralih audio | 0x07 |
1 | uint8 | Mendapatkan konfigurasi pengalihan | 0x21 |
2 - 3 | uint16 | Panjang data tambahan | 0 |
Tabel 4.3.2.1: Mendapatkan preferensi pengalihan
Beri tahu preferensi pengalihan
Oktet | Jenis Data | Deskripsi | Nilai |
---|---|---|---|
0 | uint8 | Beralih audio | 0x07 |
1 | uint8 | Beri tahu preferensi pengalihan | 0x22 |
2 - 3 | uint16 | Panjang data tambahan | 2 |
4 | flags | Mengalihkan tanda preferensi | bervariasi Lihat tanda preferensi pengalihan multititik |
5 | Setelan pengalihan lanjutan Byte ini dicadangkan, nilai default harus 0 |
bervariasi |
Tabel 4.3.2.2: Memberi tahu preferensi pengalihan
Mengalihkan sumber audio aktif (ke perangkat yang terhubung)
Pencari pengalihan audio dapat meminta Penyedia multipoint untuk mengalihkan sumber audio antar-perangkat terhubung menggunakan pesan di bawah:
Oktet | Jenis Data | Deskripsi | Nilai |
---|---|---|---|
0 | uint8 | Beralih audio | 0x07 |
1 | uint8 | Mengalihkan 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 mengganti peristiwa sumber audio aktif |
5-12 tahun | Nonce pesan | bervariasi | |
13 - 20 | Kode autentikasi pesan | bervariasi |
Tabel 4.3.3.0: Mengalihkan sumber audio aktif (ke perangkat terhubung)
Mengalihkan peristiwa sumber audio aktif
- Bit 0 (MSB): 1 beralih ke perangkat ini, 0 beralih ke perangkat kedua yang terhubung
- Bit 1: 1 melanjutkan pemutaran saat beralih ke perangkat setelah beralih, 0 jika tidak. Melanjutkan pemutaran berarti Penyedia mengirimkan notifikasi PLAY kepada Pencari Kerja melalui profil AVRCP. Jika status sebelumnya (sebelum dialihkan) tidak PLAY, Penyedia harus mengabaikan tanda ini.
- Bit 2: 1 tolak SCO pada perangkat yang dialihkan, 0 jika tidak
- Bit 3: 1 memutuskan Bluetooth pada perangkat beralih, 0 jika tidak.
- Bit 4 - 7: cadangan.
Pencari pengalihan audio mungkin tidak selalu mengetahui statusnya dengan benar, jadi mungkin saja bagi Penyedia untuk menerima "tombol ke perangkat ini" pesan saat Pencari Kerja perangkat yang aktif. Dalam hal ini, untuk menampilkan UI yang benar di Pencari, Penyedia dapat mengirim NAK dengan alasan error, 0x4 - Tindakan perangkat yang redundan.
Untuk Penyedia Audio LE yang memiliki lebih dari satu anggota, Penyedia harus memutuskan sambungan semua anggota dari Pencari, jika tidak, tumpukan bluetooth dari Pencari akan terhubung kembali ke Penyedia.
Beralih kembali (ke perangkat yang terputus)
Jika pengalihan koneksi tidak diinginkan, pengguna dapat mengembalikan pengalihan tersebut, dan skenario tertentu, sebaiknya pulihkan koneksi audio untuk meminimalkan gangguan layanan. Pencari akan menggunakan pesan di bawah ini untuk memicu pengalihan kembali:
Oktet | Jenis Data | Deskripsi | Nilai |
---|---|---|---|
0 | uint8 | Beralih audio | 0x07 |
1 | uint8 | Beralih kembali (ke perangkat yang terputus) | 0x31 |
2 - 3 | uint16 | Panjang data tambahan | 17 |
4 | uint8 | Beralih kembali ke peristiwa | bervariasi 0x01: beralih kembali 0x02: beralih kembali dan lanjutkan pemutaran |
5-12 tahun | 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 melepaskan dengan satu perangkat sumber audio dan menjeda sesi audio di perangkat lainnya sumber audio. Misalnya, anggaplah headset multipoint terhubung ke tablet dan perangkat pengalihan Audio ke-3 yang didukung. Pengguna sedang menonton video tablet ketika ada panggilan masuk di ponsel mereka. Ponsel akan dipicu tombol koneksi di headset, yang perlu melepaskan agar terhubung ke ponsel, sekaligus menjeda media di tablet untuk mendapatkan nada dering dari ponsel. Jika pengguna menolak panggilan, ponsel mungkin akan 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 multipoint-switch
Agar pengguna mengetahui terjadinya peristiwa pengalihan multipoint, tombol Audio Pencari dapat menampilkan notifikasi kepada pengguna. Penyedia harus memberi tahu bahwa koneksi Pencari pengalihan audio tentang peristiwa pengalihan.
Oktet | Jenis Data | Deskripsi | Nilai |
---|---|---|---|
0 | uint8 | Beralih audio | 0x07 |
1 | uint8 | Beri tahu peristiwa pengalihan multipoint Penyedia harus mengirimkannya di setiap tombol, termasuk Pencari pengalihan Audio ke Pencari tombol akses non-Audio, Pencari pengalihan non-Audio ke Pencari pengalihan Audio, dan Pencari pengalihan Audio ke Pencari pengalihan audio |
0x32 |
2 - 3 | uint16 | Panjang data tambahan | bervariasi |
4 | uint8 | Alasan pengalihan Nilai ini harus ditentukan berdasarkan Status koneksi. Untuk kasus penggunaan LE Audio, mempelajari pemetaan antara Jenis Konteks LE Audio dan status Koneksi mungkin berguna. Misalnya, status koneksi yang sesuai dengan Asisten Suara adalah 0x9(LE audio - streaming panggilan). Jadi, alasan pengalihan untuk tombol yang dimulai oleh Asisten Suara seharusnya 0x02. |
bervariasi 0x00: Tidak ditentukan 0x01: Media (misalnya streaming A2DP, streaming media LEA) 0x02: Panggilan (misalnya streaming HFP, streaming panggilan LEA) |
5 | uint8 | Perangkat target | bervariasi 0x01: perangkat ini 0x02: perangkat lain yang tersambung |
6 - n | utf8 | Nama perangkat target jika perangkat target adalah Pencari pengalihan audio, menggunakan nama yang dikirimi Pencari, atau menggunakan nama BT, jika tidak berlaku, menggunakan 2 byte terakhir alamatnya |
bervariasi |
Tabel 4.3.3.2: Memberi tahu peristiwa multipoint-switch
Mendapatkan status koneksi
Pencari Kerja bisa mendapatkan status koneksi saat ini dari Penyedia:
Oktet | Jenis Data | Deskripsi | Nilai |
---|---|---|---|
0 | uint8 | Beralih audio | 0x07 |
1 | uint8 | Mendapatkan 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, beri tahu status koneksi.
Beri tahu status koneksi
Seperti yang ditentukan dalam payload iklan BLE, untuk penyedia multipoint, jika status koneksi berubah, kecuali untuk perubahan paket iklan, Penyedia juga harus memberi tahu Pencari yang terhubung yang menggunakan kunci akun yang sama tentang perubahan tersebut. Jika Penyedia terhubung dengan Pencari tombol akses Audio dan Pencari tombol akses non-Audio, jika tombol Pencari aktif, Penyedia juga harus memberi tahu Audio yang terhubung alihkan Pencari Kerja tentang status sambungan (menggunakan kunci akun Pencari).
Oktet | Jenis Data | Deskripsi | Nilai |
---|---|---|---|
0 | uint8 | Beralih 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 pasif, dan perangkat aktif menggunakan kunci akun yang sama 0x01: Pencari ini adalah perangkat aktif 0x02: Pencari ini pasif, dan perangkat aktif adalah Pencari tombol non-Audio. |
5 - n | 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, connect_devices) yang didefinisikan dalam BLE payload iklan Perhatikan bahwa byte untuk panjang {i>field<i} dan jenis tidak boleh disertakan karena kita memiliki kode pesan dan panjang data di sini.
Beri tahu koneksi yang dimulai saat pengalihan Audio
Penyedia pengalihan audio mungkin perlu mengetahui apakah pengalihan koneksi dipicu oleh tombol Audio untuk memberikan reaksi yang berbeda, misalnya nonaktifkan earcon untuk Audio peristiwa switch. Pencari Kerja mengirim pesan untuk memberi tahu Penyedia bahwa adalah koneksi yang dimulai dengan pengalihan Audio.
Oktet | Jenis Data | Deskripsi | Nilai |
---|---|---|---|
0 | uint8 | Beralih audio | 0x07 |
1 | uint8 | Beri tahu koneksi yang dimulai saat pengalihan Audio | 0x40 |
2 - 3 | uint16 | Panjang data tambahan | 17 |
4 | uint8 | Indikasi koneksi dimulainya pengalihan audio | bervariasi 0: koneksi ini tidak dipicu oleh pengalihan Audio 1: ini adalah koneksi yang dimulai pengalihan Audio |
5-12 tahun | Nonce pesan | bervariasi | |
13 - 20 | Kode autentikasi pesan | bervariasi |
Tabel 4.3.4.0: Memberi tahu koneksi yang dimulai untuk pengalihan Audio
Cantumkan kunci akun yang sedang digunakan
Jika beberapa kunci akun pada Pencari Kerja (mis. multi-pengguna) dikaitkan dengan Penyedia, Pencari akan menggunakan pesan di bawah ini untuk menunjukkan akun mana kunci yang sedang digunakan.
Oktet | Jenis Data | Deskripsi | Nilai |
---|---|---|---|
0 | uint8 | Beralih audio | 0x07 |
1 | uint8 | Cantumkan kunci akun yang sedang 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 kunci akun yang digunakan
Setelah menerima pesan ini, Penyedia dapat mengetahui kunci akun mana yang digunakan dengan memverifikasi kode otentikasi pesan.
Kirim data kustom
Pencari tombol Audio aktif dapat merangkum informasi (misalnya, audio penggunaan) streaming audio dalam byte data kustom, dan mengirimkannya ke Penyedia dengan menggunakan pesan di bawah ini:
Oktet | Jenis Data | Deskripsi | Nilai |
---|---|---|---|
0 | uint8 | Beralih audio | 0x07 |
1 | uint8 | Kirim data kustom | 0x42 |
2 - 3 | uint16 | Panjang data tambahan | 17 |
4 | uint8 | Data kustom | bervariasi |
5-12 tahun | 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 menyertakan data khusus. Untuk Penyedia multipoint, penyedia itu juga harus memberi tahu status koneksi berubah menjadi Pencari Kerja lain yang terhubung menggunakan kunci akun yang sama.
Menetapkan target drop koneksi
Pada headset multititik, jika koneksi pilihan yang akan dilepas bukan yang paling jarang digunakan, Pencari pengalihan audio dapat memberi tahu Penyedia perangkat mana untuk melepaskannya menggunakan pesan di bawah ini:
Oktet | Jenis Data | Deskripsi | Nilai |
---|---|---|---|
0 | uint8 | Beralih audio | 0x07 |
1 | uint8 | Menetapkan target drop koneksi | 0x43 |
2 - 3 | uint16 | Panjang data tambahan | 17 |
4 | uint8 | Perangkat target yang terhubung akan dilepaskan | bervariasi 1: perangkat ini |
5-12 tahun | Nonce pesan | bervariasi | |
13 - 20 | Kode autentikasi pesan | bervariasi |
Tabel 4.3.4.3: Menetapkan target drop koneksi
Penerapan Referensi
Lihat Library SDK tersemat terdekat untuk implementasi referensi