Deshágase de la latencia de 0.5s cuando reproduzca audio a través de Bluetooth con A2DP

49

Como se describe en el título, experimento un retraso de medio segundo al reproducir audio a través de Bluetooth con A2DP.
Esto hace que no sea posible ver películas, ya que el sonido no está sincronizado con el video.

No estoy seguro de si el retraso es causado por el estándar Bluetooth, el protocolo A2PD, la implementación A2DP en Ubuntu 12.04 o el receptor Bluetooth Belkin Z73.

De todos modos, ¿es este un retraso normal? ¿Hay alguna manera de reproducir audio a través de Bluetooth sin ninguna latencia notable?

brillante
fuente
99
No es una solución real a su problema, sino una solución alternativa: si solo se trata de reproducir películas, puede ajustar el desplazamiento de audio / video, lo que también retrasará el video. Usando mplayer, lo haces presionando las teclas +y -. En VLC, no sé cómo configurar el retraso, pero me sorprendería si VLC no tiene esa opción.
leemes
Pensé en eso, pero me falta una solución para YouTube. Cuando el video se reproduce con HTML5, una solución podría ser instalar una extensión de navegador que establezca un desplazamiento de video. Pero para el caso, el video se reproduce con flash, no estoy seguro de cómo lograrlo.
brillante
Por cierto, la opción VLC está activada Tools->Track Synchronisationo juega con la --audio-desyncopción. Me temo que no estoy seguro de cuáles son las unidades, y qué dirección es positiva, y la ayuda no está disponible al respecto, pero ahí es donde quiere mirar.
Darael
¿Has encontrado una solución permanente a este problema? Actualmente estoy usando la solución para cambiar entre A2DP / HSP / A2DP, pero no es práctico seguir haciéndolo cada vez que se produce un problema de sincronización.
Fred Wuerges

Respuestas:

37

No, esto no es normal, pero ocasionalmente he tenido un problema similar con mis altavoces Bluetooth Altec Lansing iMT525. Algo similar en concepto a la respuesta de Sri casi siempre funciona para mí, y necesito hacerlo solo una vez por conexión.

Cambio automático de perfiles Bluetooth para reinicializar PulseAudio

Si está buscando un culpable, primero miraría el sistema de sonido de Ubuntu, PulseAudio, y luego su receptor bluetooth. Prueba esto:

  • Primero, elimine y vuelva a emparejar su dispositivo Bluetooth.

  • Luego, copie y pegue lo siguiente en un .sharchivo en su directorio de inicio, por ejemplo /home/brillout/pabluezswitch.sh:

    #! / bin / bash
    BLUEZCARD = `pactl list cards short | egrep -o bluez. * [[: espacio:]] ` pactl set-card-profile $ BLUEZCARD a2dp pactl set-card-profile $ BLUEZCARD hsp pactl set-card-profile $ BLUEZCARD a2dp
  • Haga que el archivo sea ejecutable abriendo un terminal y escribiendo chmod +x ~/pabluezswitch.sh

  • Vaya a Configuración ... Teclado ... Accesos directos y cree un acceso directo personalizado; nómbralo como quieras, con el comando como /home/brillout/pabluezswitch.sh(¡sustituye el nombre de usuario apropiado en la ruta!). Haga clic en Aplicar , y luego haga clic a la derecha donde dice Deshabilitado para configurar un atajo de teclado para ejecutar el script.

Lo que esto hace es forzar al sistema PulseAudio a resincronizar el audio que se envía a sus auriculares / parlantes al cambiar los perfiles ad2p -> hsp -> a2dp, y con suerte deshacerse de cualquier latencia.


Siempre que se conecte y note el retraso, debe presionar el método abreviado de teclado elegido anteriormente para intentar corregir la latencia, ¡con suerte funcionará para usted!

ish
fuente
He estado usando esto durante un par de días y funciona muy bien. - 14.04
dpb
77
Tenga en cuenta que pactl tiene mensajes de error terribles, y que muchos equipos de audio no tienen estos ad2py hsp. Mi Bose solo tiene ad2p_sink, no estos otros dos.
odinho - Velmont
1
Creo que necesita citas sobre ese patrón
egrep
1
¿Supongo que no hay una manera de monitorear la latencia y activar este script automáticamente cuando excede algún umbral por encima de la referencia? pacmd info | grep "current latency"y pacmd statparece dar los mismos números de latencia / tamaño de búfer, sin importar cuán grande sea la latencia real (por ejemplo, cuando saque el auricular del alcance y lo devuelva), ¿entonces tal vez una parte diferente de la pila es responsable de la latencia?
Ponkadoodle
2
@ Odinho-Velmont alterna ad2p_sinky offtrabaja para mí. Recientemente agregué esto a mi secuencia de comandos de control de volumen / audio Pulse que podría ser útil para alguien
Sam Mason el
21
  • Instalar pavucontrol: sudo apt install pavucontrol
  • Ejecutar pavucontroldesde el menú
  • Ir a dispositivos de salida
  • Ir al dispositivo bluetooth
  • Ir a avanzado
  • Allí puede establecer el desplazamiento de latencia en el valor en milisegundos (más o menos). Para asegurarse del valor, debe comenzar con cualquier valor, por ejemplo, 250.00 mi.
  • Reproduzca cualquier "prueba de sincronización de audio" de YouTube y ajuste la velocidad de reproducción a 0.25 (hágalo más lento) y desde allí puede comenzar a notar si el valor es correcto o si necesita ser aumentado o disminuido.
Roelf Renkema
fuente
2
Eliminado sass innecesario de la respuesta, no hay necesidad de ser grosero. Además, este suena como tiene que funcionar, pero no parece realmente hacer nada por mí ...
naught101
Para mí esto funcionó para la reproducción de youtube con altavoces bluetooth. Gracias. Cuando abrí pavucontrol por primera vez, la opción avanzada estaba oculta. Tuve que expandir verticalmente la ventana.
user75505
11

Ocasionalmente tengo un problema similar, independientemente del jugador utilizado. El mío es un auricular estéreo Bluetooth Nokia BH-503 con laptop MSI CR400 y Ubuntu 11.10. Me encontré con una solución alternativa que puedes probar.

  • Inicia la reproducción del video.
  • Vaya a Configuración de sonido> Hardware.
  • Selecciona el dispositivo Bluetooth.
  • Luego, en la lista desplegable Configuración para el dispositivo seleccionado, cambie al perfil Duplex de telefonía (HSP / HFP), luego vuelva a la Reproducción de alta fidelidad (A2DP).
Sri
fuente
7

La respuesta superior aquí funciona, pero no para todos los dispositivos de audio bluetooth. Algunos dispositivos tienen nombres de perfil diferentes a los que tiene ese póster con sus altavoces bluetooth. Por ejemplo, en el siguiente código, que fue publicado originalmente por esa persona, aparentemente tiene perfiles nombrados a2dpy hsp. Ninguno de estos está disponible con mis LG Tones, por ejemplo, pero están con otros dispositivos como mis auriculares Sony.

#!/bin/bash

BLUEZCARD=`pactl list cards short | egrep -o bluez.*[[:space:]]`
pactl set-card-profile $BLUEZCARD a2dp
pactl set-card-profile $BLUEZCARD hsp
pactl set-card-profile $BLUEZCARD a2dp

Parece que ese código funcionará para la mayoría de los dispositivos bluetooth, pero para que funcione correctamente para aquellos dispositivos que no tienen el perfil a2dp o el perfil hsp, escriba:

pactl list | grep -Pzo '.*bluez_card(.*\n)*'

Esto devolverá todo después de que encuentre un dispositivo bluetooth. Por ejemplo, con los auriculares LG Tone Ultra, obtengo esto:

Name: bluez_card.B8_AD_3E_**_**_**
    Driver: module-bluez5-device.c
    Owner Module: 36
    Properties:
        device.description = "LG HBS810"
        device.string = "B8:AD:3E:**:**:**"
        device.api = "bluez"
        device.class = "sound"
        device.bus = "bluetooth"
        device.form_factor = "headset"
        bluez.path = "/org/bluez/hci0/dev_B8_AD_3E_**_**_**"
        bluez.class = "0x240404"
        bluez.alias = "LG HBS810"
        device.icon_name = "audio-headset-bluetooth"
        device.intended_roles = "phone"
    Profiles:
        a2dp_sink: High Fidelity Playback (A2DP Sink) (sinks: 1, sources: 0, priority: 10, available: yes)
        headset_head_unit: Headset Head Unit (HSP/HFP) (sinks: 1, sources: 1, priority: 20, available: yes)
        off: Off (sinks: 0, sources: 0, priority: 0, available: yes)
    Active Profile: a2dp_sink
    Ports:
        headset-output: Headset (priority: 0, latency offset: 0 usec)
            Part of profile(s): a2dp_sink, headset_head_unit
        headset-input: Headset (priority: 0, latency offset: 0 usec)
            Part of profile(s): headset_head_unit

Estamos interesados ​​en la profilessección. En esta sección, vemos tres perfiles, que son a2dp_sink, headset_head_unity off. Los dos perfiles que necesitamos deben tener en ellos (A2DP Sink) y (HSP / HFP). En este caso, son a2dp_sinkpara el perfil a2dp y headsethead_unitpara el perfil hsp. Observe esto es diferente que el cartel de originales a2dpy hsp.

Ahora, con el código anterior, lo modificaremos y lo pondremos en un archivo. Llamé al archivo bluezswitch.sh.

Cambie al directorio donde desea colocar el archivo. Puede estar en cualquier parte.

touch bluezswitch.sh

Entonces

nano bluezswitch.sh

Copie y pegue el código en la parte superior de este comentario y reemplace el a2dpy hspcon los valores que obtuvo cuando ejecutó el comando anterior, y péguelo en ese archivo. Por ejemplo, así es como se veía mi archivo para mis LG Tones.

#!/bin/bash

BLUEZCARD=`pactl list cards short | egrep -o bluez.*[[:space:]]`
pactl set-card-profile $BLUEZCARD a2dp_sink
pactl set-card-profile $BLUEZCARD headset_head_unit
pactl set-card-profile $BLUEZCARD a2dp_sink

Ahora, ctrl-xa continuación, yguardar el archivo y salga nano, y luego hacer el archivo ejecutable:

chmod +x bluezswitch.sh

Luego, realice un acceso directo de teclado como se ha explicado.

Vaya a Configuración ... Teclado ... Accesos directos y cree un acceso directo personalizado; nómbrelo como quiera, con el comando como /home/brillout/bluezswitch.sh (¡sustituya el nombre de usuario apropiado en la ruta!). Haga clic en Aplicar, y luego haga clic a la derecha donde dice Deshabilitado para configurar un atajo de teclado para ejecutar el script.

Eso debería ser todo lo que hay que hacer. Esto debería funcionar para todos aquellos para los que no funcionaba antes.

Timm Simpkins
fuente
1
Para mí, apagar a2dp_sink, off, a2dp_sinken las obras de secuencias muy bien para mí. Configuración de headset_head_uniterror de E / S.
Mohd Shahril
5

La modulación de código de pulso diferencial adaptativo implica un algoritmo de compresión de tipo anticipado donde la información no puede transmitirse antes de que el codificador haya tenido la oportunidad de examinar varios bytes de información próxima. Por lo tanto, los datos tienen que acumularse en el codificador, y hay un cambio de tiempo inherente entre los flujos que entran y salen del codificador. Hace mucho tiempo, hice un estudio de los retrasos en la red de datos para determinar la viabilidad de la telefonía de voz sobre datos (lo que ahora es VoIP). Creo que concluí que la compresión / codificación de estilo ADPCM introduciría demasiado retraso. Creo que para superar este problema de retraso de Bluetooth, uno podría necesitar un tipo de codificación de audio sin compresión que debería tener una latencia más baja.

Kirk Shrewsbury
fuente
66
¿El problema de compresión representaría unas pocas decenas de milisegundos, no medio segundo, sin duda?
naught101
4

Intenté muchos enfoques para este problema, pero nada pudo solucionarlo. Luego me topé con set-port-latency-offset

Si está utilizando pulseaudio, haga lo siguiente:

pactl list cards short | egrep -o bluez.*[[:space:]]

Esto te dará la interfaz bluetooth. Ahora configure la latencia en consecuencia:

pactl set-port-latency-offset <INTERFACE> speaker-output 100000

Estoy usando 100000 microsegundos, que funciona bien para mí.

Arindam Mani Das
fuente
1
Para cualquiera que se encuentre con esta vieja publicación en busca de una respuesta, la respuesta de Arindam Mani Das funciona perfectamente. Si recibe el error "no existe tal entidad", ejecute 'pactl list cards' y verifique qué puertos están disponibles para su dispositivo. Tuve que cambiar "salida de altavoz" a "salida de auriculares" en el segundo comando ya que mi dispositivo no tiene un puerto de salida de altavoz.
Billy Farrington
1

Esto es lo que me resolvió: $ sudo apt-get install phonon-backend-vlcy asegúrese de que sea el backend preferido, en KDE vaya a [Configuración del sistema] [Multimedia] [Configuración de audio y video] [Backend] y use el [Botón Preferir]

Dargaud
fuente
1
@dargaud Recomiendo expandir esto para explicar cómo hacerlo el backend preferido.
Eliah Kagan
0

personas que tienen este problema. Visite este sitio web: http://projectzeorymer.wordpress.com/2011/09/01/ubuntu-how-to-connect-nokia-bh-503-bluetooth-headset-to-your-pc / para ver una foto de lo que necesitas descargar.

Descargue el administrador de bluetooth y úselo para manipular la configuración de los auriculares. Establezca la configuración de sonido en Reproducción de alta fidelidad (A2DP) y luego vaya a la configuración de sonido.

Alex Force
fuente
1
Vaya a administrar bluetooth y vaya a Perfil de audio y luego seleccione Reproducción de alta federación ... eso es todo
Alex Force
0

En el reproductor multimedia VLC, vaya a Herramientas Sincronización de pistas Sincronizar pestaña En Sincronización de pistas de audio / video, use un valor negativo como -0,67 y el retraso se compensará por completo. Debe hacer esto manualmente cada vez que abra un nuevo archivo. Chris

Lex
fuente
0

De manera similar a la respuesta de Timm, tampoco tenía los perfiles de la respuesta aceptada. Establecer el HSP dio un código de error.

Terminé usando el siguiente script, casi idéntico.

#!/bin/bash
BLUEZCARD=`pactl list cards short | egrep -o bluez.*[[:space:]]`
pactl set-card-profile $BLUEZCARD a2dp_sink
pactl set-card-profile $BLUEZCARD off
pactl set-card-profile $BLUEZCARD a2dp_sink
raahlb
fuente
0

Parece que este problema sigue siendo relevante después de todos esos años.

Basado en la respuesta de Arindam Mani Das y el comentario de Billy Farrington , creé el siguiente script de shell:

#!/bin/bash
export BLUEZCARD=`pactl list cards short | egrep -o bluez.*[[:space:]]`
pactl set-card-profile $BLUEZCARD a2dp_sink
pactl set-port-latency-offset $BLUEZCARD headphone-output 100000

Estoy usando 100000 microsegundos como recomendó Arindam y también funciona bien para mí.

Yakir Magriso
fuente