Come posso determinare quali codec A2DP supporta / sta attualmente utilizzando il mio telefono?


24

Il profilo audio Bluetooth A2DP supporta più codec. Tutti i dispositivi devono supportare SBC (subband codec), quindi possono supportare ulteriori "codec opzionali" come MP3 e AAC o codec "non A2DP" come apt-X.

Naturalmente questi codec non possono essere effettivamente utilizzati se il ricevitore non li supporta, nel qual caso entrambi i dispositivi ricadono in SBC.

  1. Come faccio a sapere quali codec supportano il mio hardware / ROM?
  2. Come faccio a sapere quale codec è attualmente in uso? (Forse questo dipende anche dalla traccia, se passa i file MP3 / AAC direttamente senza ricodifica, per esempio)

Questo articolo dice "Gli utenti Android sono fortunati, poiché i moderni telefoni Android supportano AptX. A differenza di Windows, è anche possibile verificare se la connessione utilizza AptX!" Ma nessuna spiegazione di come.
endolito il

Risposte:


10

Sul mio telefono Cyanogen 10.1 (AOSP 4.2.2), è possibile abilitare l'acquisizione del traffico Bluetooth. È quindi possibile caricare questa acquisizione in Wireshark e osservare la fase di negoziazione per determinare quali codec supporta il dispositivo di uscita audio associato. Non sono sicuro di quali sistemi operativi supportino questo: quando ho incontrato per la prima volta questo metodo, mi ha richiesto il supporto solo dal 4.4 in poi, ma chiaramente non è il caso di CM su un DoubleShot. :-)

Supponendo che tu abbia la configurazione richiesta (rooted ~ 4.2.2 o successive), questi sono i passaggi:

  1. associare il telefono al dispositivo di interesse A2DP
  2. disabilita il bluetooth sul tuo telefono
  3. modificare questo file: /etc/bluetooth/bt_stack.conf, cambiando l'impostazione BtSnoopLogOutput dal suo valore predefinito da falso a vero. Per questo utilizzo ES Note Editor, avviato da ES File Explorer dopo aver abilitato l'impostazione "Root Browser".
  4. avviare CatLog, con tutti i tipi di registrazione abilitati
  5. abilita il bluetooth sul tuo telefono
  6. dopo che si accoppia con il dispositivo di output, riproduci uno snippet di audio con il tuo lettore preferito (io uso Apollo). Dieci secondi circa dovrebbero essere sufficienti.
  7. disabilitare di nuovo il bluetooth
  8. interrompere la registrazione di CatLog e salvare il suo file di registro sulla scheda SD
  9. [IMPORTANTE!] Modifica bt_stack.conf, cambiando BtSnoopLogOutput di nuovo in false.
  10. copia l'acquisizione BT dalla tua scheda SD (/sdcard/btsnoop_hci.log), insieme al file CatLog salvato, su un computer con una copia corrente di Wireshark installata.
  11. caricare il file di acquisizione in Wireshark e impostare un filtro di visualizzazione Wireshark di "btavdtp" (senza virgolette). Ora vedrai solo alcuni pacchetti, cerca la risposta del dispositivo di output alla query GetCapabilities di AVDTP e avrai la tua risposta.

È inoltre possibile allineare i timestamp di acquisizione con i timestamp del registro CatLog per cercare voci di registro suggestive. Ho trovato un paio e abilmente dimenticato di includerli nelle note su cui si basa questo post.

Una volta che avrò ancora un po 'di tempo, spero di ridurre questa serie piuttosto lunga di passaggi a un'app, ma non sono sicuro che sia possibile e non avrò ancora il tempo per un po'. Nel frattempo, sono ben accetti suggerimenti per migliorare il processo di cui sopra.


1
Grazie. Questo ha funzionato alla grande. Non ho trovato nulla di rilevante per le funzionalità nei log di CatLog. Comunque, l'ho provato su Moto G (2013) con CM 4.4.2 e con l'auricolare LG HBS-730. Nessun apt-X nei registri, perché CM non ha librerie proprietarie per questo.
dvim,

Grazie, @Martynas, buono a sapersi. Includeva il supporto per mp3? Mi chiedo quale potrebbe essere un buon obiettivo per testare che il mio telefono supporta mp3. L'autoradio purtroppo non lo fa e non ho trovato alcun prodotto (!) Che documenti il ​​suo supporto per il codec A2DP. Per quanto riguarda CatLog, non pensavo che l'attuale elenco di codec potesse essere incluso in alcuni messaggi suggestivi che potrebbero essere utilizzati per cercare il codice sorgente. Un altro giorno ..
Ewedel,

1
Quindi una risposta a Discovertre lavandini audio restituiti. Una risposta a GetCapabilitiesper ACP SEID [2 - Audio Sink]incluso Service: Media Codec - Audio MPEG-1,2 Audioche aveva MP3: True. Ho caricato il file di registro acquisito su github .
dvim,

Grazie ancora @Martynas. Anche se il 730 ha recensioni migliori, ha afferrato un LG HBS-750 per i test. Stessa suite di codec del 730. Ho modificato il repository e aggiunto un'altra acquisizione qui . Sfortunatamente, in entrambe le nostre acquisizioni il telefono sceglie di utilizzare SBC anziché mp3. Non sono sicuro del tipo di file multimediale utilizzato, ma il mio test CM 4.2.2 ha utilizzato mp3 VBR da 128 kb / s (bitrate deliberatamente piccolo per evitare di stressare la larghezza di banda BT). Iniziando a pensare che ce4 potrebbe avere ragione sul problema delle licenze .
Ewedel,

L'eiditing di `/ etc / bluetooth / bt_stack.conf` non sembrava funzionare, ma avevo le stesse impostazioni esatte nelle impostazioni degli sviluppatori e funzionava. Grazie alla tua risposta sono riuscito a scoprire che Parrot Zik 2 utilizza SBC per la maggior parte del tempo.
Zero,

8

Guardando la fonte, ci sono almeno 4 codec: SBC (obbligatorio), MP3 (MPEG12), AAC (MPEG24) e ATRAC di 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

Il software sottostante è lo stack "bluez" di linux. Supporta SBC e ha capacità MP3 limitate.

Il log delle modifiche per v3.25 (2009?) Recita: "Aggiungi supporto limitato per codec MPEG12 / MP3".

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

Vedi anche l' annuncio v3.25 . Il supporto MP3 sembra dipendere da gstreamer che non è disponibile su Android, quindi suppongo che SBC sia l'unica opzione per l'avvio di A2DP.

PS: la maggior parte dei dispositivi A2DP sembra non avere il supporto per MP3 / AAC a causa di problemi di brevetti / licenze (incluso Linux).


2
Questi sono 3 codec opzionali, sì, oppure può usare altri codec come il Galaxy S III usando apt-X . Pensavo che la codifica fosse fornita dall'hardware, però? Android può riprodurre MP3, quindi dubito che ci siano limiti di brevetto.
endolith

2
Non credo che SBC abbia un codificatore hardware dedicato nei dispositivi Android. È modesto dal punto di vista computazionale, quindi immagino che sia fatto nel software. Almeno le fonti lo indicano. PS: sto guardando la fonte di Cyanogenmod, non quella di HTC o Samsung. PS2: intendevo i dispositivi audio sink sull'altro lato con mancanza di mp3 / aac (cuffie, ecc.)
ce4

7

Con i dispositivi Nexus 4 (5.0.1) o Nexus 7 (2012) (4.4.4) è possibile utilizzare la modalità sviluppatore per ottenere btsnoop_hci.log. "Abilita registro snoop Bluetooth HCI". Non è necessario eseguire il root dei dispositivi. Sembra che entrambi i dispositivi non offrano aptx. Ho provato questo con Moto Stream (no aptx) e Philips AEA2500 (con aptx).


1
Sono su CM 12.1 e questa pozione è disponibile anche per me. Forse è su tutti i telefoni recenti. Grazie.
pedro_sland

4

[Il merito di questa risposta va principalmente a ewedel, che ha chiarito che la risposta si trova nel file btsnoop_hci.log, usando Wireshark; e prittstift69, per condividere il modo più semplice per creare questo file di registro.]

Questo è un tutorial passo-passo per i principianti, che riassume le risposte già fornite, con una certa interpretazione dei risultati da me.

Come indicato da prittstift69 e altri, è possibile "Abilitare registro snoop Bluetooth HCI" in Opzioni sviluppatore. Non è necessario seguire l'approccio più complicato suggerito da ewedel.

  1. Inizia disattivando il bluetooth sul dispositivo Android (lo chiamerò "telefono").

  2. Attiva il registro snoop Bluetooth HCI in Opzioni sviluppatore.

  3. Attiva il Bluetooth sul telefono e collegalo al ricevitore Bluetooth (lo chiamerò "ricevitore"). Questo passaggio presuppone che il ricevitore sia stato precedentemente associato al telefono.

  4. Riproduci musica sul tuo telefono (idealmente un file WAV o FLAC non compresso). Dieci secondi sono tutto ciò che serve. (Probabilmente anche meno)

  5. Disattiva il Bluetooth sul telefono.

  6. Disattiva il registro snoop Bluetooth HCI

  7. Trasferisci il file btsnoop_hci.log (l'ho trovato in / sdcard / Android / Data /) sul tuo computer. Esegui WireShark sul tuo computer e apri il file btsnoop_hci.log

  8. Filtro per "btavdtp" (senza virgolette) Cerca un messaggio dal telefono al ricevitore "Comando inviato - SetConfiguration ...." Questo è il messaggio inviato dal telefono al ricevitore con la configurazione finale da utilizzare per questo audio dopo aver completato l'handshaking. Il testo nel campo Informazioni ti dirà quale era la configurazione finale.

[SBC] Se è SBC, potresti voler sapere qual è il bitpool. Per fare ciò, rimuovere il Filtro per btavdtp e cercare un messaggio con Protocollo SBC e fare clic su di esso. Di seguito, nella sezione dettagli, espandere le informazioni Bluetooth Codec SBC. Quindi espandere qualsiasi (o tutti) i dati Frame. Lì, dovrebbe mostrare chiaramente il Bitpool utilizzato da quel Frame. Se è 35, ci sono buone probabilità che la frequenza di campionamento sia di 44,1 kHz, si stia utilizzando Joint Stereo e si usi il profilo audio SBC di qualità media ( http://soundexpert.org/news/-/blogs/bluetooth-audio -quality-a2dp ). Il bitrate per l'audio compresso è quindi 229 kbit / sec SBC, che ottiene un punteggio di 4.68 nei test di Sound Expert ( http://soundexpert.org/encoders-224-kbps ) che è paragonabile a mp3 circa 110-130 kbit / sec.

[APT-X] Se è APT-X, sia il telefono che il ricevitore supportano APT-X, ed è quello che sta usando. Supponendo 16 bit, 44,1 kHz, il codec funziona a 352 kbit / s.


"idealmente un file WAV o FLAC non compresso" Non vorresti riprodurre un MP3 per vedere se lo invia come MP3, ecc.?
Endolith,

2
Solo se il tuo obiettivo è vedere se A2DP supporta mp3 su entrambi i lati (una domanda valida). Tuttavia, la mia esperienza è che il supporto mp3 su entrambi i lati è raro (non l'ho mai visto su nessuno dei miei dispositivi e ne ho avuti parecchi). Quindi, almeno con i dispositivi Android, le opzioni di codec A2DP più probabili sono SBC e APTX. La riproduzione di un file audio non compresso forza la ricodifica del telefono.
klaberte,

Non ho scritto una risposta
endolito il
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.