68 votes

Supprimez la latence de 0,5 s lors de la lecture audio via Bluetooth avec A2DP.

Comme décrit dans le titre, je constate un retard d'une demi-seconde lors de la lecture audio via Bluetooth avec A2DP.
Il est donc impossible de regarder des films, car le son n'est pas synchronisé avec la vidéo.

Je ne sais pas si le délai est dû à la norme Bluetooth, au protocole A2PD, à l'implémentation de A2DP sur Ubuntu 12.04 ou au récepteur Bluetooth Belkin Z73.

Quoi qu'il en soit, est-ce un décalage normal ? Existe-t-il un moyen de diffuser de l'audio via Bluetooth sans latence notable ?

42voto

ish Points 134738

Non, ce n'est pas normal mais j'ai eu un problème similaire de temps en temps avec mes haut-parleurs Bluetooth Altec Lansing iMT525. Un concept similaire à la réponse de Sri fonctionne presque toujours pour moi, et je n'ai besoin de le faire qu'une fois par connexion.

Changement automatique des profils Bluetooth pour réinitialiser PulseAudio

Si vous cherchez un coupable, je regarderais d'abord le système sonore d'Ubuntu, PulseAudio, puis votre récepteur Bluetooth. Essayez ceci :

  • Tout d'abord, supprimez et associez à nouveau votre périphérique Bluetooth.

  • Ensuite, copiez et collez le texte ci-dessous dans un fichier .sh dans votre répertoire personnel, en disant /home/brillout/pabluezswitch.sh :

    #!/bin/bash
    bluezcard=$(pactl list cards short | awk '/bluez/{print $2}')
    pactl set-card-profile "$bluezcard" a2dp
    pactl set-card-profile "$bluezcard" hsp
    pactl set-card-profile "$bluezcard" a2dp
  • Rendez le fichier exécutable en ouvrant un terminal et en tapant chmod +x ~/pabluezswitch.sh

  • Aller à Paramètres... Clavier... Raccourcis... et créez un raccourci personnalisé ; nommez-le comme vous le souhaitez, avec la commande suivante /home/$USER/pabluezswitch.sh (remplacer par le chemin d'accès approprié). Cliquez sur Appliquer puis cliquez sur la droite où il est écrit Handicapés pour configurer un raccourci clavier pour exécuter le script.

Cela oblige le système PulseAudio à resynchroniser l'audio envoyé à vos écouteurs/hauts-parleurs en changeant les profils de l'un à l'autre. ad2p -> hsp -> a2dp en espérant ainsi éliminer toute latence.


Chaque fois que vous vous connectez et que vous remarquez un décalage, vous devez appuyer sur le raccourci clavier choisi ci-dessus pour tenter de résoudre le problème de latence - espérons que cela fonctionne pour vous !

34voto

Roelf Renkema Points 349
  • Installez pavucontrol : sudo apt install pavucontrol
  • Exécuter pavucontrol dans le menu
  • Aller à Périphériques de sortie
  • Sous le périphérique Bluetooth, ouvrez le menu Avancé
    • Vous pouvez y définir le décalage de latence à la valeur en millisecondes (plus ou moins). Pour être sûr de la valeur, vous devez commencer par une valeur quelconque, par exemple 250,00 ms.
    • Lisez n'importe quel "test de synchronisation audio" de YouTube et réglez la vitesse de lecture sur 0,25 (ralentissez-la). À partir de là, vous pouvez commencer à remarquer si la valeur est correcte ou si elle doit être augmentée ou diminuée.

12voto

Cesar Hernandez Points 53

La réponse ci-dessus fonctionne, mais pas pour tous les appareils audio Bluetooth. Certains périphériques ont des noms de profil différents de ceux que l'affiche a avec ses haut-parleurs Bluetooth. Par exemple, dans le code suivant, qui a été posté à l'origine par cette personne, il y a apparemment des profils nommés a2dp y hsp . Aucune de ces fonctions n'est disponible avec mes LG Tones, par exemple, mais elles le sont avec d'autres appareils comme mon casque 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

Ce code fonctionnera pour la plupart des appareils Bluetooth, mais pour que cela fonctionne correctement pour les appareils qui n'ont pas le profil a2dp ou le profil hsp, tapez :

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

Cela renverra tout ce qui se trouve après avoir trouvé un appareil bluetooth. Par exemple, avec l'oreillette LG Tone Ultra, j'obtiens ceci :

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

Nous sommes intéressés par le profiles section. Dans cette section, nous voyons trois profils, qui sont a2dp_sink , headset_head_unit et off . Les deux profils dont nous avons besoin doivent comporter (A2DP Sink) et (HSP/HFP). Dans ce cas, il s'agit de a2dp_sink pour le profil a2dp, et headsethead_unit pour le profil hsp. Remarquez qu'elle est différente de celle de l'affiche originale. a2dp y hsp .

Maintenant, avec le code ci-dessus, nous allons le modifier et le mettre dans un fichier. J'ai appelé le fichier bluezswitch.sh .

Passez dans le répertoire dans lequel vous voulez placer le fichier. Il peut être n'importe où.

touch bluezswitch.sh

Puis

nano bluezswitch.sh

Copiez et collez le code qui se trouve tout en haut de ce commentaire et remplacez la partie a2dp y hsp avec les valeurs que vous avez obtenues lorsque vous avez exécuté la commande ci-dessus, et collez-le dans ce fichier. Par exemple, voici à quoi ressemblait mon fichier pour mes 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

Maintenant, ctrl-x puis y pour enregistrer le fichier et quitter nano, puis rendre le fichier exécutable :

chmod +x bluezswitch.sh

Ensuite, il faut définir un raccourci clavier comme cela a été expliqué.

Allez dans Paramètres... Clavier... Raccourcis, et créez un raccourci personnalisé. raccourci personnalisé ; nommez-le comme vous le souhaitez, avec la commande suivante /home/$USER/bluezswitch.sh (substituez le nom d'utilisateur approprié dans le chemin !). Cliquez sur Appliquer, et ensuite cliquez à droite où il est écrit Désactivé pour configurer un raccourci clavier pour exécuter le script.

Cela devrait être tout ce qu'il y a à faire. Ça devrait marcher pour tous ceux pour qui ça ne marchait pas avant.

12voto

aseques Points 688

Je rencontre occasionnellement le même problème, quel que soit le lecteur utilisé. Le mien est un casque stéréo Bluetooth Nokia BH-503 avec un ordinateur portable MSI CR400 et Ubuntu 11.10. Je suis tombé sur une solution de contournement que vous pouvez essayer.

  • Lancez la lecture de la vidéo.
  • Allez dans Paramètres sonores > Matériel.
  • Sélectionnez le périphérique Bluetooth.
  • Puis, dans la liste déroulante Paramètres de l'appareil sélectionné, passez au profil Duplex téléphonique (HSP/HFP), puis repassez au profil Lecture haute fidélité (A2DP).

10voto

Arindam Mani Das Points 201

J'ai essayé de nombreuses approches de ce problème, mais rien n'a pu le résoudre. Puis je suis tombé sur set-port-latency-offset

Si vous utilisez pulseaudio, faites :

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

Cela vous donnera l'interface bluetooth. Maintenant, réglez la latence en conséquence :

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

J'utilise 100 000 microsecondes, ce qui me convient parfaitement.

SistemesEz.com

SystemesEZ est une communauté de sysadmins où vous pouvez résoudre vos problèmes et vos doutes. Vous pouvez consulter les questions des autres sysadmins, poser vos propres questions ou résoudre celles des autres.

Powered by:

X