24 votos

¿Cómo determino qué códecs A2DP mi teléfono soporta/está usando actualmente?

El perfil de audio A2DP de Bluetooth soporta múltiples códecs. Todos los dispositivos deben ser compatibles con SBC (códecs de sub-banda), entonces pueden soportar "códecs opcionales" adicionales como MP3 y AAC, o códecs "no-A2DP" como apt-X.

Por supuesto que estos códecs no pueden ser usados si el receptor no los soporta también, en cuyo caso ambos dispositivos recaen en el SBC.

  1. ¿Cómo averiguo qué códecs soporta mi hardware/ROM?
  2. ¿Cómo puedo saber qué códec se está utilizando actualmente? (Tal vez esto también dependa de la pista, si pasa los archivos MP3/AAC directamente sin recodificar, por ejemplo)

0 votos

Este artículo dice "Los usuarios de Android están de suerte, ya que los teléfonos modernos de Android sí soportan AptX. A diferencia de lo que ocurre en Windows, ¡incluso es posible comprobar si la conexión utiliza AptX!" Pero no se explica cómo.

10voto

ewedel Puntos 41

En mi teléfono Cyanogen 10.1 (AOSP 4.2.2), es posible habilitar una captura de tráfico bluetooth. Luego puede cargar esta captura en Wireshark y mirar la fase de negociación para determinar qué códecs soporta el dispositivo de salida de audio emparejado. No estoy seguro de qué sistemas operativos lo soportan: cuando me encontré con este método, dijo que sólo lo soportaba a partir de la versión 4.4, pero claramente no es el caso de CM en un DoubleShot. :-)

Asumiendo que se tiene la configuración necesaria (rooteado ~ 4.2.2 o posterior), estos son los pasos:

  1. emparejar tu teléfono con el dispositivo A2DP de interés
  2. deshabilitar el bluetooth en tu teléfono
  3. editar este archivo: /etc/bluetooth/bt_stack.conf, cambiando la configuración de BtSnoopLogOutput de su valor por defecto de falso a verdadero. Para ello utilizo el ES Note Editor, lanzado desde el Explorador de Archivos ES después de habilitar su configuración "Root Browser".
  4. iniciar CatLog, con todos los tipos de registro activados
  5. habilitar el bluetooth en tu teléfono
  6. después de que se empareje con el dispositivo de salida, reproduce un fragmento de audio con el jugador de su elección (yo uso Apolo). Diez segundos más o menos deberían ser suficiente.
  7. deshabilitar el bluetooth de nuevo
  8. detenga el registro de CatLog y guarde su archivo de registro en su tarjeta SD
  9. [¡IMPORTANTE!] editar bt_stack.conf, cambiando BtSnoopLogOutput de nuevo a false.
  10. copie la captura del BT de su tarjeta SD (/sdcard/btsnoop_hci.log), junto con el archivo CatLog guardado, a un ordenador con una copia actual de Wireshark instalado.
  11. cargar el archivo de captura en Wireshark y establecer un Wireshark filtro de visualización de "btavdtp" (sin citas). Ahora verás unos cuantos sólo paquetes, busca la respuesta del dispositivo de salida al AVDTP Consigue la consulta de Capacidades y tendrás tu respuesta.

También puedes alinear las marcas de tiempo de la captura con las marcas de tiempo del registro CatLog para buscar entradas sugerentes en el registro. Encontré un par y astutamente olvidé incluirlas en las notas en las que se basa este post.

Una vez que tenga algo más de tiempo espero reducir este conjunto de pasos bastante largos a una aplicación, pero no estoy seguro de que sea posible y no tendré tiempo todavía por un tiempo de todos modos. Mientras tanto, las sugerencias para mejorar el proceso anterior son bienvenidas.

1 votos

Gracias. Esto ha funcionado muy bien. No encontré nada relevante para las capacidades en los registros de CatLog. De todos modos, lo probé en el Moto G (2013) corriendo CM 4.4.2 y con auriculares LG HBS-730. No hay apt-X en los registros, porque CM no tiene librerías propietarias para eso.

0 votos

Gracias, @Martynas, es bueno saberlo. ¿Incluye soporte para mp3? Me pregunto cuál podría ser un buen objetivo para probar que mi teléfono soporta mp3. La radio del coche no lo hace por desgracia, y no he encontrado ningún producto (!) que documente su soporte de códec A2DP. En cuanto a CatLog, no estaba pensando que la lista de códecs estaría allí tanto como algunos mensajes sugerentes que podrían utilizarse para buscar el código fuente. Otro día

1 votos

Así que una respuesta a Discover devolvió tres sumideros de audio. Una respuesta a GetCapabilities para ACP SEID [2 - Audio Sink] incluye Service: Media Codec - Audio MPEG-1,2 Audio que había MP3: True . He subido el archivo de registro capturado a github .

8voto

ce4 Puntos 11180

Mirando la fuente, hay al menos 4 códecs: SBC (obligatorio), MP3 (MPEG12), AAC (MPEG24) y el ATRAC de 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

El software subyacente es la pila "bluez" de Linux. Soporta SBC y tiene capacidades MP3 limitadas.

El registro de cambios de la v3.25 (2009?) dice: "Añadir soporte limitado para el códec MPEG12/MP3".

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

Véase también la v3.25 anuncio . El soporte de MP3 parece depender del gstreamer que no está disponible en Android, así que supongo que SBC es la única opción para que A2DP arranque.

PD: La mayoría de los dispositivos A2DP parecen carecer de soporte para MP3/AAC debido a problemas de patentes/licencias (incluyendo Linux).

2 votos

Esos son 3 códecs opcionales, sí, o puede utilizar otros códecs como el Galaxy S III utilizando apt-X . Sin embargo, creía que la codificación la proporcionaba el hardware. Android puede reproducir MP3, así que dudo que haya limitaciones de patente.

2 votos

No creo que SBC tenga un codificador de hardware dedicado en los dispositivos Android. Es computacionalmente modesto, así que supongo que se hace por software. Al menos las fuentes indican eso. PD: Estoy mirando la fuente de Cyanogenmod, no la de HTC o Samsung. PD2: Me refería a los dispositivos con sumidero de audio del otro lado con falta de mp3/aac (auriculares, etc.)

8voto

prittstift69 Puntos 11

Con los dispositivos Nexus 4 (5.0.1) o Nexus 7 (2012)(4.4.4) es posible utilizar el modo de desarrollo para obtener el btsnoop_hci.log. "Habilitar Bluetooth HCI snoop log". No es necesario rootear los dispositivos. Parece que ambos dispositivos no ofrecen aptx. Lo pruebo con Moto Stream (sin aptx) y Philips AEA2500 (con aptx).

1 votos

Estoy en CM 12.1 y esta poción también está disponible para mí. Tal vez sea en todos los teléfonos recientes. Gracias.

4voto

klaberte Puntos 61

En muchos casos, no es necesario pasar por este proceso, ya que valdikss ahora mantiene un seguimiento de muchos de los resultados aportados en su sitio web

https://btcodecs.valdikss.org.ru/codec-compatibility/ https://btcodecs.valdikss.org.ru/

Si tiene problemas para encontrar su archivo btsnoop_hci.log, pruebe la solución publicada aquí:

https://stackoverflow.com/questions/28445552/bluetooth-hci-snoop-log-not-generated/30352487#30352487

Una vez que encuentre su btsnoop_hci.log, por favor, comience en el paso 7 de la respuesta anterior.

Respuesta anterior: [El mérito de esta respuesta se debe principalmente a ewedel, que aclaró que la respuesta está en el archivo btsnoop_hci.log, utilizando Wireshark; y a prittstift69, por compartir la forma fácil de crear este archivo de registro].

Este es un tutorial paso a paso para novatos, que resume las respuestas ya dadas, con alguna interpretación de los resultados por mi parte.

Como prittstift69 y otros mencionaron, puedes "Habilitar el registro de snoop de Bluetooth HCI" en las opciones de desarrollador. No es necesario seguir el enfoque más complicado sugerido por ewedel.

  1. Comienza apagando el bluetooth en el dispositivo Android (lo llamaré "teléfono").

  2. Activa el registro de HCI Bluetooth en las opciones de desarrollo.

  3. Activa el Bluetooth en el teléfono y conéctalo al receptor Bluetooth (lo llamaré "receptor"). Este paso supone que el receptor ha sido previamente emparejado con el teléfono.

  4. Reproduce música en tu teléfono (idealmente un archivo WAV o FLAC sin comprimir). Diez segundos es todo lo que necesitas. (Probablemente incluso menos)

  5. Desactive el Bluetooth en el teléfono.

  6. Desactivar el registro de espionaje del HCI Bluetooth

  7. Transfiera el archivo btsnoop_hci.log (lo encontré en /sdcard/Android/Data/) a su ordenador. Ejecuta wireshark en tu ordenador y abre el archivo btsnoop_hci.log

  8. Filtrar por "btavdtp" (sin comillas) Buscar un mensaje del teléfono al receptor "Sent Command - SetConfiguration ...." Este es el mensaje enviado por el teléfono al receptor con la configuración final que se utilizará para este audio después de que se complete el handshaking. El texto en el campo de información le dirá cuál fue la configuración final.

[SBC] Si es SBC, es posible que quieras saber cuál es el bitpool. Para ello, quite el filtro para btavdtp y busque un mensaje con el protocolo SBC y haga clic en él. A continuación, en la sección de detalles, expanda la información del códec Bluetooth SBC. A continuación, expanda alguno (o todos) los datos de la trama. Allí, debería mostrar claramente el Bitpool utilizado por esa trama. Si es 35, es muy probable que su frecuencia de muestreo sea de 44,1 kHz, que esté utilizando Joint Stereo, y que esté usando el perfil de audio SBC de calidad media ( http://soundexpert.org/news/-/blogs/bluetooth-audio-quality-a2dp ). La tasa de bits para el audio comprimido es entonces de 229 kbits/seg SBC, que obtiene una puntuación de 4,68 en las pruebas de Sound Expert ( http://soundexpert.org/encoders-224-kbps ) que es comparable al mp3 en torno a 110-130 kbits/seg.

[APT-X] Si es APT-X, tanto el teléfono como el receptor son compatibles con APT-X, y eso es lo que está utilizando. Suponiendo que sea de 16 bits y 44,1 kHz, el códec funciona a 352 kbits/s.

0 votos

"idealmente un archivo WAV o FLAC sin comprimir" ¿No querrías reproducir un MP3 para ver si lo envía como MP3, etc.?

2 votos

Sólo si tu objetivo es ver si A2DP soporta mp3 en ambos lados (una pregunta válida). Sin embargo, mi experiencia es que el soporte de mp3 en ambos lados es raro (nunca lo he visto en ninguno de mis dispositivos, y he tenido bastantes). Así que, al menos con los dispositivos Android, tus opciones más probables de códecs A2DP son SBC y APTX. Reproducir un archivo de audio sin comprimir obliga al teléfono a recodificar.

0 votos

No escribí una respuesta

PreguntAndroid.com

PreguntAndroid es una comunidad de usuarios de Android en la que puedes resolver tus problemas y dudas.
Puedes consultar las preguntas de otros usuarios, hacer tus propias preguntas o resolver las de los demás.

Powered by:

X