Seleção de áudio
À medida que os usuários utilizam cada vez mais dispositivos de fontes de áudio para realizar tarefas diárias, há uma demanda crescente por uma solução mais simples para gerenciar o uso de fones de ouvido em vários dispositivos. A alternância de áudio transita perfeitamente para as conexões de fones de ouvido entre dispositivos com base na atividade do usuário (por exemplo, iniciar um filme) e em eventos priorizados (por exemplo, uma chamada recebida).
Princípios da UX
- A troca de conexão deve ser rápida e baseada na ação do usuário.
- A troca de conexão precisa ser transparente para os usuários, permitindo que eles controlem/revertam se a alternância não for desejável.
- A mudança precisa respeitar a privacidade do usuário.
Papéis
Buscador de interruptores de áudio: o buscador é um dispositivo de fonte de áudio (por exemplo, um smartphone ou tablet) que procura um fone de ouvido por perto para se conectar, quando aplicável.
Provedor de seleção de áudio: o provedor normalmente é um fone de ouvido que anuncia a presença e o status da conexão para que os usuários tomem decisões de alternância.
Visão geral dos requisitos
Para alcançar a alternância inteligente, os Provedores precisam atender aos seguintes requisitos:
Nome | Descrição | Requisitos | Obrigatório? |
---|---|---|---|
Verificação de página | Para aceitar uma nova solicitação de conexão de outro buscador quando houver uma conexão. Para provedores de ponto único:
|
Para melhorar o desempenho, é necessário ter um modo de leitura de página de baixa latência (o intervalo de verificação não pode ser maior que 640 ms). Para fazer um equilíbrio entre a duração da bateria e o desempenho da troca, o provedor pode ter um modo de verificação de página padrão na maioria dos casos (modo de baixo consumo de energia, o intervalo de busca não pode ser maior que 1.280 ms). No entanto, o modo de baixa latência precisa ser usado nas seguintes situações:
|
Obrigatório |
Histórico de conexões | Para voltar à conexão anterior e retomar a reprodução, se aplicável. O retorno vai ser acionado pela comunicação via APIs Message Stream. O evento de pausa de áudio precisa ser incluído na gravação para retomar a reprodução, se aplicável. |
Manter o histórico de conexões e implementar APIs de fluxo de mensagens. | Obrigatório |
Status da conexão | Os usuários podem decidir se querem mudar de conexão.O status da conexão inclui:
|
Incluir o status da conexão na publicidade de BLE e no fluxo de mensagens. | Obrigatório |
Mudança dos recursos do ambiente de execução | A seleção de áudio pode ser ativada com o upgrade do firmware no provedor. Portanto, os recursos precisam ser sincronizados entre o buscador e o provedor no momento da execução. | Implemente as APIs Message Stream para acessar os recursos do ambiente de execução. | Obrigatório |
Regras de alternância configuráveis | Permita que o Seeker defina a prioridade entre o streaming de áudio ativo atual e as novas solicitações por meio das configurações de preferência do usuário. Por exemplo, o Buscador da seleção de áudio pode fornecer configurações de IU para permitir que os usuários ativem/desativem a alternância automática entre streaming de mídia e chamadas.O buscador de seleção de áudio do vai definir e receber a regra de troca pelo streaming de mensagens. |
Somente provedores multiponto. Implemente as APIs de fluxo de mensagens para configurar regras de alternância entre dispositivos conectados. |
Opcional |
Troca de dispositivo ativa | Permita que o Buscador de áudio simule a alternância de áudio entre dispositivos conectados. No lado do Buscador de áudio, pode haver uma IU para que os usuários alternem facilmente entre os dispositivos conectados. |
Somente provedores multiponto. Implemente as APIs de stream de mensagens do buscador de alternância de áudio para determinar a fonte de áudio ativa entre os dispositivos conectados. |
Obrigatório |
Notificação de alternância de vários pontos | Permita que o buscador do seletor de áudio mostre a notificação de alternância. | Somente provedores multiponto. Implemente as APIs de streaming de mensagens para notificar os usuários da troca de áudio conectados quando ocorrer uma alternância de vários pontos. |
Obrigatório |
Payload de publicidade
O Provedor precisa incluir o status de conexão atual no anúncio, baseado nos dados da Conta de Pareamento rápido descritos em Publicidade: quando não detectável.
Observe que a versão da tabela 4.2 é 0x1.
Campo de status da conexão
Octeto | Tipo de dados | Descrição | Valor | Obrigatório? |
---|---|---|---|---|
0 | uint8 |
Comprimento e tipo de campo 0bLLLLTTTT
|
0bLLLL0101
|
Obrigatório |
1 | uint8 |
Estado da conexão 0bHAFRSSSS
|
0bHAFRSSSS
|
Obrigatório |
2 | uint8 |
Dados personalizados No momento, ele só contém o tipo de conteúdo que é usado para descrever o uso do streaming de áudio atual. O buscador o enviará ao provedor. |
O valor é enviado do buscador do streaming ativo atual ao provedor por meio de fluxo de mensagens. É 0 se o streaming ativo atual não for do buscador. | Obrigatório |
3: var | Bitmap de dispositivos conectados Um bitmap para mostrar quais dispositivos estão conectados ao provedor no momento. Todos os dispositivos vinculados são organizados em ordem, um bit para um dispositivo vinculado. O comprimento depende de quantos dispositivos vinculados do provedor existem. |
O bit mapeado definido como 1 se o dispositivo estiver conectado ao provedor no momento. Caso contrário, será 0. Consulte Bitmap de dispositivo conectado para mais detalhes |
Opcional |
Tabela 4.1:dados brutos do campo de status da conexão
Sinalizações de conexão
0bH = detecção na cabeça
- 1, na cabeça agora
- 0, caso contrário, não está na cabeça ou não há sensor OHD
0bA = disponibilidade de conexão
- 1, há uma conexão disponível
- 0, caso contrário
0bF = modo de foco
- 1, no modo focado agora, a alternância de conexão não é permitida para uso de mídia, ou seja, não é permitido alternar A2DP para A2DP
- 0, caso contrário
0bR = reconectado automaticamente
- 1, se a conexão atual for reconectada automaticamente pelo provedor, o que significa que não está conectada pelos usuários (para vários pontos, se uma das conexões existentes for reconectada automaticamente, defina como 1)
- 0, caso contrário
Estado de conexão
- 0 x 0: sem conexão
- 0x1: paginação
- 0x2: conectado, mas sem transferência de dados
- 0x3: transferência de dados que não é de áudio (apenas quando alternável, se não for, usando 0xF)
- 0 x 4: streaming A2DP, AVRCP não aplicável
- 0x5: streaming A2DP e AVRCP em reprodução
- 0 x 6: streaming HFP (chamadas de telefone/voip), incluindo toques internos e sem banda
- 0x7: áudio de baixa energia - streaming de mídia sem controle
- 0x8: áudio de baixa energia - streaming de mídia com controle
- 0 x 9: áudio de baixa energia - streaming de chamadas
- 0xA: áudio de baixa energia - transmissão
- 0xF: desativar a chave da conexão temporariamente (por exemplo, atualização de firmware)
Bitmap de dispositivo conectado
Para evitar alternância de conexão indesejada, o usuário pode precisar saber a quais dispositivos o fone de ouvido está conectado no momento. Por exemplo, quando o fone de ouvido estiver conectado ao smartphone, o usuário não quer ser interrompido pela alternância de conexão quando um membro da família iniciar o YouTube no tablet.
Esse bitmap é anônimo. O buscador não consegue saber quais outros dispositivos estão vinculados ao provedor. Por exemplo, vamos considerar cinco dispositivos vinculados:
- 0: laptop (0bx0000000)
- 1: telefoneA (0b0x000000)
- 2: telefoneB (0b00x00000)
- 3: tablet (0b000x0000)
- 4: TV (0b0000x000)
Se os dispositivos conectados atuais forem um laptop e um tablet, o valor do bitmap será 0b10010000. A mudança no pedido será aceitável se for inevitável, por exemplo, quando os usuários redefinirem o fone de ouvido para a configuração original ou quando a contagem de dispositivos vinculados atingir o limite máximo.
Anúncio solucionável aleatório
Para evitar o rastreamento e respeitar a privacidade do usuário, o provedor precisa alternar e criptografar o campo pela chave de conta usando o AES-CTR:
encrypted_connection_status_field = connection_status_raw_data ^ AES(Key, IV)
onde
A chave é derivada da chave da conta em uso, definida na próxima seção.
A chave é gerada pela função HKDF, IETF RFC 5869, usando a função de hash SHA-256.
Key = HKDF(account_key, NULL, UTF8("SASS-RRD-KEY"),16)
O provedor usará a chave de conta original aqui, ou seja, o primeiro byte da chave é 0x04, não incluído no padrão de uso.
IV (vetor inicial) é o sal de 2 bytes dos dados da chave da conta sem padding, ou seja, IV é concat(sal, ZERO de 14 bytes).
Os dados brutos do status da conexão são definidos na tabela 4.1. Se o status da conexão mudar, o sal e o RPA precisarão ser gerados novamente no mesmo período de publicidade.
Isso faz com que o campo de status da conexão criptografada seja alternado ao mesmo tempo que os dados da chave da conta.
O anúncio BLE será estruturado da seguinte maneira:
Octeto | Tipo de dados | Descrição | Valor | Obrigatório? |
---|---|---|---|---|
0 | uint8 |
Versão e sinalizações | 0x10 | Obrigatório |
1: t | Dados da chave da conta | varia | Obrigatório | |
t+1: s | Dados da bateria | varia | Opcional | |
s+1: var | Dados aleatórios solucionáveis | varia | Obrigatório se a lista de chaves da conta não estiver vazia. Caso contrário,será excluída. |
Tabela 4.2:divulgação de BLE com dados solucionáveis aleatórios
Dados solucionáveis aleatórios contêm:
Octeto | Tipo de dados | Descrição | Valor | Obrigatório? |
---|---|---|---|---|
0 | uint8 |
Comprimento e tipo de campo 0bLLLLTTTT
|
0bLLLL0110
|
Obrigatório |
1: var | Dados criptografados | varia | Obrigatório |
Tabela 4.2.1:dados aleatórios solucionáveis
Por exemplo, se os dados aleatórios solucionáveis contiverem um campo de status de conexão criptografado, o resultado descriptografado será o campo de status da conexão.
Para evitar adulterações, os dados importantes da conta acima precisam ser ligeiramente modificados quando os dados aleatórios para solução de problemas estiverem incluídos na publicidade. Normalmente, ao criar o filtro de chave de conta, um valor V é produzido combinando o filtro de chave de conta com um sal. Em vez disso, quando o Random Resolvable Data também estiver sendo anunciado, o valor V precisará ser criado como:
V = concat(account_key, salt, random_resolvable_data)
Se os dados da bateria e os dados de resolução aleatória estão sendo anunciados, o V precisa ser criado como:
V = concat(account_key, salt, battery_data, random_resolvable_data)
Chave da conta em uso
A troca de conexão é baseada em conta. Portanto, o provedor precisa incluir as informações da conta da conexão atual na divulgação BLE. Se o dispositivo conectado atual for um buscador de switch de áudio, o provedor pode acessar a chave de conta associada a esse buscador e usá-la para criptografar o campo de status da conexão. Se a fonte de áudio conectada não for a busca de interruptores de áudio, o provedor vai precisar usar a chave de conta usada mais recentemente.
Antes de calcular o filtro de chave da conta, o provedor precisa modificar o primeiro byte das chaves de conta para incluir um dos seguintes padrões em uso:
- 0b00000100
Esta chave de conta não está em uso.
Esse é o padrão (consulte Chave da conta). - 0b00000101
Essa chave de conta é a usada mais recentemente.
O campo de status da conexão é criptografado por esta chave de conta. Não há informações importantes sobre o estado da conexão atual. Isso pode significar que não há dispositivos conectados ou que o dispositivo conectado não é um buscador de switch de áudio. - 0b00000110
Essa chave de conta é a chave da conta em uso.
O campo de status da conexão é criptografado por essa chave de conta, e o dispositivo conectado atual está associado a ela.
Esquema para o payload de switch de áudio
A figura abaixo mostra o esquema do payload de seleção de áudio.
Mensagens
Quando conectados, o buscador e o provedor podem usar o stream de mensagens para sincronizar o recurso de switch de áudio, acionar uma troca de conexão, definir e receber a preferência de chave, notificar o status da conexão e assim por diante. Como mostrado abaixo, criamos um grupo de mensagens e códigos de mensagem específicos para a seleção de áudio.
Nome do grupo de mensagens | Valor |
---|---|
Seleção de áudio | 0x07 |
Confira mais detalhes de cada código de mensagem nas seções a seguir.
Nome do código da mensagem | Valor | Somente multiponto | Remetente | Responsável pelo atendimento | Encrypt | MAC | CONF |
---|---|---|---|---|---|---|---|
Ative a opção "Seleção de áudio" | 0x10 | N | Ambos | Ambos, pelo código 0x11 | N | N | N |
Capacidade de notificar sobre a seleção de áudio | 0x11 | N | Ambos | Ambos | N | S | S |
Definir estado multiponto | 0x12 | S | Buscador | Provedor | N | S | S |
Definir preferências de troca | 0x20 | S | Buscador | Provedor | N | S | S |
Definir preferências de migração | 0x21 | S | Buscador | Provedor, pelo código 0x22 | N | N | N |
Notificar preferência de mudança | 0x22 | S | Provedor | Buscador | N | N | N |
Alternar a fonte de áudio ativa(para o dispositivo conectado) | 0x30 | S | Buscador | Provedor | N | S | S |
Voltar (para o dispositivo desconectado) | 0x31 | N | Buscador | Provedor | N | S | S |
Notificar evento de alternância de vários pontos | 0x32 | S | Provedor | Buscador | N | N | N |
Ver o status da conexão | 0x33 | S | Buscador | Provedor, pelo código 0x34 | N | N | N |
Notificar o status da conexão | 0x34 | S | Provedor | Buscador | S | N | N |
Notificar a conexão iniciada com interruptor de áudio | 0x40 | N | Buscador | Provedor | N | S | S |
Indicar a chave da conta em uso | 0x41 | N | Buscador | Provedor | N | S | S |
Enviar dados personalizados | 0x42 | N | Buscador | Provedor | N | S | S |
Definir destino da conexão de queda | 0x43 | S | Buscador | Provedor | N | S | S |
Tabela 4.3:mensagens de seleção de áudio
MAC das mensagens do switch de áudio
Para fornecer a autenticação de mensagens, todas as mensagens de switch de áudio com dados adicionais enviados do buscador ao provedor exigem um código de autenticação de mensagem. Quando uma mensagem com MAC é recebida, ela precisa ser confirmada para que o buscador saiba se o provedor reagiu ou não à mensagem.
Se a autenticação da mensagem for bem-sucedida, o provedor enviará a ACK para a mensagem:
Octeto | Tipo de dados | Descrição | Valor |
---|---|---|---|
0 | Uint8 | Confirmação | 0xFF |
1 | Uint8 | CONF | 0x01 |
2 a 3 | uint16 | Comprimento de dados adicional | varia |
4 | Uint8 | Seleção de áudio | 0x07 |
5 | Uint8 | Código da mensagem para troca de áudio | varia |
6 - s | Dados adicionais | varia |
Se falhar, o provedor enviará o NAK da mensagem:
Octeto | Tipo de dados | Descrição | Valor |
---|---|---|---|
0 | Uint8 | Confirmação | 0xFF |
1 | Uint8 | N/A | 0x02 |
2 a 3 | uint16 | Comprimento de dados adicional | 0x0003 |
4 | Uint8 | Motivo do erro | varia |
5 | Uint8 | Seleção de áudio | 0x07 |
6 | Uint8 | Código da mensagem para troca de áudio | varia |
Observe que, se o provedor for o remetente, o MAC não é necessário.
Usar o recurso de seleção de áudio
O provedor da seleção de áudio e o buscador podem conferir se o busca/provedor de pareamento rápido conectado ou não é compatível com a seleção de áudio usando a mensagem abaixo:
Octeto | Tipo de dados | Descrição | Valor |
---|---|---|---|
0 | Uint8 | Seleção de áudio | 0x07 |
1 | Uint8 | Usar o recurso de seleção de áudio | 0x10 |
2 a 3 | uint16 | Comprimento de dados adicional | 0 |
Tabela 4.3.1.0:acessar a capacidade da seleção de áudio
Notificar a capacidade da chave "Áudio"
Ao receber o código de mensagem da mensagem Receber capacidade da alternância de áudio, o buscador/provedor da opção de áudio vai responder com uma das seguintes flags:
Octeto | Tipo de dados | Descrição | Valor |
---|---|---|---|
0 | Uint8 | Seleção de áudio | 0x07 |
1 | Uint8 | Notificar a capacidade da chave "Áudio" | 0x11 |
2 a 3 | uint16 | Comprimento de dados adicional | 20 se for enviado pelo buscador 4 se for enviado pelo provedor |
4 a 5 | uint16 | Código da versão da seleção de áudio | Um valor diferente de zero significa que ele é compatível com a seleção de áudio. O código da versão atual (com aprimoramento de segurança) é 0x0102. 0 x 0.000 ou nenhuma resposta em 1 segundo significa que a seleção de áudio não é compatível com este dispositivo |
6 a 7 | flags | Sinalizações do recurso de alternância de áudio do provedor Se for enviado pelo buscador, esses dois bytes deverão ser ignorados. |
varia Consulte Sinalizações do recurso de seleção de áudio. |
8 a 15 | Valor de uso único da mensagem Obrigatório apenas quando enviado pelo buscador |
varia | |
16 a 23 | Código de autenticação da mensagem Obrigatório apenas quando esta mensagem é enviada pelo buscador |
varia |
Tabela 4.3.1.1:capacidade de notificar sobre a chave de áudio
Sinalizações do recurso de seleção de áudio
Bit 0 (octeto 6, MSB): estado da seleção de áudio
- 1, se o estado da seleção de áudio estiver ativado
- 0, caso contrário
Bit 1: capacidade de configuração multiponto
- 1, se o dispositivo for compatível com vários pontos e puder ser alternado entre ativado e desativado
- 0, caso contrário (não é compatível com multiponto ou multiponto fica sempre ativado)
Bit 2: estado atual multiponto
- 1, se o multiponto estiver ativado
- 0, caso contrário
Bit 3: detecção na cabeça
- 1, se este dispositivo oferecer suporte à detecção na cabeça (mesmo que ela esteja desativada agora)
- 0, caso contrário
Bit 4: estado atual da detecção na cabeça
- 1, se a detecção na cabeça estiver ativada
- 0, caso contrário (não é compatível com a detecção na cabeça ou se a detecção na cabeça está desativada)
Todos os outros bits são reservados, e o padrão é 0.
Definir estado multiponto
Em quem procura a seleção de áudio, podemos oferecer aos usuários a opção de ativar/desativar a funcionalidade multiponto. O buscador definirá o estado multiponto para o provedor usando a mensagem abaixo:
Octeto | Tipo de dados | Descrição | Valor |
---|---|---|---|
0 | Uint8 | Seleção de áudio | 0x07 |
1 | Uint8 | Definir estado multiponto | 0x12 |
2 a 3 | uint16 | Comprimento de dados adicional | 17 |
4 | Uint8 | Estado multiponto | 0: desativar multiponto 1: ativar multiponto |
5 a 12 | Valor de uso único da mensagem | varia | |
13 a 20 | Código de autenticação de mensagem | varia |
Tabela 4.3.1.2:definir o estado multiponto
Definir preferência de troca
Os buscadores de switch de áudio podem modificar a preferência de alternância de multiponto e defini-la para o provedor usando a mensagem abaixo:
Octeto | Tipo de dados | Descrição | Valor |
---|---|---|---|
0 | Uint8 | Seleção de áudio | 0x07 |
1 | Uint8 | Definir preferência de mudança | 0x20 |
2 a 3 | uint16 | Comprimento de dados adicional | 18 |
4 | flags | Preferência de alternância | varia Consulte sinalização de preferência de alternância de multiponto |
5 | Configurações avançadas de alternância Este byte está reservado. O valor padrão é 0 |
varia | |
6 a 13 | Valor de uso único da mensagem | varia | |
14 a 21 | Código de autenticação de mensagem | varia |
Tabela 4.3.2.0:definir as preferências de mudança
Sinalização de preferência de alternância de vários pontos
- Bit 0 (MSB): A2DP x A2DP (padrão 0)
- Bit 1: HFP x HFP (padrão 0)
- Bit 2: A2DP x HFP (padrão 0)
- Bit 3: HFP x A2DP (padrão 1)
- Bit 4 - 7: reservado
- Acima representa "nova solicitação de perfil" x "perfil ativo atual"
- 0 para não alternar
- 1 para switch
Acessar preferências de mudança
Os buscadores de alternância de áudio podem consultar a preferência de alternância do multiponto do provedor usando a mensagem abaixo:
Octeto | Tipo de dados | Descrição | Valor |
---|---|---|---|
0 | Uint8 | Seleção de áudio | 0x07 |
1 | Uint8 | Acessar a configuração da mudança | 0x21 |
2 a 3 | uint16 | Comprimento de dados adicional | 0 |
Tabela 4.3.2.1:conferir as preferências de mudança
Notificar a preferência de mudança
Octeto | Tipo de dados | Descrição | Valor |
---|---|---|---|
0 | Uint8 | Seleção de áudio | 0x07 |
1 | Uint8 | Notificar a preferência de mudança | 0x22 |
2 a 3 | uint16 | Comprimento de dados adicional | 2 |
4 | flags | Como alternar sinalizações de preferência | varia Consulte sinalização de preferência de alternância de multiponto |
5 | Configurações avançadas de alternância Este byte está reservado. O valor padrão precisa ser 0 |
varia |
Tabela 4.3.2.2:notificar a preferência de mudança
Alternar fonte de áudio ativa (para o dispositivo conectado)
Os interessados em switch de áudio podem solicitar que o provedor de vários pontos alterne a fonte de áudio ativa entre dispositivos conectados usando a mensagem abaixo:
Octeto | Tipo de dados | Descrição | Valor |
---|---|---|---|
0 | Uint8 | Seleção de áudio | 0x07 |
1 | Uint8 | Alternar fonte de áudio ativa (para o dispositivo conectado) | 0x30 |
2 a 3 | uint16 | Comprimento de dados adicional | 17 |
4 | flags | Como alternar sinalizações de evento de fonte de áudio ativas | varia Consulte como alternar o evento da fonte de áudio ativa |
5 a 12 | Valor de uso único da mensagem | varia | |
13 a 20 | Código de autenticação de mensagem | varia |
Tabela 4.3.3.0:alternar a fonte de áudio ativa (para o dispositivo conectado)
Alternando evento da fonte de áudio ativa
- Bit 0 (MSB): 1 interruptor para este dispositivo, 0 interruptor para o segundo dispositivo conectado
- Bit 1: 1 retomar a reprodução na chave para o dispositivo após a troca, caso contrário, 0. Retomar a reprodução significa que o provedor envia uma notificação PLAY para o usuário que está procurando o perfil AVRCP. Se o estado anterior (antes da mudança) não era PLAY, o provedor precisa ignorar essa sinalização.
- Bit 2: 1 rejeita SCO no dispositivo desligado. Caso contrário, 0
- Bit 3: 1 desconecta o Bluetooth no dispositivo com interruptor, caso contrário, 0.
- Bit 4 - 7: reservado.
Os usuários que buscam a seleção de áudio nem sempre sabem o estado corretamente. Por isso, é possível que o provedor receba uma mensagem "mudar para este dispositivo" quando o buscador já é o dispositivo ativo. Nesse caso, para mostrar a IU correta no Seeker, o provedor pode enviar um NAK com o motivo do erro, 0x4: ação redundante do dispositivo.
Voltar (para o dispositivo desconectado)
Se a alternância de conexão for indesejada, os usuários poderão revertê-la e, em determinados cenários, faz sentido restaurar a conexão de áudio para minimizar a interrupção. O buscador usará a mensagem abaixo para acionar a alternância:
Octeto | Tipo de dados | Descrição | Valor |
---|---|---|---|
0 | Uint8 | Seleção de áudio | 0x07 |
1 | Uint8 | Voltar (para o dispositivo desconectado) | 0x31 |
2 a 3 | uint16 | Comprimento de dados adicional | 17 |
4 | Uint8 | Voltar evento | varia 0x01: voltar 0x02: voltar e retomar a reprodução |
5 a 12 | Valor de uso único da mensagem | varia | |
13 a 20 | Código de autenticação de mensagem | varia |
Tabela 4.3.3.1:voltar (para o dispositivo desconectado)
Para provedores de vários pontos, para mudar a conexão, um provedor pode descartar a conexão com um dispositivo de origem de áudio e pausar a sessão na outra fonte de áudio. Por exemplo, suponha que o fone de ouvido multiponto esteja conectado a um tablet e um terceiro dispositivo de switch de áudio compatível. O usuário está assistindo a um vídeo no tablet quando recebe uma chamada no celular. O smartphone vai acionar um interruptor de conexão no fone de ouvido, que precisa interromper a conexão do terceiro dispositivo para se conectar a ele. Ao mesmo tempo, pausa a sessão de mídia no tablet para receber o toque do smartphone. Se o usuário recusar a chamada, o smartphone poderá pedir ao fone de ouvido para "voltar e retomar a reprodução". Ao receber essa solicitação, o fone de ouvido precisa se reconectar ao terceiro dispositivo e retomar a reprodução do vídeo pausado no tablet.
Notificar evento de alternância de vários pontos
Para informar os usuários sobre um evento de alternância de vários pontos, o Buscador de seleção de áudio pode mostrar uma notificação aos usuários. O provedor precisa notificar os verificadores de switch de áudio conectados sobre o evento de alternância.
Octeto | Tipo de dados | Descrição | Valor |
---|---|---|---|
0 | Uint8 | Seleção de áudio | 0x07 |
1 | Uint8 | Notificar o evento de alternância de vários pontos O provedor precisa enviá-lo em cada switch, incluindo o Buscador de interruptor de áudio para Buscador sem seleção de áudio, Buscador de interruptor não áudio para Buscador de interruptor de áudio e Buscador de interruptor de áudio para Buscador de interruptor de áudio |
0x32 |
2 a 3 | uint16 | Comprimento de dados adicional | varia |
4 | Uint8 | Motivo da troca | varia 0 x 00: não especificado 0 x 01: streaming de A2DP 0 x 02: HFP |
5 | Uint8 | Dispositivo de destino | varia 0x01: este dispositivo 0x02: outro dispositivo conectado |
6 - n | utf8 | Nome do dispositivo de destino se o dispositivo de destino for "Buscador de switch de áudio", usando o nome ao qual o pesquisador enviou. Caso contrário, use o nome do BT, se não for o caso, usando os últimos 2 bytes do endereço |
varia |
Tabela 4.3.3.2:notificar evento multipoint-switch
Ver status da conexão
O buscador pode obter o status da conexão atual do provedor:
Octeto | Tipo de dados | Descrição | Valor |
---|---|---|---|
0 | Uint8 | Seleção de áudio | 0x07 |
1 | Uint8 | Ver status da conexão | 0x33 |
2 a 3 | uint16 | Comprimento de dados adicional | 0 |
Tabela 4.3.3.3:conferir o status da conexão
Ao receber essa mensagem, o provedor precisa responder com o código de mensagem 0x34 e notificar o status da conexão.
Notificar o status da conexão
Conforme definido no payload de publicidade do BLE para provedores multiponto, se o status da conexão mudar, exceto para alterar o pacote de publicidade, o provedor também precisará notificar sobre a mudança os Buscadores conectados que estão usando a mesma chave de conta. Se o provedor estiver conectado a um Buscador de interruptores de áudio e um Buscador de interruptor sem áudio, se o Buscador de interruptores sem áudio estiver ativo, o provedor também precisará notificar o Buscador do interruptor de áudio conectado sobre o status da conexão (usando a chave da conta do buscador).
Octeto | Tipo de dados | Descrição | Valor |
---|---|---|---|
0 | Uint8 | Seleção de áudio | 0x07 |
1 | Uint8 | Notificar o status da conexão | 0x34 |
2 a 3 | uint16 | Comprimento de dados adicional | varia |
4 | Uint8 | Sinalização de dispositivo ativo | varia 0 x 00: este Buscador é passivo, e o dispositivo ativo está usando a mesma chave de conta 0 x 01. Esse Buscador é o dispositivo ativo 0 x 02: este Buscador é passivo, e o dispositivo ativo é Buscador de interruptor sem áudio. |
5 - n | Status da conexão criptografada | varia | |
n+1 – n+8 | Valor de uso único da mensagem | varia |
Tabela 4.3.3.4:notificar o status da conexão
Mensagem de status de conexão criptografada
encrypted_connection_status = connection_status_raw_data ^ AES(Key, IV)
onde:
A chave é derivada da chave de conta em uso, consulte Divulgação de problemas aleatórios.
Key = HKDF(account_key, NULL, UTF8("SASS-RRD-KEY"),16)
IV é concat(Session_nonce, Message_nonce)
connection_status_raw_data = concat(connection_state, custom_data, connected_devices) que é definido no payload de publicidade de BLE Não inclua o byte do comprimento e do tipo do campo porque temos o código da mensagem e o comprimento dos dados aqui.
Notificar a conexão iniciada com interruptor de áudio
Os provedores de seleção de áudio podem precisar saber se a alternância de conexão é acionada pela seleção de áudio para ter reações diferentes, por exemplo, desativar ícones auditivos para eventos de alternância de áudio. O buscador envia uma mensagem para notificar o provedor de que essa conexão foi iniciada pela alternância de áudio.
Octeto | Tipo de dados | Descrição | Valor |
---|---|---|---|
0 | Uint8 | Seleção de áudio | 0x07 |
1 | Uint8 | Notificar a conexão iniciada com interruptor de áudio | 0x40 |
2 a 3 | uint16 | Comprimento de dados adicional | 17 |
4 | Uint8 | Indicação de conexão iniciada pela seleção de áudio | varia 0: esta conexão não foi acionada pela seleção de áudio 1: essa conexão foi iniciada com a troca de áudio |
5 a 12 | Valor de uso único da mensagem | varia | |
13 a 20 | Código de autenticação de mensagem | varia |
Tabela 4.3.4.0:notificar a conexão iniciada da chave de áudio
Indicar chave da conta em uso
Se várias chaves de conta no buscador (por exemplo, múltiplos usuários) estiverem associadas ao provedor, ele usará a mensagem abaixo para indicar qual chave de conta está em uso.
Octeto | Tipo de dados | Descrição | Valor |
---|---|---|---|
0 | Uint8 | Seleção de áudio | 0x07 |
1 | Uint8 | Indicar chave da conta em uso | 0x41 |
2 a 3 | uint16 | Comprimento de dados adicional | 22 |
4 a 9 | utf8 | String em uso | UTF8 ("em uso") |
10 a 17 | Valor de uso único da mensagem | varia | |
18 a 25 | Código de autenticação de mensagem | varia |
Tabela 4.3.4.1:indicar a chave da conta em uso
Ao receber essa mensagem, o provedor pode saber qual chave de conta está em uso, verificando o código de autenticação da mensagem.
Enviar dados personalizados
O buscador de switch de áudio ativo pode encapsular as informações (por exemplo, uso de áudio) do stream de áudio no byte de dados personalizado e enviá-las ao provedor usando a mensagem abaixo:
Octeto | Tipo de dados | Descrição | Valor |
---|---|---|---|
0 | Uint8 | Seleção de áudio | 0x07 |
1 | Uint8 | Enviar dados personalizados | 0x42 |
2 a 3 | uint16 | Comprimento de dados adicional | 17 |
4 | Uint8 | Dados personalizados | varia |
5 a 12 | Valor de uso único da mensagem | varia | |
13 a 20 | Código de autenticação de mensagem | varia |
Tabela 4.3.4.2:enviar dados personalizados
Ao receber os dados personalizados, o provedor atualiza o pacote de publicidade para incluir esses dados. Para um provedor multiponto, ele também precisa notificar a mudança do status da conexão para outro Buscador conectado usando a mesma chave de conta.
Definir destino da conexão de queda
Em fones de ouvido multiponto, se a conexão preferencial a ser descartada não for a usada mais recentemente, os buscadores da seleção de áudio poderão informar ao provedor qual dispositivo deixar usando a mensagem abaixo:
Octeto | Tipo de dados | Descrição | Valor |
---|---|---|---|
0 | Uint8 | Seleção de áudio | 0x07 |
1 | Uint8 | Definir destino da conexão de queda | 0x43 |
2 a 3 | uint16 | Comprimento de dados adicional | 17 |
4 | Uint8 | Dispositivo conectado de destino para ser descartado | varia 1: este dispositivo |
5 a 12 | Valor de uso único da mensagem | varia | |
13 a 20 | Código de autenticação de mensagem | varia |
Tabela 4.3.4.3:definir o destino da conexão de soltar
Implementação de referência
Consulte a biblioteca de SDK incorporado do Nearby para ver a implementação de referência.