Chuyển đổi âm thanh
Khi người dùng ngày càng sử dụng nhiều thiết bị nguồn âm thanh để thực hiện các tác vụ hàng ngày, nhu cầu về một giải pháp đơn giản hơn để quản lý việc sử dụng tai nghe trên các thiết bị ngày càng tăng. Nút chuyển âm thanh chuyển đổi liền mạch các kết nối tai nghe giữa các thiết bị dựa trên hoạt động của người dùng (ví dụ: bắt đầu xem phim) và các sự kiện được ưu tiên (ví dụ: cuộc gọi đến).
Nguyên tắc về trải nghiệm người dùng
- Việc chuyển đổi kết nối phải nhanh chóng và dựa trên hành động của người dùng.
- Việc chuyển đổi kết nối phải minh bạch với người dùng, cho phép người dùng kiểm soát/huỷ nếu không muốn chuyển đổi.
- Việc chuyển đổi phải tôn trọng quyền riêng tư của người dùng.
Vai trò
Trình tìm kiếm nút chuyển âm thanh: Trình tìm kiếm là một thiết bị nguồn âm thanh (ví dụ: điện thoại hoặc máy tính bảng), tìm kiếm tai nghe ở gần để kết nối khi có thể.
Nhà cung cấp nút chuyển âm thanh: Nhà cung cấp thường là một tai nghe quảng cáo sự hiện diện và trạng thái kết nối để Người tìm kiếm đưa ra quyết định chuyển đổi.
Tổng quan về các yêu cầu
Để thực hiện tính năng chuyển đổi thông minh, Nhà cung cấp phải tuân thủ các yêu cầu sau:
Tên | Mô tả | Yêu cầu | Bắt buộc? |
---|---|---|---|
Quét trang | Để chấp nhận yêu cầu kết nối mới của một Người tìm kiếm khác khi đã có mối kết nối. Đối với Nhà cung cấp một điểm:
|
Bạn cần có chế độ quét trang có độ trễ thấp (khoảng thời gian quét không được lớn hơn 640 mili giây) để cải thiện hiệu suất. Để đánh đổi giữa thời lượng pin và hiệu suất chuyển đổi, Nhà cung cấp có thể có chế độ quét trang mặc định trong hầu hết các trường hợp (chế độ tiết kiệm pin, khoảng thời gian quét không được lớn hơn 1280 mili giây). Tuy nhiên, bạn phải sử dụng chế độ độ trễ thấp trong các trường hợp sau:
|
Bắt buộc |
Nhật ký kết nối | Để chuyển về kết nối trước đó và tiếp tục phát nếu có. Thao tác chuyển về sẽ được kích hoạt bằng thông tin liên lạc qua API Luồng thông báo. Sự kiện tạm dừng âm thanh phải được đưa vào bản ghi để tiếp tục phát nếu có. |
Duy trì nhật ký kết nối và triển khai API Luồng tin nhắn. | Bắt buộc |
Trạng thái kết nối | Để Trình tìm kiếm thực hiện việc đánh giá chuyển đổi kết nối.Trạng thái kết nối bao gồm:
|
Bao gồm trạng thái kết nối trong Luồng tin nhắn và quảng cáo BLE. | Bắt buộc |
Thay đổi về chức năng thời gian chạy | Bạn có thể bật nút chuyển âm thanh bằng cách nâng cấp phần mềm trên Trình cung cấp. Vì vậy, các chức năng cần được đồng bộ hoá giữa Trình tìm kiếm và Trình cung cấp trong thời gian chạy. | Triển khai API Luồng thông báo để truy cập vào các chức năng thời gian chạy. | Bắt buộc |
Quy tắc chuyển đổi có thể định cấu hình | Cho phép trình tìm kiếm định cấu hình mức độ ưu tiên giữa yêu cầu phát trực tuyến âm thanh đang hoạt động và yêu cầu phát trực tuyến âm thanh mới thông qua chế độ cài đặt lựa chọn ưu tiên của người dùng. Ví dụ: trình tìm kiếm nút chuyển âm thanh có thể cung cấp các chế độ cài đặt giao diện người dùng để cho phép người dùng bật/tắt tính năng tự động chuyển đổi giữa phát trực tuyến nội dung đa phương tiện và gọi điện. Trình tìm kiếm nút chuyển đổi âm thanh sẽ thiết lập và nhận quy tắc chuyển đổi thông qua Luồng tin nhắn. |
Chỉ dành cho Nhà cung cấp đa điểm. Triển khai API Luồng tin nhắn để có thể định cấu hình các quy tắc chuyển đổi giữa các thiết bị đã kết nối. |
Không bắt buộc |
Chuyển đổi thiết bị đang hoạt động | Cho phép Trình tìm kiếm chuyển đổi âm thanh mô phỏng việc chuyển đổi âm thanh giữa các thiết bị đã kết nối. Bên Trình tìm kiếm chuyển đổi âm thanh, có thể có một giao diện người dùng để người dùng dễ dàng chuyển đổi giữa các thiết bị đã kết nối. |
Chỉ dành cho Nhà cung cấp đa điểm. Triển khai API Luồng thông báo cho Trình tìm kiếm nút chuyển âm thanh để xác định nguồn âm thanh đang hoạt động giữa các thiết bị đã kết nối. |
Bắt buộc |
Thông báo chuyển đổi đa điểm | Cho phép Trình tìm kiếm nút chuyển đổi âm thanh hiển thị thông báo chuyển đổi. | Chỉ dành cho Nhà cung cấp đa điểm. Triển khai API Luồng thông báo để thông báo cho Trình tìm kiếm chuyển đổi âm thanh đã kết nối khi quá trình chuyển đổi đa điểm đang diễn ra. |
Bắt buộc |
Trọng tải quảng cáo
Nhà cung cấp phải đưa trạng thái kết nối hiện tại vào quảng cáo, dựa trên dữ liệu Tài khoản ghép nối nhanh được mô tả trong phần Quảng cáo: Khi không thể phát hiện được.
Xin lưu ý rằng phiên bản của bảng 4.2 là 0x1.
Trường trạng thái kết nối
Octet | Loại dữ liệu | Mô tả | Giá trị | Bắt buộc? |
---|---|---|---|---|
0 | uint8 |
Độ dài và loại trường 0bLLLLTTTT
|
0bLLLL0101
|
Bắt buộc |
1 | uint8 |
Trạng thái kết nối 0bHAFRSSSS
|
0bHAFRSSSS
|
Bắt buộc |
2 | uint8 |
Dữ liệu tuỳ chỉnh Hiện tại, chỉ chứa loại nội dung dùng để mô tả mức sử dụng nội dung phát trực tuyến âm thanh hiện tại. Trình tìm kiếm sẽ gửi yêu cầu đó đến Nhà cung cấp. |
Giá trị này được gửi từ Trình tìm kiếm của luồng đang hoạt động hiện tại đến Nhà cung cấp thông qua luồng thông báo. 0 nếu luồng đang hoạt động hiện tại không phải từ trình phát. | Bắt buộc |
3 – var | Bitmap thiết bị đã kết nối Bitmap cho biết những thiết bị hiện đang kết nối với Nhà cung cấp. Tất cả thiết bị liên kết được sắp xếp theo thứ tự, một bit cho một thiết bị liên kết. Độ dài sẽ phụ thuộc vào số lượng thiết bị liên kết của Nhà cung cấp. |
Bit được liên kết được đặt thành 1 nếu thiết bị hiện đang kết nối với Nhà cung cấp, nếu không thì được đặt thành 0. Xem Bitmap thiết bị đã kết nối để biết thông tin chi tiết |
Không bắt buộc |
Bảng 4.1: Dữ liệu thô của trường trạng thái kết nối
Cờ kết nối
0bH = phát hiện vùng đầu
- 1, đang ở trên đầu
- 0, nếu không, không có trên đầu hoặc không có cảm biến OHD
0bA = tình trạng kết nối
- 1, có kết nối
- 0, nếu không
0bF = chế độ tập trung
- 1, hiện tại, ở chế độ tập trung, bạn không được phép chuyển đổi kết nối để sử dụng nội dung đa phương tiện, tức là không được chuyển đổi A2DP sang A2DP
- 0, nếu không
0bR = tự động kết nối lại
- 1, nếu kết nối hiện tại được Nhà cung cấp tự động kết nối lại, nghĩa là người dùng không kết nối (đối với nhiều điểm, nếu một trong các kết nối hiện có được tự động kết nối lại, thì bạn phải đặt giá trị này thành 1)
- 0, nếu không
Trạng thái kết nối
- 0x0: không có kết nối
- 0x1: phân trang
- 0x2: đã kết nối nhưng không có dữ liệu nào được chuyển
- 0x3: Chuyển dữ liệu không phải âm thanh (chỉ khi có thể chuyển đổi, nếu không, hãy sử dụng 0xF)
- 0x4: Truyền trực tuyến A2DP, không áp dụng AVRCP
- 0x5: Phát trực tuyến A2DP và phát AVRCP
- 0x6: Phát trực tuyến HFP (cuộc gọi điện thoại/voip), bao gồm cả nhạc chuông trong băng tần và không trong băng tần
- 0x7: Âm thanh LE – phát trực tuyến nội dung nghe nhìn mà không có chế độ điều khiển
- 0x8: Âm thanh LE – phát trực tuyến nội dung nghe nhìn có thể điều khiển
- 0x9: Âm thanh LE – truyền phát cuộc gọi
- 0xA: Âm thanh LE – truyền tin
- 0xF: Tạm thời tắt nút chuyển kết nối (ví dụ: cập nhật chương trình cơ sở)
Loại ngữ cảnh và trạng thái kết nối của âm thanh LE
Đề xuất Nhà cung cấp âm thanh LE nên xử lý tất cả các loại ngữ cảnh được chỉ định trong Số được chỉ định 6.12.3 (trừ phi Nhà cung cấp không hỗ trợ một loại ngữ cảnh nhất định một cách rõ ràng) và liên kết loại ngữ cảnh với trạng thái kết nối như bên dưới.
- Trò chuyện: 0x9
- Nội dung nghe nhìn: 0x8
- Trò chơi: 0x7
- Hướng dẫn: 0x7
- Trợ lý thoại: 0x9
- Trực tiếp: 0x9
- Hiệu ứng âm thanh: 0x2
- Thông báo: 0x2
- Nhạc chuông: 0x9
- Cảnh báo: 0x7
- Chuông báo khẩn cấp: 0x9
Đối với trường hợp loại ngữ cảnh LE Audio kết hợp, chẳng hạn như phát nội dung nghe nhìn trong cuộc gọi, Nhà cung cấp sẽ sử dụng trạng thái kết nối có mức độ ưu tiên cao nhất, tức là sử dụng 0x9 (cuộc gọi) cho trường hợp trên thay vì 0x8 (nội dung nghe nhìn).
Bitmap thiết bị đã kết nối
Để tránh chuyển đổi kết nối không mong muốn, Trình tìm kiếm có thể cần biết tai nghe hiện đang kết nối với(những) thiết bị nào. Ví dụ: khi tai nghe được kết nối với điện thoại, người dùng không muốn bị gián đoạn khi chuyển đổi kết nối khi một thành viên gia đình khởi động YouTube trên máy tính bảng.
Xin lưu ý rằng bitmap này là ẩn danh, Trình tìm kiếm không thể biết những thiết bị nào khác được liên kết với Nhà cung cấp. Ví dụ: lấy 5 thiết bị liên kết:
- 0: máy tính xách tay (0bx0000000)
- 1: phoneA (0b0x000000)
- 2: phoneB (0b00x00000)
- 3: máy tính bảng (0b000x0000)
- 4: TV (0b0000x000)
Nếu các thiết bị hiện đang kết nối là máy tính xách tay và máy tính bảng, thì giá trị của bitmap sẽ là 0b10010000. Bạn có thể chấp nhận việc thay đổi thứ tự nếu không thể tránh khỏi, ví dụ: khi người dùng đặt lại tai nghe về trạng thái ban đầu hoặc khi số lượng thiết bị đã liên kết đạt đến giới hạn trên.
Quảng cáo ngẫu nhiên có thể phân giải
Để tránh việc theo dõi và tôn trọng quyền riêng tư của người dùng, Nhà cung cấp nên xoay vòng và mã hoá trường theo khoá tài khoản bằng AES-CTR:
encrypted_connection_status_field = connection_status_raw_data ^ AES(Key, IV)
trong đó
Khoá được lấy từ khoá tài khoản đang sử dụng được xác định trong phần tiếp theo.
Khoá được tạo bằng hàm HKDF, IETF RFC 5869, sử dụng hàm băm SHA-256.
Key = HKDF(account_key, NULL, UTF8("SASS-RRD-KEY"),16)
Nhà cung cấp sẽ sử dụng khoá tài khoản ban đầu tại đây, tức là byte đầu tiên của khoá là 0x04, không có trong mẫu sử dụng.
IV (vectơ ban đầu) là dữ liệu ngẫu nhiên 2 byte của Dữ liệu khoá tài khoản có giá trị đệm bằng 0, tức là IV là concat(salt, 14-byte ZEROs).
Dữ liệu thô về trạng thái kết nối được xác định trong bảng 4.1. Nếu trạng thái kết nối thay đổi, thì bạn phải tạo lại muối và RPA trong cùng một khung thời gian quảng cáo.
Điều này khiến trường trạng thái kết nối được mã hoá xoay cùng lúc với trường Dữ liệu khoá tài khoản.
Quảng cáo BLE sẽ có cấu trúc như sau:
Octet | Loại dữ liệu | Mô tả | Giá trị | Bắt buộc? |
---|---|---|---|---|
0 | uint8 |
Phiên bản và cờ | 0x10 | Bắt buộc |
1 – t | Dữ liệu khoá tài khoản | thay đổi | Bắt buộc | |
t+1 - s | Dữ liệu pin | thay đổi | Không bắt buộc | |
s+1 - var | Dữ liệu ngẫu nhiên có thể phân giải | thay đổi | Bắt buộc nếu Danh sách khoá tài khoản không trống, nếu không thì sẽ bị Loại trừ. |
Bảng 4.2: Quảng cáo BLE có dữ liệu ngẫu nhiên có thể phân giải
Dữ liệu ngẫu nhiên có thể phân giải chứa:
Octet | Loại dữ liệu | Mô tả | Giá trị | Bắt buộc? |
---|---|---|---|---|
0 | uint8 |
Độ dài và loại trường 0bLLLLTTTT
|
0bLLLL0110
|
Bắt buộc |
1 – var | Dữ liệu đã mã hoá | thay đổi | Bắt buộc |
Bảng 4.2.1: Dữ liệu ngẫu nhiên có thể phân giải
Ví dụ: nếu Dữ liệu ngẫu nhiên có thể phân giải chứa trường trạng thái kết nối đã mã hoá, thì kết quả đã giải mã sẽ là trường trạng thái kết nối.
Để ngăn chặn hành vi can thiệp, bạn nên sửa đổi một chút Dữ liệu khoá tài khoản ở trên khi Dữ liệu ngẫu nhiên có thể phân giải được đưa vào quảng cáo. Thông thường, khi tạo bộ lọc khoá tài khoản, một giá trị V được tạo bằng cách kết hợp bộ lọc khoá tài khoản với một giá trị ngẫu nhiên. Thay vào đó, khi Dữ liệu ngẫu nhiên có thể phân giải cũng đang được quảng cáo, giá trị V phải được tạo như sau:
V = concat(account_key, salt, random_resolvable_data)
Nếu cả Dữ liệu pin và Dữ liệu có thể giải quyết ngẫu nhiên đều đang được quảng cáo, thì V phải được tạo như sau:
V = concat(account_key, salt, battery_data, random_resolvable_data)
Khoá tài khoản đang sử dụng
Việc chuyển đổi kết nối dựa trên tài khoản, vì vậy, Nhà cung cấp phải đưa thông tin tài khoản của kết nối hiện tại vào quảng cáo BLE. Nếu thiết bị đang kết nối là Trình tìm kiếm nút chuyển âm thanh, thì Nhà cung cấp sẽ có thể lấy khoá tài khoản được liên kết với Trình tìm kiếm này và sử dụng khoá tài khoản này để mã hoá trường trạng thái kết nối. Nếu nguồn âm thanh được kết nối không phải là Trình tìm kiếm chuyển đổi âm thanh, thì Nhà cung cấp phải sử dụng khoá tài khoản được sử dụng gần đây nhất.
Trước khi tính toán bộ lọc khoá tài khoản, Nhà cung cấp phải sửa đổi byte đầu tiên của khoá tài khoản để đưa một trong những mẫu sử dụng sau vào:
- 0b00000100
Khoá tài khoản này không được sử dụng.
Đây là khoá mặc định (xem Khoá tài khoản). - 0b00000101
Khoá tài khoản này là khoá tài khoản được sử dụng gần đây nhất.
Trường trạng thái kết nối được mã hoá bằng khoá tài khoản này. Không có thông tin khoá tài khoản về trạng thái kết nối hiện tại, điều này có thể có nghĩa là không có thiết bị nào được kết nối hoặc thiết bị được kết nối không phải là Trình tìm công tắc âm thanh. - 0b00000110
Khoá tài khoản này là khoá tài khoản đang được sử dụng.
Trường trạng thái kết nối được mã hoá bằng khoá tài khoản này và thiết bị đang kết nối được liên kết với khoá tài khoản này.
Sơ đồ cho trọng tải của nút chuyển đổi âm thanh
Hình dưới đây cho thấy sơ đồ về tải trọng của nút chuyển Âm thanh.

Tin nhắn
Khi được kết nối, Trình tìm kiếm và Nhà cung cấp có thể sử dụng Luồng thông báo để đồng bộ hoá tính năng chuyển đổi âm thanh, kích hoạt nút chuyển kết nối, đặt và nhận lựa chọn ưu tiên chuyển đổi, thông báo trạng thái kết nối, v.v. Chúng ta tạo một nhóm thông báo và các mã thông báo dành riêng cho nút chuyển Âm thanh như bên dưới.
Tên nhóm tin nhắn | Giá trị |
---|---|
Chuyển đổi âm thanh | 0x07 |
Thông tin chi tiết bổ sung về từng mã thông báo được đưa vào các phần sau.
Tên mã thông báo | Giá trị | Chỉ đa điểm | Người gửi | Responder | Mã hóa | MAC | ACK |
---|---|---|---|---|---|---|---|
Tìm hiểu chức năng của tính năng Chuyển đổi âm thanh | 0x10 | Không | Cả hai | Cả hai, thông qua mã 0x11 | Không | Không | Không |
Thông báo về khả năng của nút chuyển đổi âm thanh | 0x11 | Không | Cả hai | Cả hai | Không | Có | Có |
Đặt trạng thái đa điểm | 0x12 | Có | Trình tìm kiếm | Nhà cung cấp | Không | Có | Có |
Đặt lựa chọn ưu tiên về việc chuyển đổi | 0x20 | Có | Trình tìm kiếm | Nhà cung cấp | Không | Có | Có |
Nhận lựa chọn ưu tiên về việc chuyển đổi | 0x21 | Có | Trình tìm kiếm | Nhà cung cấp, thông qua mã 0x22 | Không | Không | Không |
Thông báo về lựa chọn ưu tiên chuyển đổi | 0x22 | Có | Nhà cung cấp | Trình tìm kiếm | Không | Không | Không |
Chuyển nguồn âm thanh đang hoạt động(sang thiết bị đã kết nối) | 0x30 | Có | Trình tìm kiếm | Nhà cung cấp | Không | Có | Có |
Chuyển về chế độ cũ | 0x31 | Không | Trình tìm kiếm | Nhà cung cấp | Không | Có | Có |
Thông báo sự kiện chuyển đổi nhiều điểm | 0x32 | Có | Nhà cung cấp | Trình tìm kiếm | Không | Không | Không |
Nhận trạng thái kết nối | 0x33 | Có | Trình tìm kiếm | Nhà cung cấp, thông qua mã 0x34 | Không | Không | Không |
Thông báo trạng thái kết nối | 0x34 | Có | Nhà cung cấp | Trình tìm kiếm | Có | Không | Không |
Thông báo về kết nối do tính năng Chuyển đổi âm thanh khởi tạo | 0x40 | Không | Trình tìm kiếm | Nhà cung cấp | Không | Có | Có |
Cho biết khoá tài khoản đang sử dụng | 0x41 | Không | Trình tìm kiếm | Nhà cung cấp | Không | Có | Có |
Gửi dữ liệu tuỳ chỉnh | 0x42 | Không | Trình tìm kiếm | Nhà cung cấp | Không | Có | Có |
Đặt mục tiêu kết nối thả | 0x43 | Có | Trình tìm kiếm | Nhà cung cấp | Không | Có | Có |
Bảng 4.3: Thông báo chuyển đổi âm thanh
MAC của Tin nhắn chuyển đổi âm thanh
Để xác thực thông báo, tất cả thông báo chuyển đổi Âm thanh có dữ liệu bổ sung được gửi từ Trình tìm kiếm đến Nhà cung cấp đều yêu cầu Mã xác thực thông báo. Khi nhận được thông báo có MAC, bạn phải xác nhận để Người tìm kiếm biết liệu Nhà cung cấp có phản ứng với thông báo đó hay không.
Nếu xác thực thông báo thành công, Nhà cung cấp sẽ gửi ACK cho thông báo:
Octet | Loại dữ liệu | Mô tả | Giá trị |
---|---|---|---|
0 | uint8 | Xác nhận | 0xFF |
1 | uint8 | ACK | 0x01 |
2 – 3 | uint16 | Độ dài dữ liệu bổ sung | thay đổi |
4 | uint8 | Chuyển đổi âm thanh | 0x07 |
5 | uint8 | Mã thông báo chuyển đổi âm thanh | thay đổi |
6 – giây | Dữ liệu khác | thay đổi |
Nếu không thành công, Nhà cung cấp sẽ gửi NAK cho thông báo:
Octet | Loại dữ liệu | Mô tả | Giá trị |
---|---|---|---|
0 | uint8 | Xác nhận | 0xFF |
1 | uint8 | NAK | 0x02 |
2 – 3 | uint16 | Độ dài dữ liệu bổ sung | 0x0003 |
4 | uint8 | Lý do bị lỗi | thay đổi |
5 | uint8 | Chuyển đổi âm thanh | 0x07 |
6 | uint8 | Mã thông báo chuyển đổi âm thanh | thay đổi |
Xin lưu ý rằng nếu Nhà cung cấp là người gửi, thì bạn không bắt buộc phải sử dụng MAC.
Nhận khả năng của nút chuyển đổi âm thanh
Cả Trình cung cấp và Trình tìm kiếm nút chuyển âm thanh đều có thể kiểm tra xem Trình tìm kiếm/Trình cung cấp ghép nối nhanh đã kết nối có hỗ trợ nút chuyển âm thanh hay không bằng cách sử dụng thông báo bên dưới:
Octet | Loại dữ liệu | Mô tả | Giá trị |
---|---|---|---|
0 | uint8 | Chuyển đổi âm thanh | 0x07 |
1 | uint8 | Nhận khả năng của nút chuyển đổi âm thanh | 0x10 |
2 – 3 | uint16 | Độ dài dữ liệu bổ sung | 0 |
Bảng 4.3.1.0: Nhận chức năng của công tắc âm thanh
Khả năng thông báo của nút chuyển đổi âm thanh
Sau khi nhận được mã thông báo get capability of Audio switch (lấy chức năng của nút chuyển Âm thanh), Trình tìm kiếm/Trình cung cấp nút chuyển Âm thanh sẽ phản hồi bằng một trong các cờ sau:
Octet | Loại dữ liệu | Mô tả | Giá trị |
---|---|---|---|
0 | uint8 | Chuyển đổi âm thanh | 0x07 |
1 | uint8 | Khả năng thông báo của nút chuyển đổi âm thanh | 0x11 |
2 – 3 | uint16 | Độ dài dữ liệu bổ sung | 20 nếu thông báo này do Người tìm kiếm gửi 4 nếu thông báo này do Nhà cung cấp gửi |
4 – 5 | uint16 | Mã phiên bản của công tắc âm thanh | Giá trị khác 0 có nghĩa là giá trị đó hỗ trợ công tắc Âm thanh. Mã phiên bản hiện tại (có tính năng tăng cường bảo mật) là 0x0102. 0x0000 hoặc không có phản hồi trong 1 giây có nghĩa là thiết bị này không hỗ trợ nút chuyển âm thanh |
6 – 7 | flags | Cờ chức năng chuyển đổi âm thanh của Nhà cung cấp Nếu cờ này do Trình tìm kiếm gửi, thì bạn nên bỏ qua hai byte này. |
khác nhau Xem Cờ chức năng chuyển đổi âm thanh |
8 – 15 | Số chỉ dùng một lần của thông báo Chỉ bắt buộc khi thông báo này do Trình tìm kiếm gửi |
thay đổi | |
16 – 23 | Mã xác thực thông báo Chỉ bắt buộc khi thông báo này do Trình tìm kiếm gửi |
thay đổi |
Bảng 4.3.1.1: Khả năng thông báo của nút chuyển đổi âm thanh
Cờ chức năng chuyển đổi âm thanh
Bit 0 (octet 6, MSB): Trạng thái nút chuyển âm thanh
- 1, nếu trạng thái của công tắc chuyển đổi âm thanh đang bật
- 0, nếu không
Bit 1: khả năng định cấu hình đa điểm
- 1, nếu thiết bị hỗ trợ nhiều điểm và có thể chuyển đổi giữa trạng thái bật và tắt
- 0, nếu không (không hỗ trợ nhiều điểm hoặc nhiều điểm luôn bật)
Bit 2: trạng thái hiện tại của nhiều điểm
- 1, nếu tính năng đa điểm đang bật
- 0, nếu không
Bit 3: phát hiện trên đầu
- 1, nếu thiết bị này hỗ trợ tính năng phát hiện đã đeo tai nghe (ngay cả khi tính năng phát hiện đã đeo tai nghe hiện đang tắt)
- 0, nếu không
Bit 4: trạng thái hiện tại của tính năng phát hiện đang đeo
- 1, nếu bạn bật tính năng phát hiện đã đeo tai nghe
- 0, nếu không (không hỗ trợ tính năng phát hiện vùng đầu hoặc tính năng phát hiện vùng đầu bị tắt)
Tất cả các bit khác đều được đặt trước, mặc định là 0.
Đặt trạng thái đa điểm
Trên Trình tìm kiếm nút chuyển âm thanh, chúng tôi có thể cung cấp chế độ cài đặt để người dùng bật/tắt chức năng nhiều điểm. Trình tìm kiếm sẽ đặt trạng thái nhiều điểm cho Nhà cung cấp bằng cách sử dụng thông báo bên dưới:
Octet | Loại dữ liệu | Mô tả | Giá trị |
---|---|---|---|
0 | uint8 | Chuyển đổi âm thanh | 0x07 |
1 | uint8 | Đặt trạng thái đa điểm | 0x12 |
2 – 3 | uint16 | Độ dài dữ liệu bổ sung | 17 |
4 | uint8 | Trạng thái đa điểm | 0: tắt chế độ đa điểm 1: bật chế độ đa điểm |
5 – 12 | Số chỉ dùng một lần của tin nhắn | thay đổi | |
13 – 20 | Mã xác thực thông báo | thay đổi |
Bảng 4.3.1.2: Đặt trạng thái đa điểm
Đặt lựa chọn ưu tiên về việc chuyển đổi
Trình tìm kiếm công tắc âm thanh có thể sửa đổi tuỳ chọn chuyển đổi của nhiều điểm và đặt tuỳ chọn đó thành Nhà cung cấp bằng cách sử dụng thông báo bên dưới:
Octet | Loại dữ liệu | Mô tả | Giá trị |
---|---|---|---|
0 | uint8 | Chuyển đổi âm thanh | 0x07 |
1 | uint8 | Đặt lựa chọn ưu tiên về việc chuyển đổi | 0x20 |
2 – 3 | uint16 | Độ dài dữ liệu bổ sung | 18 |
4 | flags | Lựa chọn ưu tiên về việc chuyển đổi | khác nhau Xem cờ tuỳ chọn chuyển đổi nhiều điểm |
5 | Chế độ cài đặt chuyển đổi nâng cao Byte này được đặt trước, giá trị mặc định là 0 |
thay đổi | |
6 – 13 | Số chỉ dùng một lần của tin nhắn | thay đổi | |
14 – 21 | Mã xác thực thông báo | thay đổi |
Bảng 4.3.2.0: Thiết lập lựa chọn ưu tiên chuyển đổi
Cờ tuỳ chọn chuyển đổi nhiều điểm
- Bit 0 (MSB): A2DP so với A2DP (mặc định là 0)
- Bit 1: HFP so với HFP (mặc định là 0)
- Bit 2: A2DP so với HFP (mặc định là 0)
- Bit 3: HFP so với A2DP (mặc định là 1)
- Bit 4 – 7: dành riêng
- Ở trên là "yêu cầu hồ sơ mới" so với "hồ sơ đang hoạt động hiện tại"
- 0 nếu không chuyển
- 1 để chuyển đổi
Lấy lựa chọn ưu tiên về việc chuyển đổi
Trình tìm kiếm công tắc âm thanh có thể truy vấn lựa chọn ưu tiên chuyển đổi của nhiều điểm từ Nhà cung cấp bằng cách sử dụng thông báo bên dưới:
Octet | Loại dữ liệu | Mô tả | Giá trị |
---|---|---|---|
0 | uint8 | Chuyển đổi âm thanh | 0x07 |
1 | uint8 | Nhận cấu hình chuyển đổi | 0x21 |
2 – 3 | uint16 | Độ dài dữ liệu bổ sung | 0 |
Bảng 4.3.2.1: Lấy lựa chọn ưu tiên chuyển đổi
Thông báo về lựa chọn ưu tiên chuyển đổi
Octet | Loại dữ liệu | Mô tả | Giá trị |
---|---|---|---|
0 | uint8 | Chuyển đổi âm thanh | 0x07 |
1 | uint8 | Thông báo về lựa chọn ưu tiên chuyển đổi | 0x22 |
2 – 3 | uint16 | Độ dài dữ liệu bổ sung | 2 |
4 | flags | Chuyển đổi cờ lựa chọn ưu tiên | khác nhau Xem cờ tuỳ chọn chuyển đổi nhiều điểm |
5 | Chế độ cài đặt chuyển đổi nâng cao Byte này được đặt trước, giá trị mặc định phải là 0 |
thay đổi |
Bảng 4.3.2.2: Thông báo về lựa chọn ưu tiên chuyển đổi
Chuyển đổi nguồn âm thanh đang hoạt động (sang thiết bị đã kết nối)
Trình tìm kiếm công tắc âm thanh có thể yêu cầu Nhà cung cấp đa điểm chuyển đổi nguồn âm thanh đang hoạt động giữa các thiết bị đã kết nối bằng cách sử dụng thông báo dưới đây:
Octet | Loại dữ liệu | Mô tả | Giá trị |
---|---|---|---|
0 | uint8 | Chuyển đổi âm thanh | 0x07 |
1 | uint8 | Chuyển đổi nguồn âm thanh đang hoạt động (sang thiết bị đã kết nối) | 0x30 |
2 – 3 | uint16 | Độ dài dữ liệu bổ sung | 17 |
4 | flags | Chuyển đổi cờ sự kiện nguồn âm thanh đang hoạt động | biến Xem sự kiện chuyển đổi nguồn âm thanh đang hoạt động |
5 – 12 | Số chỉ dùng một lần của tin nhắn | thay đổi | |
13 – 20 | Mã xác thực thông báo | thay đổi |
Bảng 4.3.3.0: Chuyển đổi nguồn âm thanh đang hoạt động (sang thiết bị đã kết nối)
Chuyển đổi sự kiện nguồn âm thanh đang hoạt động
- Bit 0 (MSB): 1 chuyển sang thiết bị này, 0 chuyển sang thiết bị thứ hai được kết nối
- Bit 1: 1 tiếp tục phát khi chuyển sang thiết bị sau khi chuyển đổi, 0 nếu không. Tiếp tục phát có nghĩa là Nhà cung cấp gửi thông báo PLAY đến Trình tìm kiếm thông qua hồ sơ AVRCP. Nếu trạng thái trước đó (trước khi chuyển sang trạng thái khác) không phải là CHƠI, thì Nhà cung cấp sẽ bỏ qua cờ này.
- Bit 2: 1 từ chối SCO trên thiết bị đã chuyển, 0 nếu không
- Bit 3: 1 ngắt kết nối Bluetooth khi chuyển sang thiết bị khác, 0 nếu không.
- Bit 4 – 7: được đặt trước.
Trình tìm kiếm chuyển đổi âm thanh không phải lúc nào cũng biết chính xác trạng thái của mình, vì vậy, Nhà cung cấp có thể nhận được thông báo "chuyển sang thiết bị này" khi Trình tìm kiếm đã là thiết bị đang hoạt động. Trong trường hợp này, để hiển thị giao diện người dùng chính xác trên Trình tìm kiếm, Nhà cung cấp có thể gửi NAK kèm theo lý do lỗi là 0x4 – Hành động thừa trên thiết bị.
Đối với Nhà cung cấp âm thanh LE có nhiều thành viên trong nhóm, Nhà cung cấp phải ngắt kết nối tất cả thành viên khỏi Trình tìm kiếm, nếu không, ngăn xếp Bluetooth của Trình tìm kiếm sẽ kết nối lại với Nhà cung cấp.
Chuyển về (thiết bị đã ngắt kết nối)
Nếu không muốn chuyển đổi kết nối, người dùng có thể huỷ chuyển đổi. Trong một số trường hợp nhất định, bạn nên khôi phục kết nối âm thanh để giảm thiểu sự gián đoạn. Trình tìm kiếm sẽ sử dụng thông báo bên dưới để kích hoạt việc chuyển về:
Octet | Loại dữ liệu | Mô tả | Giá trị |
---|---|---|---|
0 | uint8 | Chuyển đổi âm thanh | 0x07 |
1 | uint8 | Chuyển về (thiết bị đã ngắt kết nối) | 0x31 |
2 – 3 | uint16 | Độ dài dữ liệu bổ sung | 17 |
4 | uint8 | Sự kiện chuyển về | khác nhau 0x01: chuyển về 0x02: chuyển về và tiếp tục phát |
5 – 12 | Số chỉ dùng một lần của tin nhắn | thay đổi | |
13 – 20 | Mã xác thực thông báo | thay đổi |
Bảng 4.3.3.1: Chuyển về (thiết bị đã ngắt kết nối)
Đối với Nhà cung cấp nhiều điểm, để chuyển đổi kết nối, Nhà cung cấp có thể huỷ kết nối với một thiết bị nguồn âm thanh và tạm dừng phiên âm thanh trên nguồn âm thanh khác. Ví dụ: giả sử tai nghe đa điểm được kết nối với một máy tính bảng và một thiết bị chuyển đổi âm thanh thứ ba được hỗ trợ. Người dùng đang xem video trên máy tính bảng khi có cuộc gọi đến trên điện thoại. Điện thoại sẽ kích hoạt một nút chuyển kết nối trên tai nghe. Nút chuyển này cần phải ngắt kết nối của thiết bị thứ 3 để kết nối với điện thoại, đồng thời tạm dừng phiên phát nội dung nghe nhìn trên máy tính bảng để nhận nhạc chuông từ điện thoại. Nếu người dùng từ chối cuộc gọi, điện thoại có thể yêu cầu tai nghe "chuyển về và tiếp tục phát". Khi nhận được yêu cầu này, tai nghe phải kết nối lại với thiết bị thứ 3 và tiếp tục phát video đã tạm dừng trên máy tính bảng.
Thông báo sự kiện chuyển đổi đa điểm
Để người dùng biết về sự kiện chuyển đổi nhiều điểm đang diễn ra, Trình tìm kiếm nút chuyển âm thanh có thể hiển thị thông báo cho người dùng. Nhà cung cấp phải thông báo cho Trình tìm kiếm nút chuyển Âm thanh đã kết nối về sự kiện chuyển đổi.
Octet | Loại dữ liệu | Mô tả | Giá trị |
---|---|---|---|
0 | uint8 | Chuyển đổi âm thanh | 0x07 |
1 | uint8 | Thông báo sự kiện chuyển đổi nhiều điểm Nhà cung cấp phải gửi sự kiện này trên mọi nút chuyển, bao gồm cả Trình tìm kiếm nút chuyển âm thanh sang Trình tìm kiếm nút chuyển không phải âm thanh, Trình tìm kiếm nút chuyển không phải âm thanh sang Trình tìm kiếm nút chuyển âm thanh và Trình tìm kiếm nút chuyển âm thanh sang Trình tìm kiếm nút chuyển âm thanh |
0x32 |
2 – 3 | uint16 | Độ dài dữ liệu bổ sung | thay đổi |
4 | uint8 | Lý do chuyển đổi Giá trị này phải được xác định dựa trên Trạng thái kết nối. Đối với các trường hợp sử dụng LE Audio, bạn nên xem xét mối liên kết giữa Loại ngữ cảnh LE Audio và trạng thái kết nối. Ví dụ: trạng thái kết nối tương ứng với Trợ lý thoại là 0x9(âm thanh LE – truyền trực tuyến cuộc gọi). Do đó, lý do chuyển đổi cho một nút chuyển do Trợ lý thoại khởi tạo phải là 0x02. |
thay đổi 0x00: Chưa xác định 0x01: Nội dung nghe nhìn (ví dụ: truyền trực tuyến A2DP, truyền trực tuyến nội dung nghe nhìn LEA) 0x02: Cuộc gọi (ví dụ: truyền trực tuyến HFP, truyền trực tuyến cuộc gọi LEA) |
5 | uint8 | Thiết bị mục tiêu | thay đổi 0x01: thiết bị này 0x02: một thiết bị khác đã kết nối |
6 – n | utf8 | Tên thiết bị mục tiêu nếu thiết bị mục tiêu là Trình tìm kiếm nút chuyển âm thanh, sử dụng tên mà Trình tìm kiếm đã gửi đến, nếu không thì sử dụng tên BT, nếu không áp dụng thì sử dụng 2 byte cuối cùng của địa chỉ |
thay đổi |
Bảng 4.3.3.2: Thông báo sự kiện chuyển đổi nhiều điểm
Nhận trạng thái kết nối
Trình tìm kiếm có thể nhận trạng thái kết nối hiện tại từ Nhà cung cấp:
Octet | Loại dữ liệu | Mô tả | Giá trị |
---|---|---|---|
0 | uint8 | Chuyển đổi âm thanh | 0x07 |
1 | uint8 | Nhận trạng thái kết nối | 0x33 |
2 – 3 | uint16 | Độ dài dữ liệu bổ sung | 0 |
Bảng 4.3.3.3: Lấy trạng thái kết nối
Sau khi nhận được thông báo này, Nhà cung cấp sẽ phản hồi bằng mã thông báo 0x34, thông báo trạng thái kết nối.
Thông báo trạng thái kết nối
Như đã xác định trong trọng tải quảng cáo BLE, đối với Nhà cung cấp đa điểm, nếu trạng thái kết nối thay đổi, ngoại trừ việc thay đổi gói quảng cáo, Nhà cung cấp cũng phải thông báo cho Trình tìm kiếm đã kết nối đang sử dụng cùng một khoá tài khoản về thay đổi đó. Nếu Nhà cung cấp được kết nối với Trình tìm kiếm nút chuyển Âm thanh và Trình tìm kiếm nút chuyển không phải Âm thanh, nếu Trình tìm kiếm nút chuyển không phải Âm thanh đang hoạt động, thì Nhà cung cấp cũng phải thông báo cho Trình tìm kiếm nút chuyển Âm thanh đã kết nối về trạng thái kết nối (sử dụng khoá tài khoản của Trình tìm kiếm).
Octet | Loại dữ liệu | Mô tả | Giá trị |
---|---|---|---|
0 | uint8 | Chuyển đổi âm thanh | 0x07 |
1 | uint8 | Thông báo trạng thái kết nối | 0x34 |
2 – 3 | uint16 | Độ dài dữ liệu bổ sung | thay đổi |
4 | uint8 | Cờ thiết bị đang hoạt động | thay đổi 0x00: Trình tìm kiếm này là thụ động và thiết bị đang hoạt động đang sử dụng cùng một khoá tài khoản 0x01: Trình tìm kiếm này là thiết bị đang hoạt động 0x02: Trình tìm kiếm này là thụ động và thiết bị đang hoạt động không phải là Trình tìm kiếm nút chuyển Âm thanh. |
5 – n | Trạng thái kết nối được mã hoá | thay đổi | |
n+1 - n+8 | Số chỉ dùng một lần của tin nhắn | thay đổi |
Bảng 4.3.3.4: Thông báo trạng thái kết nối
Thông báo về trạng thái kết nối được mã hoá
encrypted_connection_status = connection_status_raw_data ^ AES(Key, IV)
trong đó:
Khoá được lấy từ khoá tài khoản đang sử dụng, hãy xem phần Quảng cáo có thể phân giải ngẫu nhiên.
Key = HKDF(account_key, NULL, UTF8("SASS-RRD-KEY"),16)
IV là concat(Session_nonce, Message_nonce)
connection_status_raw_data = concat(connection_state, custom_data, connected_devices) được xác định trong BLE trọng tải quảng cáo Lưu ý rằng bạn không nên thêm byte cho độ dài và loại trường vì chúng ta có mã thông báo và độ dài dữ liệu tại đây.
Thông báo về kết nối do tính năng Chuyển đổi âm thanh khởi tạo
Nhà cung cấp nút chuyển âm thanh có thể cần biết liệu việc chuyển đổi kết nối có được kích hoạt bằng nút chuyển âm thanh hay không để có các phản ứng khác nhau, ví dụ: tắt âm báo cho các sự kiện nút chuyển âm thanh. Trình tìm kiếm sẽ gửi thông báo để thông báo cho Nhà cung cấp rằng kết nối này là kết nối do công tắc Âm thanh khởi tạo.
Octet | Loại dữ liệu | Mô tả | Giá trị |
---|---|---|---|
0 | uint8 | Chuyển đổi âm thanh | 0x07 |
1 | uint8 | Thông báo về kết nối do tính năng Chuyển đổi âm thanh khởi tạo | 0x40 |
2 – 3 | uint16 | Độ dài dữ liệu bổ sung | 17 |
4 | uint8 | Chỉ báo kết nối do công tắc âm thanh khởi tạo | thay đổi 0: kết nối này không được kích hoạt bằng Công tắc âm thanh 1: đây là kết nối do Công tắc âm thanh khởi tạo |
5 – 12 | Số chỉ dùng một lần của tin nhắn | thay đổi | |
13 – 20 | Mã xác thực thông báo | thay đổi |
Bảng 4.3.4.0: Thông báo về kết nối do công tắc âm thanh khởi tạo
Cho biết khoá tài khoản đang sử dụng
Nếu nhiều khoá tài khoản trên Trình tìm kiếm (ví dụ: nhiều người dùng) được liên kết với Nhà cung cấp, thì Trình tìm kiếm sẽ sử dụng thông báo bên dưới để cho biết khoá tài khoản nào đang được sử dụng.
Octet | Loại dữ liệu | Mô tả | Giá trị |
---|---|---|---|
0 | uint8 | Chuyển đổi âm thanh | 0x07 |
1 | uint8 | Cho biết khoá tài khoản đang sử dụng | 0x41 |
2 – 3 | uint16 | Độ dài dữ liệu bổ sung | 22 |
4 đến 9 | utf8 | Chuỗi đang sử dụng | UTF8 ("đang sử dụng") |
10 – 17 | Số chỉ dùng một lần của tin nhắn | thay đổi | |
18 – 25 | Mã xác thực thông báo | thay đổi |
Bảng 4.3.4.1: Cho biết khoá tài khoản đang sử dụng
Khi nhận được thông báo này, Nhà cung cấp có thể biết khoá tài khoản nào đang được sử dụng bằng cách xác minh mã xác thực thông báo.
Gửi dữ liệu tuỳ chỉnh
Trình tìm kiếm nút chuyển Âm thanh đang hoạt động có thể đóng gói thông tin (ví dụ: mức sử dụng âm thanh) của luồng âm thanh trong byte dữ liệu tuỳ chỉnh và gửi thông tin đó đến Nhà cung cấp bằng cách sử dụng thông báo bên dưới:
Octet | Loại dữ liệu | Mô tả | Giá trị |
---|---|---|---|
0 | uint8 | Chuyển đổi âm thanh | 0x07 |
1 | uint8 | Gửi dữ liệu tuỳ chỉnh | 0x42 |
2 – 3 | uint16 | Độ dài dữ liệu bổ sung | 17 |
4 | uint8 | Dữ liệu tùy chỉnh | thay đổi |
5 – 12 | Số chỉ dùng một lần của tin nhắn | thay đổi | |
13 – 20 | Mã xác thực thông báo | thay đổi |
Bảng 4.3.4.2: Gửi dữ liệu tuỳ chỉnh
Sau khi nhận được dữ liệu tuỳ chỉnh, Nhà cung cấp sẽ cập nhật gói quảng cáo để đưa dữ liệu tuỳ chỉnh vào. Đối với Nhà cung cấp nhiều điểm, ứng dụng cũng phải thông báo về việc thay đổi trạng thái kết nối cho một Trình tìm kiếm khác đã kết nối bằng cùng một khoá tài khoản.
Đặt mục tiêu kết nối thả
Trên tai nghe đa điểm, nếu kết nối ưu tiên cần ngắt không phải là kết nối ít được sử dụng gần đây nhất, thì Trình tìm kiếm nút chuyển âm thanh có thể cho Nhà cung cấp biết thiết bị nào cần ngắt bằng cách sử dụng thông báo bên dưới:
Octet | Loại dữ liệu | Mô tả | Giá trị |
---|---|---|---|
0 | uint8 | Chuyển đổi âm thanh | 0x07 |
1 | uint8 | Đặt mục tiêu kết nối thả | 0x43 |
2 – 3 | uint16 | Độ dài dữ liệu bổ sung | 17 |
4 | uint8 | Thiết bị được kết nối mục tiêu sẽ bị loại bỏ | khác nhau 1: thiết bị này |
5 – 12 | Số chỉ dùng một lần của tin nhắn | thay đổi | |
13 – 20 | Mã xác thực thông báo | thay đổi |
Bảng 4.3.4.3: Đặt mục tiêu kết nối thả