Como determinar quais codecs A2DP meu telefone suporta / está usando atualmente?


24

O Perfil de áudio A2DP do Bluetooth suporta vários codecs. Todos os dispositivos precisam oferecer suporte a SBC (codec de sub-banda), para que possam suportar "codecs opcionais" adicionais, como MP3 e AAC, ou codecs "não-A2DP", como o apt-X.

É claro que esses codecs não podem realmente ser usados ​​se o receptor também não os suportar; nesse caso, os dois dispositivos retornam à SBC.

  1. Como descubro quais codecs meu hardware / ROM suporta?
  2. Como descubro qual codec está atualmente em uso? (Talvez isso dependa também da faixa, se ela passar arquivos MP3 / AAC diretamente sem recodificar, por exemplo)

Este artigo diz "Os usuários do Android estão com sorte, pois os telefones Android modernos oferecem suporte ao AptX. Ao contrário do Windows, é até possível verificar se a conexão está usando o AptX!" Mas nenhuma explicação de como.
endolith

Respostas:


10

No meu telefone Cyanogen 10.1 (AOSP 4.2.2), é possível ativar a captura de tráfego bluetooth. Você pode carregar essa captura no Wireshark e examinar a fase de negociação para determinar quais codecs o dispositivo de saída de áudio emparelhado suporta. Não tenho certeza de quais sistemas operacionais suportam isso: quando eu deparei com esse método, ele alegava suporte apenas a partir do 4.4, mas claramente não era o caso do CM em um Doubleshot. :-)

Supondo que você tenha a configuração necessária (raiz ~ 4.2.2 ou posterior), estas são as etapas:

  1. emparelhe seu telefone com o dispositivo A2DP de seu interesse
  2. desativar o bluetooth no seu telefone
  3. edite este arquivo: /etc/bluetooth/bt_stack.conf, alterando a configuração BtSnoopLogOutput de seu valor padrão de false para true. Para isso, uso o ES Note Editor, iniciado no ES File Explorer após ativar a configuração "Root Browser".
  4. inicie o CatLog, com todos os tipos de log ativados
  5. ativar o bluetooth no seu telefone
  6. depois de emparelhar com o dispositivo de saída, reproduza um trecho de áudio com o seu player de sua escolha (eu uso o Apollo). Dez segundos ou mais devem ser suficientes.
  7. desativar o bluetooth novamente
  8. interrompa o registro do CatLog e salve seu arquivo de log no seu cartão SD
  9. [IMPORTANTE!] Edite bt_stack.conf, alterando BtSnoopLogOutput de volta para false.
  10. copie a captura BT do seu cartão SD (/sdcard/btsnoop_hci.log), juntamente com o arquivo CatLog salvo, em um computador com uma cópia atual do Wireshark instalada.
  11. carregue o arquivo de captura no Wireshark e defina um filtro de exibição do Wireshark "btavdtp" (sem aspas). Agora você verá apenas alguns pacotes, procure a resposta do dispositivo de saída para a consulta AVDTP GetCapabilities e terá sua resposta.

Você também pode alinhar os registros de data e hora da captura com os registros de data e hora do log do CatLog para procurar entradas de registro sugestivas. Encontrei um casal e esqueci inteligentemente de incluí-lo nas notas em que este post se baseia.

Quando tiver mais tempo, espero reduzir esse longo conjunto de etapas para um aplicativo, mas não tenho certeza se é possível e ainda não terá tempo por um tempo. Enquanto isso, sugestões para melhorar o processo acima são bem-vindas.


11
Obrigado. Isso funcionou muito bem. Não encontrei nada relevante para os recursos nos logs do CatLog. Enfim, tentei no Moto G (2013) executando o CM 4.4.2 e com o fone de ouvido LG HBS-730. Não há apt-X nos logs, porque o CM não possui bibliotecas proprietárias para isso.
dvim

Obrigado, @ Martynas, bom saber. Incluiu suporte para mp3? Gostaria de saber o que pode ser um bom alvo para testar se o meu telefone suporta mp3. Infelizmente, o rádio do carro não encontrou nenhum produto (!) Que documenta seu suporte ao codec A2DP. Com relação ao CatLog, não estava pensando que a lista de codecs reais estaria lá tanto quanto algumas mensagens sugestivas que poderiam ser usadas para pesquisar o código-fonte. Outro dia ..
ewedel 25/11

11
Portanto, uma resposta Discoverretornou três coletores de áudio. Uma resposta GetCapabilitiespara ACP SEID [2 - Audio Sink]incluído Service: Media Codec - Audio MPEG-1,2 Audioque tinha MP3: True. Fiz upload do arquivo de log capturado no github .
dvim

Mais uma vez obrigado @Martynas. Embora o 730 tenha melhores críticas, pegou um LG HBS-750 para testes. O mesmo conjunto de codecs que o 730. Garfou seu repositório e adicionou outra captura aqui . Infelizmente, em ambas as capturas, o telefone está optando por usar o SBC em vez de mp3. Não sei ao certo qual tipo de arquivo de mídia você usou, mas meu teste do CM 4.2.2 usou mp3s VBR de 128kb / s (taxa de bits deliberadamente pequena para evitar sobrecarregar a largura de banda BT). Começando a pensar que ce4 pode estar certo sobre a questão do licenciamento .
ewedel

O apagamento do `/ etc / bluetooth / bt_stack.conf` não parecia funcionar, mas eu tinha exatamente a mesma configuração nas configurações do desenvolvedor e isso funcionou. Graças à sua resposta, consegui descobrir que o Parrot Zik 2 usa SBC na maioria das vezes.
Zero

8

Observando a fonte, há pelo menos 4 codecs: SBC (obrigatório), MP3 (MPEG12), AAC (MPEG24) e ATRAC da Sony.

./android/external/bluetooth/bluez/audio/a2dp.h:  
#define A2DP_CODEC_SBC          0x00
#define A2DP_CODEC_MPEG12       0x01
#define A2DP_CODEC_MPEG24       0x02
#define A2DP_CODEC_ATRAC        0x03

O software subjacente é a pilha "bluez" do linux. Ele suporta SBC e possui recursos limitados de MP3.

O changelog da v3.25 (2009?) Diz: "Adicione suporte limitado ao codec MPEG12 / MP3".

./android/external/bluetooth/bluez/ChangeLog:
ver 3.25:
    Add limited support for Handsfree profile.
    Add limited support for MPEG12/MP3 codec.

Veja também o anúncio da v3.25 . O suporte a MP3 parece depender do gstreamer, que não está disponível no Android, então acho que o SBC é a única opção para o A2DP inicializar.

PS: A maioria dos dispositivos A2DP parece não ter suporte para MP3 / AAC devido a problemas de patentes / licenciamento (incluindo Linux).


2
Esses são 3 codecs opcionais, sim, ou ele pode usar outros codecs como o Galaxy S III usando o apt-X . Eu pensei que a codificação era fornecida por hardware, embora? O Android pode tocar MP3, então eu duvido que haja alguma limitação de patente.
endolith 24/07/12

2
Não acho que a SBC tenha um codificador de hardware dedicado em dispositivos Android. É computacionalmente modesto, então acho que é feito em software. Pelo menos as fontes indicam isso. PS: Estou vendo a fonte da Cyanogenmod, não da HTC ou da Samsung. PS2: Eu quis dizer os dispositivos dissipador de áudio no outro lado com a falta de MP3 / AAC (fones de ouvido, etc.)
CE4

7

Com os dispositivos Nexus 4 (5.0.1) ou Nexus 7 (2012) (4.4.4), é possível usar o modo de desenvolvedor para obter o btsnoop_hci.log. "Ativar log snoop Bluetooth HCI". Não é necessário fazer root nos dispositivos. Parece que ambos os dispositivos não oferecem aptx. Eu testei isso com o Moto Stream (sem aptx) e a Philips AEA2500 (com aptx).


11
Estou no CM 12.1 e esta poção também está disponível para mim. Talvez esteja em todos os telefones recentes. Obrigado.
pedro_sland

4

[O crédito por essa resposta é principalmente do ewedel, que esclareceu que a resposta está no arquivo btsnoop_hci.log, usando o Wireshark; e prittstift69, por compartilhar a maneira fácil de criar esse arquivo de log.]

Este é um tutorial passo a passo para iniciantes, resumindo as respostas já fornecidas, com alguma interpretação dos meus resultados.

Como prittstift69 e outros mencionados, você pode "Ativar log snoop Bluetooth HCI" em Opções do desenvolvedor. Não é necessário seguir a abordagem mais complicada sugerida por ewedel.

  1. Comece desativando o bluetooth no dispositivo Android (vou chamá-lo de 'telefone').

  2. Ative o log do snoop Bluetooth HCI em Opções do desenvolvedor.

  3. Ligue o Bluetooth no telefone e conecte-o ao receptor Bluetooth (chamarei de 'receptor'). Esta etapa pressupõe que o receptor tenha sido anteriormente emparelhado com o telefone.

  4. Reproduza música no seu telefone (de preferência um arquivo WAV ou FLAC não compactado). Dez segundos é tudo que você precisa. (Provavelmente até menos)

  5. Desligue o Bluetooth no telefone.

  6. Desativar o log do snoop Bluetooth HCI

  7. Transfira o arquivo btsnoop_hci.log (eu o encontrei em / sdcard / Android / Data /) para o seu computador. Execute o wireshark no seu computador e abra o arquivo btsnoop_hci.log

  8. Filtrar "btavdtp" (sem aspas) Procure uma mensagem do telefone para o destinatário "Comando enviado - SetConfiguration ...." Esta é a mensagem enviada pelo telefone ao destinatário com a configuração final a ser usada para este áudio após a conclusão do aperto de mão. O texto no campo Informações informará qual era a configuração final.

[SBC] Se for SBC, convém saber qual é o bitpool. Para fazer isso, remova o filtro do btavdtp, procure uma mensagem com o protocolo SBC e clique nele. Abaixo, na seção de detalhes, expanda as informações do Bluetooth SBC Codec. Expanda qualquer um (ou todos) os dados do quadro. Lá, ele deve mostrar claramente o Bitpool usado por esse quadro. Se tiver 35 anos, há uma boa chance de que a taxa de amostragem seja 44,1 kHz, você esteja usando o Joint Stereo e o perfil de áudio SBC de qualidade média ( http://soundexpert.org/news/-/blogs/bluetooth-audio -quality-a2dp ). A taxa de bits para o áudio compactado é de 229 kbits / s SBC, que atinge 4,68 nos testes do Sound Expert ( http://soundexpert.org/encoders-224-kbps ), comparável ao mp3 em torno de 110-130 kbits / s.

[APT-X] Se for o APT-X, o telefone e o receptor suportam o APT-X, e é isso que está usando. Assumindo 16 bits, 44,1kHz, o codec está sendo executado a 352kbits / s.


"idealmente, um arquivo WAV ou FLAC descompactado" Você não gostaria de reproduzir um MP3 para ver se o envia como MP3, etc?
endolith

2
Somente se seu objetivo é verificar se o A2DP suporta mp3 nos dois lados (uma pergunta válida). No entanto, minha experiência é que o suporte a mp3 em ambos os lados é raro (nunca o vi em nenhum dos meus dispositivos e já tive muitos). Portanto, pelo menos com dispositivos Android, suas opções de codec A2DP mais prováveis ​​são SBC e APTX. A reprodução de um arquivo de áudio não compactado força o telefone a recodificar.
klaberte

Eu não escrevi uma resposta
endolith
Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.