Cambio de audio
Dado que los usuarios usan cada vez más dispositivos de fuentes de audio para realizar sus tareas diarias, existe una demanda creciente por una solución más simple para administrar el uso de auriculares en todos los dispositivos. El cambio de audio transiciona sin problemas las conexiones de los auriculares entre dispositivos según la actividad del usuario (p.ej., comenzar una película) y los eventos priorizados (p.ej., una llamada entrante).
Principios de UX
- El cambio de conexión debe ser rápido y basarse en la acción del usuario.
- El cambio de conexión debe ser transparente para los usuarios, de modo que estos puedan controlarlo o revertirlo si no lo desean.
- El cambio debe respetar la privacidad del usuario.
Roles
Buscador de cambio de audio: Es un dispositivo de fuente de audio (por ejemplo, un teléfono o una tablet) que busca auriculares cercanos para conectarlos cuando corresponda.
Proveedor de cambio de audio: Por lo general, el proveedor es un auricular que anuncia su presencia y estado de conexión para que los solicitantes tomen decisiones sobre el cambio.
Descripción general de los requisitos
Para lograr el cambio inteligente, los proveedores deben cumplir con los siguientes requisitos:
Nombre | Descripción | Requisitos | ¿Obligatorio? |
---|---|---|---|
Escaneo de página | Para aceptar una solicitud de conexión nueva de otro Seeker cuando hay una existente. Para proveedores de un solo punto:
|
Se requiere el modo de búsqueda de páginas de baja latencia (el intervalo de escaneo no debe superar los 640 ms) para mejorar el rendimiento. Para compensar la duración de la batería y el rendimiento del cambio, el proveedor puede tener un modo de búsqueda de página predeterminado para la mayoría de los casos (modo de bajo consumo, el intervalo de análisis no debe superar los 1,280 ms). Sin embargo, el modo de baja latencia debe usarse en las siguientes situaciones:
|
Obligatorio |
Historial de conexiones | Para volver a la conexión anterior y reanudar la reproducción, si corresponde. El cambio se activará mediante comunicaciones a través de las APIs de Message Stream. El evento de pausa se debe incluir en la grabación para reanudar la reproducción, si corresponde. |
Conserva el historial de conexiones y, además, implementa las APIs de Message Stream. | Obligatorio |
Estado de conexión | Para que los solicitantes realicen la evaluación de cambio de conexión.El estado de conexión incluye lo siguiente:
|
Incluye el estado de conexión en los anuncios de BLE y el flujo de mensajes. | Obligatorio |
Cambio de capacidades del entorno de ejecución | El cambio de audio se puede habilitar actualizando el firmware del proveedor, por lo que las capacidades deben sincronizarse entre Seeker y el proveedor en el tiempo de ejecución. | Implementa las APIs de Message Stream para acceder a las capacidades del entorno de ejecución. | Obligatorio |
Reglas de cambio configurables | Permite que Seeker configure la prioridad entre la transmisión de audio activa existente y las nuevas solicitudes de transmisión de audio mediante la configuración de preferencias del usuario. Por ejemplo, Seeker puede proporcionar una configuración de IU para permitir que los usuarios habiliten o inhabiliten el cambio automático entre la transmisión de contenido multimedia y las llamadas. El buscador de cambio de audio establecerá y obtendrá la regla de cambio a través del flujo de mensajes. |
Solo proveedores de varios puntos. Implementa las APIs de flujo de mensajes para que se puedan configurar las reglas de cambio entre dispositivos conectados. |
Opcional |
Cambio de dispositivo activo | Permite que el Seeker de cambio de audio simule el cambio de audio entre dispositivos conectados. En el lado de Seeker del cambio de audio, es posible que haya una IU para que los usuarios cambien fácilmente entre dispositivos conectados. |
Solo proveedores de varios puntos. Implementa las API de Message Stream para el Seeker del cambio de audio para determinar la fuente de audio activa entre los dispositivos conectados. |
Obligatorio |
Notificación de cambio de varios puntos | Permite que el buscador de cambio de audio muestre la notificación de cambio. | Solo proveedores de varios puntos. Implementa las APIs de flujo de mensajes para notificar a los buscadores de interruptores de audio conectados cuando se produce un cambio de varios puntos. |
Obligatorio |
Carga útil de publicidad
El Proveedor deberá incluir su estado de conexión actual en el anuncio, basado en los datos de la cuenta de Vinculación rápida que se describen en Publicidad: Cuando no es detectable.
Ten en cuenta que la versión de la tabla 4.2 es 0x1.
Campo de estado de la conexión
Octeto | Tipo de datos | Descripción | Valor | ¿Obligatorio? |
---|---|---|---|---|
0 | uint8 |
Longitud y tipo del campo 0bLLLLTTTT
|
0bLLLL0101
|
Obligatorio |
1 | uint8 |
Estado de conexión 0bHAFRSSSS
|
0bHAFRSSSS
|
Obligatorio |
2 | uint8 |
Datos personalizados Actualmente, solo incluye el tipo de contenido que se usa para describir el uso de la transmisión de audio actual. El buscador se la enviará al proveedor. |
El valor se envía desde el buscador de la transmisión activa actual al proveedor a través del flujo de mensajes. 0 si la transmisión activa actual no proviene de Seeker. | Obligatorio |
3: var | Mapa de bits de dispositivos conectados Es un mapa de bits que muestra qué dispositivos están conectados actualmente al proveedor. Todos los dispositivos conectados están organizados en orden, un bit para un dispositivo vinculado. La longitud dependerá de la cantidad de dispositivos vinculados del proveedor que haya. |
El bit asignado se establece en 1 si el dispositivo está conectado actualmente al proveedor; de lo contrario, se fija en 0. Consulta Mapa de bits de dispositivo conectado para obtener más información. |
Opcional |
Tabla 4.1: Datos sin procesar del campo de estado de conexión
Marcas de conexión
0bH = en detección de cabeza
- 1, en la cabeza ahora
- 0; de lo contrario, no sobre la cabeza o no hay sensor OHD
0bA = disponibilidad de la conexión
- 1, hay una conexión disponible
- 0, de lo contrario
0bF = modo de enfoque
- 1, en el modo enfocado ahora, no se permite el cambio de conexión para el uso de contenido multimedia, es decir, no se puede cambiar de A2DP a A2DP
- 0, de lo contrario
0bR = reconexión automática
- 1, si el proveedor vuelve a conectar automáticamente la conexión actual, lo que significa que los usuarios no la conectan (para varios puntos, si una de las conexiones existentes se vuelve a conectar automáticamente, se debe establecer en 1)
- 0, de lo contrario
Estado de conexión
- 0x0: sin conexión
- 0x1: paginación
- 0x2: conectado, pero sin transferencia de datos
- 0x3: Transferencia de datos que no es de audio (solo cuando se pueden cambiar, si no es así, mediante 0xF)
- 0x4: Transmisión A2DP, AVRCP no aplicable
- 0x5: Transmisión A2DP y reproducción AVRCP
- 0x6: Transmisión de HFP (llamada de teléfono/voip), incluidos el tono dentro y fuera de banda
- 0x7: LE Audio (transmisión de contenido multimedia sin control)
- 0x8: LE Audio, transmisión multimedia con control
- 0x9: LE Audio - Transmisión de llamadas
- 0xA: LE Audio: transmisión
- 0xF: Inhabilita el cambio de conexión de forma temporal (p.ej., la actualización de firmware)
Mapa de bits de dispositivo conectado
Para evitar un cambio de conexión no deseado, es posible que el buscador necesite saber a qué dispositivos están conectados los auriculares. Por ejemplo, cuando los auriculares están conectados al teléfono, el usuario no quiere que el cambio de conexión lo interrumpa cuando uno de los miembros de su familia inicia YouTube en la tablet.
Ten en cuenta que este mapa de bits es anónimo, por lo que Seeker no puede saber qué otros dispositivos están vinculados con el proveedor. Por ejemplo, analicemos los 5 dispositivos vinculados:
- 0: laptop (0bx0000000)
- 1: teléfonoA (0b0x000000)
- 2: teléfonoB (0b00x00000)
- 3: tablet (0B000x0000)
- 4: TV (0B0000x000)
Si los dispositivos conectados actualmente son una laptop y una tablet, el valor del mapa de bits será 0b10010000. El cambio de orden es aceptable si no se puede evitar, p.ej., cuando los usuarios restablecen la configuración de fábrica de los auriculares o cuando el recuento de dispositivos vinculados alcanza el límite superior.
Anuncio aleatorio que se puede resolver
Para evitar realizar un seguimiento y respetar la privacidad del usuario, el Proveedor debe rotar y encriptar el campo con la clave de la cuenta mediante AES-CTR:
encrypted_connection_status_field = connection_status_raw_data ^ AES(Key, IV)
en el que
La clave se deriva de la clave de la cuenta en uso, que se define en la siguiente sección.
La función de HKDF, IETF RFC 5869, genera la clave con la función de hash SHA-256.
Key = HKDF(account_key, NULL, UTF8("SASS-RRD-KEY"),16)
El proveedor usará la clave de cuenta original aquí, es decir, el primer byte de la clave es 0x04, no incluido en el patrón de uso.
IV (vector inicial) es la sal de 2 bytes de datos clave de cuenta sin relleno, es decir, IV es concat(sal, Ceros de 14 bytes).
Los datos sin procesar del estado de conexión se definen en la tabla 4.1. Si el estado de la conexión cambia, la sal y el RPA deben regenerarse en el mismo período publicitario.
Esto hace que el campo de estado de la conexión encriptada rote al mismo tiempo que los datos de la clave de la cuenta.
El anuncio BLE se estructurará de la siguiente manera:
Octeto | Tipo de datos | Descripción | Valor | ¿Obligatorio? |
---|---|---|---|---|
0 | uint8 |
Versión y marcas | 0 × 10 | Obligatorio |
1: t | Datos clave de la cuenta | varía | Obligatorio | |
t+1: s | Datos de la batería | varía | Opcional | |
s+1: var | Datos que se pueden resolver aleatoriamente | varía | Es obligatoria si la lista de claves de la cuenta no está vacía; de lo contrario,se excluye. |
Tabla 4.2: Anuncio de BLE con datos resolubles aleatorios
Los datos resolubles aleatorios contienen lo siguiente:
Octeto | Tipo de datos | Descripción | Valor | ¿Obligatorio? |
---|---|---|---|---|
0 | uint8 |
Longitud y tipo del campo 0bLLLLTTTT
|
0bLLLL0110
|
Obligatorio |
1: var | Datos encriptados | varía | Obligatorio |
Tabla 4.2.1: Datos aleatorios que se pueden resolver
Por ejemplo, si los datos con problemas aleatorios contienen un campo de estado de conexión encriptado, el resultado desencriptado será el campo de estado de la conexión.
Para evitar alteraciones, los datos de la clave de la cuenta mencionados anteriormente deben modificarse ligeramente cuando se incluyan en el anuncio los datos que se puedan resolver aleatoriamente. Por lo general, cuando se compila el filtro de clave de cuenta, se produce un valor V combinando el filtro de clave de cuenta con una sal. En cambio, cuando también se anuncian datos resolubles aleatorios, el valor V debe construirse de la siguiente manera:
V = concat(account_key, salt, random_resolvable_data)
Si se anuncian tanto datos de batería como datos resolubles aleatorios, V debe construirse de la siguiente manera:
V = concat(account_key, salt, battery_data, random_resolvable_data)
Clave de cuenta en uso
El cambio de conexión se basa en la cuenta, por lo que el proveedor debe incluir la información de la cuenta de la conexión actual en el anuncio BLE. Si el dispositivo conectado actual es un Seeker de cambio de audio, el proveedor debería poder obtener la clave de la cuenta asociada con ese buscador y usarla para encriptar el campo de estado de la conexión. Si la fuente de audio conectada no es un buscador de interruptores de audio, el proveedor debe usar la clave de cuenta que se usó más recientemente.
Antes de calcular el filtro de claves de cuenta, el proveedor debe modificar el primer byte de las claves de cuenta para incluir uno de los siguientes patrones de uso:
- 0b00000100
Esta clave de cuenta no está en uso.
Esta es la predeterminada (consulta Clave de cuenta). - 0b00000101
Esta clave de cuenta es la que se usó más recientemente.
Esta clave de cuenta encripta el campo de estado de la conexión. No hay información clave de la cuenta sobre el estado actual de la conexión, lo que podría significar que no hay dispositivos conectados o que el dispositivo conectado no es un buscador de cambio de audio. - 0b00000110
Esta clave de cuenta es la que está en uso.
El campo de estado de la conexión está encriptado por esta clave de cuenta, y el dispositivo conectado actual está asociado con esta clave.
Esquema para la carga útil del cambio de audio
En la siguiente figura, se muestra el esquema de la carga útil del cambio de audio.

Mensajes
Cuando se conectan, Seeker y el proveedor pueden usar la Transmisión de mensajes para sincronizar la capacidad de cambio de audio, activar un cambio de conexión, configurar y obtener la preferencia de cambio, notificar el estado de la conexión, etcétera. Creamos un grupo de mensajes y códigos de mensaje específicos para el cambio de audio, como se muestra a continuación.
Nombre del grupo de mensajes | Valor |
---|---|
Cambio de audio | 0 × 07 |
En las siguientes secciones, se incluyen detalles adicionales para cada código de mensaje.
Nombre del código del mensaje | Valor | Solo varios puntos | Remitente | Persona que responde | Encriptar | MAC | Confirmación |
---|---|---|---|---|---|---|---|
Obtén la capacidad de cambiar el audio | 0 × 10 | N | Ambos | Ambos, mediante el código 0x11 | N | N | N |
Función de notificación sobre el cambio de audio | 0 × 11 | N | Ambos | Ambos | N | S | Sí |
Configura el estado de varios puntos | 0 × 12 | Sí | Buscador | Proveedor | N | S | Sí |
Establecer preferencias de cambio | 0 × 20 | Sí | Buscador | Proveedor | N | S | Sí |
Obtener preferencias de cambio | 0 × 21 | Sí | Buscador | Proveedor, mediante el código 0x22 | N | N | N |
Notificar al cambio de preferencia | 0 × 22 | Sí | Proveedor | Buscador | N | N | N |
Cambia la fuente de audio activa(al dispositivo conectado) | 0 × 30 | Sí | Buscador | Proveedor | N | S | Sí |
Volver a cambiar (al dispositivo desconectado) | 0 × 31 | N | Buscador | Proveedor | N | S | Sí |
Notificar evento de interruptor de varios puntos | 0 × 32 | Sí | Proveedor | Buscador | N | N | N |
Obtén el estado de la conexión | 0 × 33 | Sí | Buscador | Proveedor, mediante el código 0x34 | N | N | N |
Notificar el estado de la conexión | 0 × 34 | Sí | Proveedor | Buscador | Sí | N | N |
Notificar la conexión iniciada por el cambio de audio | 0 × 40 | N | Buscador | Proveedor | N | S | Sí |
Indicar la clave de cuenta de uso | 0 × 41 | N | Buscador | Proveedor | N | S | Sí |
Cómo enviar datos personalizados | 0 × 42 | N | Buscador | Proveedor | N | S | Sí |
Establece el objetivo de conexión directa | 0 × 43 | Sí | Buscador | Proveedor | N | S | Sí |
Tabla 4.3: Mensajes de cambio de audio
Mensajes de MAC de cambio de audio
Para proporcionar la autenticación de mensajes, todos los mensajes de cambio de audio con datos adicionales enviados de Seeker al proveedor requieren un código de autenticación de mensajes. Cuando se recibe un mensaje con MAC, se debe confirmar para que el buscador sepa si el proveedor reaccionó al mensaje.
Si la autenticación del mensaje se ejecuta correctamente, el proveedor enviará el ACK para el mensaje:
Octeto | Tipo de datos | Descripción | Valor |
---|---|---|---|
0 | Uint8 | Confirmación | 0xFF |
1 | Uint8 | Confirmación | 0x01 |
Entre 2 y 3 | Uint16 | Longitud adicional de los datos | varía |
4 | Uint8 | Cambio de audio | 0 × 07 |
5 | Uint8 | Código del mensaje de cambio de audio | varía |
6: s | Datos adicionales | varía |
Si falla, el Proveedor enviará el NAK para el mensaje:
Octeto | Tipo de datos | Descripción | Valor |
---|---|---|---|
0 | Uint8 | Confirmación | 0xFF |
1 | Uint8 | NAK | 0x02 |
Entre 2 y 3 | Uint16 | Longitud adicional de los datos | 0x0003 |
4 | Uint8 | Motivo del error | varía |
5 | Uint8 | Cambio de audio | 0 × 07 |
6 | Uint8 | Código del mensaje de cambio de audio | varía |
Ten en cuenta que, si el proveedor es el remitente, no se requiere una MAC.
Obtener la función de cambio de audio
Tanto el proveedor de cambio de audio como el Seeker pueden verificar si el Seeker o el proveedor de Vinculación rápida conectados admite el cambio de audio o no mediante el siguiente mensaje:
Octeto | Tipo de datos | Descripción | Valor |
---|---|---|---|
0 | Uint8 | Cambio de audio | 0 × 07 |
1 | Uint8 | Obtener la función de cambio de audio | 0 × 10 |
Entre 2 y 3 | Uint16 | Longitud adicional de los datos | 0 |
Tabla 4.3.1.0: Cómo obtener la capacidad del cambio de audio
Función Notificar el cambio de audio
Cuando recibas el código de mensaje get capability of Audio switch, el Seeker/Provider del cambio de audio responderá con una de las siguientes marcas:
Octeto | Tipo de datos | Descripción | Valor |
---|---|---|---|
0 | Uint8 | Cambio de audio | 0 × 07 |
1 | Uint8 | Función Notificar el cambio de audio | 0 × 11 |
Entre 2 y 3 | Uint16 | Longitud adicional de los datos | 20 si esto lo envía el buscador 4 si lo envía el proveedor |
4 - 5 | Uint16 | Código de versión de cambio de audio | Un valor distinto de cero significa que admite el cambio de audio. El código de la versión actual (con la mejora de seguridad) es 0x0102. 0x0000 o ninguna respuesta en 1 segundo significa que este dispositivo no admite el cambio de audio |
6 a 7 | flags | Marcas de capacidad de cambio de audio del proveedor Si Seeker envía esto, se deben ignorar estos dos bytes. |
varía Consulta Marcas de capacidad de cambio de audio |
8 a 15 | Nonce del mensaje Solo es obligatorio cuando el buscador lo envía |
varía | |
16 a 23 | Código de autenticación de mensajes Solo es necesario cuando Seeker lo envía |
varía |
Tabla 4.3.1.1: Función de notificación del cambio de audio
Marcas de capacidad de cambio de audio
Bit 0 (octeto 6, MSB): Estado del cambio de audio
- 1, si el estado de cambio de audio está activado
- 0, de lo contrario
Bit 1: Configuración de varios puntos
- 1, si el dispositivo admite varios puntos y se puede activar o desactivar
- 0; de lo contrario, (no admite la ejecución de varios puntos o múltiples puntos siempre está activada)
Bit 2: Estado actual de varios puntos
- 1, si la función de varios puntos está activada
- 0, de lo contrario
Bit 3: Detección de cabeza
- 1, si este dispositivo admite la detección de cabeza (incluso si está desactivada en este momento)
- 0, de lo contrario
Bit 4: Estado actual de detección en la cabeza
- 1, si la detección de cabeza está activada
- 0, de lo contrario (no admite la detección de cabeza o está inhabilitada)
Todos los demás bits están reservados, cuyo valor predeterminado es 0.
Establecer estado de varios puntos
En los Seekers de cambio de audio, podemos proporcionar la configuración para que los usuarios activen o desactiven la funcionalidad multipunto. El buscador establecerá el estado de varios puntos del proveedor mediante el siguiente mensaje:
Octeto | Tipo de datos | Descripción | Valor |
---|---|---|---|
0 | Uint8 | Cambio de audio | 0 × 07 |
1 | Uint8 | Establecer estado de varios puntos | 0 × 12 |
Entre 2 y 3 | Uint16 | Longitud adicional de los datos | 17 |
4 | Uint8 | Estado de varios puntos | 0: desactivar varios puntos 1: activar varios puntos |
5 a 12 | Nonce del mensaje | varía | |
13 - 20 | Código de autenticación de mensajes | varía |
Tabla 4.3.1.2: Configuración del estado de varios puntos
Establecer preferencia de cambio
Los solicitantes de cambio de audio pueden modificar la preferencia de cambio de multipunto y establecerla en el proveedor mediante el siguiente mensaje:
Octeto | Tipo de datos | Descripción | Valor |
---|---|---|---|
0 | Uint8 | Cambio de audio | 0 × 07 |
1 | Uint8 | Establecer preferencia de cambio | 0 × 20 |
Entre 2 y 3 | Uint16 | Longitud adicional de los datos | 18 |
4 | flags | Cambio de preferencias | varía Consulta la marca de preferencia de cambio multipunto. |
5 | Configuración de cambio avanzada Este byte está reservado; el valor predeterminado es 0 |
varía | |
6 a 13 | Nonce del mensaje | varía | |
14 a 21 | Código de autenticación de mensajes | varía |
Tabla 4.3.2.0: Cómo establecer preferencias de cambio
Marca de preferencia de cambio de varios puntos
- Bit 0 (MSB): A2DP frente a A2DP (el predeterminado es 0)
- Bit 1: HFP frente a HFP (valor predeterminado 0)
- Bit 2: A2DP frente a HFP (el predeterminado es 0)
- Bit 3: HFP frente a A2DP (predeterminado 1)
- Bit 4-7: reservados
- Arriba representa una "solicitud de perfil nuevo" en comparación con el "perfil activo actual"
- 0 para no cambiar
- 1 para cambiar
Obtener preferencias de cambio
Los buscadores de cambio de audio pueden consultar la preferencia de cambio de multipunto desde el proveedor mediante el siguiente mensaje:
Octeto | Tipo de datos | Descripción | Valor |
---|---|---|---|
0 | Uint8 | Cambio de audio | 0 × 07 |
1 | Uint8 | Obtener configuración de cambio | 0 × 21 |
Entre 2 y 3 | Uint16 | Longitud adicional de los datos | 0 |
Tabla 4.3.2.1: Obtén una preferencia de cambio
Notificar cambio de preferencia
Octeto | Tipo de datos | Descripción | Valor |
---|---|---|---|
0 | Uint8 | Cambio de audio | 0 × 07 |
1 | Uint8 | Notificar cambio de preferencia | 0 × 22 |
Entre 2 y 3 | Uint16 | Longitud adicional de los datos | 2 |
4 | flags | Cómo cambiar las marcas de preferencia | varía Consulta la marca de preferencia de cambio multipunto. |
5 | Configuración de cambio avanzada Este byte está reservado; el valor predeterminado debe ser 0 |
varía |
Tabla 4.3.2.2: Preferencia de cambio de notificaciones
Cambiar la fuente de audio activa (al dispositivo conectado)
Los solicitantes de cambio de audio pueden solicitar al proveedor de varios puntos que cambie la fuente de audio activa entre dispositivos conectados con el siguiente mensaje:
Octeto | Tipo de datos | Descripción | Valor |
---|---|---|---|
0 | Uint8 | Cambio de audio | 0 × 07 |
1 | Uint8 | Cambiar la fuente de audio activa (al dispositivo conectado) | 0 × 30 |
Entre 2 y 3 | Uint16 | Longitud adicional de los datos | 17 |
4 | flags | Cómo cambiar marcas de eventos de fuente de audio activas | varía Consulta cómo cambiar un evento de fuente de audio activo |
5 a 12 | Nonce del mensaje | varía | |
13 - 20 | Código de autenticación de mensajes | varía |
Tabla 4.3.3.0: Cambio de la fuente de audio activa (al dispositivo conectado)
Cambiando evento de fuente de audio activo
- Bit 0 (MSB): 1 interruptor a este dispositivo, 0 cambio a segundo dispositivo conectado
- Bit 1: 1 reanuda la reproducción en el cambio a dispositivo después de realizar el cambio, de lo contrario, 0. Si reanudas la reproducción, el proveedor enviará una notificación de PLAY al Seeker mediante el perfil de AVRCP. Si el estado anterior (antes del cambio) no era PLAY, el proveedor debe ignorar esta marca.
- Bit 2: 1 rechaza el SCO en el dispositivo conectado, de lo contrario, 0
- Bit 3: 1 desconecta el Bluetooth en el dispositivo que esté alejado de la pantalla, 0 de lo contrario.
- Bit 4-7: reservados.
Es posible que los Seekers de cambio de audio no siempre conozcan su estado correctamente, por lo que es posible que el proveedor reciba el mensaje "switch to this device" cuando este ya sea el dispositivo activo. En este caso, para mostrar la IU correcta en Seeker, el proveedor puede enviar un NAK con el motivo del error, 0x4 - Acción redundante del dispositivo.
Volver a cambiar (al dispositivo desconectado)
Si el cambio de conexión no es deseado, los usuarios pueden revertir el cambio y, en ciertas situaciones, tiene sentido restablecer la conexión de audio para minimizar la interrupción. El buscador usará el siguiente mensaje para volver a activar el cambio:
Octeto | Tipo de datos | Descripción | Valor |
---|---|---|---|
0 | Uint8 | Cambio de audio | 0 × 07 |
1 | Uint8 | Volver a cambiar (al dispositivo desconectado) | 0 × 31 |
Entre 2 y 3 | Uint16 | Longitud adicional de los datos | 17 |
4 | Uint8 | Cambiar evento | varía 0x01: regresar 0x02: volver atrás y reanudar la reproducción |
5 a 12 | Nonce del mensaje | varía | |
13 - 20 | Código de autenticación de mensajes | varía |
Tabla 4.3.3.1: Regresar (al dispositivo desconectado)
En el caso de los proveedores de varios puntos, para realizar un cambio de conexión, un proveedor puede finalizar la conexión con un dispositivo de origen de audio y pausar la sesión de audio en la otra. Por ejemplo, supongamos que los auriculares de varios puntos están conectados a una tablet y a un tercer dispositivo con interruptor de audio compatible. El usuario mira video en la tablet cuando recibe una llamada entrante en el teléfono. El teléfono activará un interruptor de conexión en los auriculares, que debe desactivar la conexión del tercer dispositivo para conectarse al teléfono, a la vez que pausará la sesión multimedia en la tablet para obtener el tono del teléfono. Si el usuario rechaza la llamada, el teléfono puede pedirle a los auriculares que vuelvan a cambiar y reanuden la reproducción. Cuando se recibe esta solicitud, los auriculares deben volver a conectarse al tercer dispositivo y reanudar la reproducción del video en pausa en la tablet.
Notificar evento de interruptor de varios puntos
Para informar a los usuarios sobre un evento de cambio de varios puntos que tiene lugar, el buscador de cambio de audio puede mostrarles una notificación. El proveedor debe notificar a los buscadores de cambio de audio conectados sobre el evento de cambio.
Octeto | Tipo de datos | Descripción | Valor |
---|---|---|---|
0 | Uint8 | Cambio de audio | 0 × 07 |
1 | Uint8 | Notificar evento de interruptor de varios puntos El proveedor debe enviarlo en cada interruptor, incluido el buscador de cambio de audio a uno que no sea de audio. De búsqueda a cambio de audio. De principio a fin, |
0 × 32 |
Entre 2 y 3 | Uint16 | Longitud adicional de los datos | varía |
4 | Uint8 | Motivo del cambio | varía 0x00: Sin especificar 0x01: Transmisión A2DP 0x02: HFP |
5 | Uint8 | Dispositivo de destino | varía 0x01: este dispositivo 0x02: otro dispositivo conectado |
6 - n | UTF8 | Nombre del dispositivo de destino si el dispositivo de destino es el Buscador de cambio de audio, se usa el nombre al que envió el buscador; de lo contrario, se usa el nombre de BT, si no corresponde, con los últimos 2 bytes de su dirección. |
varía |
Tabla 4.3.3.2: Notificar un evento de cambio de varios puntos
Obtener estado de conexión
El buscador puede obtener el estado de conexión actual del proveedor de la siguiente manera:
Octeto | Tipo de datos | Descripción | Valor |
---|---|---|---|
0 | Uint8 | Cambio de audio | 0 × 07 |
1 | Uint8 | Obtener estado de conexión | 0 × 33 |
Entre 2 y 3 | Uint16 | Longitud adicional de los datos | 0 |
Tabla 4.3.3.3: Cómo obtener el estado de conexión
Al recibir este mensaje, el proveedor debe responder con el código de mensaje 0x34 y notificar el estado de la conexión.
Notificar el estado de la conexión
Según se define en la carga útil de publicidad de BLE, para proveedores multipunto, si el estado de conexión cambia, a excepción del cambio de paquete de publicidad, el proveedor también debe notificar sobre el cambio a los solicitantes conectados que usan la misma clave de cuenta. Si el proveedor está conectado con uno de estos
Octeto | Tipo de datos | Descripción | Valor |
---|---|---|---|
0 | Uint8 | Cambio de audio | 0 × 07 |
1 | Uint8 | Notificar el estado de la conexión | 0 × 34 |
Entre 2 y 3 | Uint16 | Longitud adicional de los datos | varía |
4 | Uint8 | Marca de dispositivo activo | varía 0x00: este Seeker es pasivo y el dispositivo activo está usando la misma clave de la cuenta 0x01: este Seeker es el dispositivo activo 0x02: este Seeker es pasivo, y el dispositivo activo no es un Audio Switch Seeker. |
5 - n | Estado de la conexión encriptada | varía | |
n+1 - n+8 | Nonce del mensaje | varía |
Tabla 4.3.3.4: Cómo notificar el estado de la conexión
Mensaje de estado de conexión encriptado
encrypted_connection_status = connection_status_raw_data ^ AES(Key, IV)
Donde:
La clave se deriva de la clave de la cuenta en uso. Consulta Anuncio aleatorio que se puede resolver.
Key = HKDF(account_key, NULL, UTF8("SASS-RRD-KEY"),16)
IV es concat(Session_nonce, Message_nonce)
connection_status_raw_data = concat(connection_state, custom_data, connected_devices), que se define en la carga útil de publicidad de BLE. Ten en cuenta que no se debe incluir el byte de la longitud y el tipo de campo, ya que aquí tenemos el código del mensaje y la longitud de los datos.
Notificar la conexión iniciada por el cambio de audio
Es posible que los proveedores de cambio de audio necesiten saber si el cambio de conexión se activa mediante el cambio de audio para tener diferentes reacciones, p.ej., inhabilitar los íconos sonoros para los eventos de cambio de audio. El buscador envía un mensaje para notificar al proveedor que esta conexión fue iniciada por un cambio de audio.
Octeto | Tipo de datos | Descripción | Valor |
---|---|---|---|
0 | Uint8 | Cambio de audio | 0 × 07 |
1 | Uint8 | Notificar la conexión iniciada por el cambio de audio | 0 × 40 |
Entre 2 y 3 | Uint16 | Longitud adicional de los datos | 17 |
4 | Uint8 | Indicación de conexión iniciada por el cambio de audio | varía 0: Esta conexión no se activó debido al cambio de audio. 1: Esta conexión se inició con el cambio de audio. |
5 a 12 | Nonce del mensaje | varía | |
13 - 20 | Código de autenticación de mensajes | varía |
Tabla 4.3.4.0: Notificar una conexión iniciada por el cambio de audio
Indicar la clave de cuenta de uso
Si varias claves de cuenta del buscador (p.ej., varios usuarios) están asociadas con el proveedor, este usará el siguiente mensaje para indicar qué clave de cuenta está en uso.
Octeto | Tipo de datos | Descripción | Valor |
---|---|---|---|
0 | Uint8 | Cambio de audio | 0 × 07 |
1 | Uint8 | Indicar la clave de cuenta de uso | 0 × 41 |
Entre 2 y 3 | Uint16 | Longitud adicional de los datos | 22 |
4 a 9 | UTF8 | String en uso | UTF8 ("en uso") |
10 - 17 | Nonce del mensaje | varía | |
18 a 25 | Código de autenticación de mensajes | varía |
Tabla 4.3.4.1: Cómo indicar la clave de cuenta en uso
Cuando recibe este mensaje, el proveedor puede saber qué clave de cuenta está en uso si verifica el código de autenticación de mensajes.
Enviar datos personalizados
El interruptor de audio activo Seeker puede encapsular la información (p.ej., el uso de audio) de la transmisión de audio en un byte de datos personalizado y enviarla al proveedor mediante el siguiente mensaje:
Octeto | Tipo de datos | Descripción | Valor |
---|---|---|---|
0 | Uint8 | Cambio de audio | 0 × 07 |
1 | Uint8 | Enviar datos personalizados | 0 × 42 |
Entre 2 y 3 | Uint16 | Longitud adicional de los datos | 17 |
4 | Uint8 | Datos personalizados | varía |
5 a 12 | Nonce del mensaje | varía | |
13 - 20 | Código de autenticación de mensajes | varía |
Tabla 4.3.4.2: Enviar datos personalizados
Una vez que reciba los datos personalizados, el Proveedor actualizará el paquete de publicidad para incluirlos. En el caso de un proveedor de varios puntos, también debe notificar el cambio de estado de conexión a otro Seeker conectado con la misma clave de cuenta.
Establecer destino de conexión de soltar
En auriculares de varios puntos, si la conexión preferida que se debe desconectar no es la menos usada recientemente, los Seekers del cambio de audio pueden indicarle al proveedor qué dispositivo desconectar mediante el siguiente mensaje:
Octeto | Tipo de datos | Descripción | Valor |
---|---|---|---|
0 | Uint8 | Cambio de audio | 0 × 07 |
1 | Uint8 | Establecer destino de conexión de soltar | 0 × 43 |
Entre 2 y 3 | Uint16 | Longitud adicional de los datos | 17 |
4 | Uint8 | Destino del dispositivo conectado que se soltará | varía 1: este dispositivo |
5 a 12 | Nonce del mensaje | varía | |
13 - 20 | Código de autenticación de mensajes | varía |
Tabla 4.3.4.3: Establece el objetivo de conexión de soltar
Implementación de referencias
Consulta la Biblioteca del SDK incorporado de Nearby para ver la implementación de referencia.