web-dev-qa-db-fra.com

Éliminez le temps de latence de 0,5 secondes lors de la lecture audio via Bluetooth avec A2DP

Comme décrit dans le titre, la lecture de l’audio via Bluetooth avec A2DP a un retard d’une demi-seconde.
Cela rend la visualisation de films impossible car le son n'est pas synchronisé avec la vidéo.

Je ne sais pas si le retard est causé par le standard Bluetooth, le protocole A2PD, l'implémentation A2DP sur Ubuntu 12.04 ou le récepteur Bluetooth Belkin Z73.

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

45
brillout

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

Basculement automatique des profils Bluetooth pour réinitialiser PulseAudio

Si vous êtes à la recherche d'un coupable, jetez un coup d'œil au système audio d'Ubuntu, PulseAudio, puis à votre récepteur Bluetooth. Essaye ça:

  • Commencez par supprimer et réassocier votre périphérique Bluetooth.

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

     #!/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- fiche-profil $ BLUEZCARD a2dp
  • Rendre le fichier exécutable en ouvrant un terminal et en tapant chmod +x ~/pabluezswitch.sh

  • Allez à Paramètres ... Clavier ... Raccourcis et créez un raccourci personnalisé. nommez-le comme vous voulez, avec la commande /home/brillout/pabluezswitch.sh (remplacez le nom d'utilisateur approprié dans le chemin!). Cliquez sur Appliquer, puis cliquez à droite où il est indiqué Désactivé pour configurer un raccourci clavier pour exécuter le script.

Cela force le système PulseAudio à resynchroniser le son envoyé à votre casque/haut-parleurs en commutant les profils de ad2p -> hsp -> a2dp, éliminant ainsi, espérons-le, toute latence.


Chaque fois que vous vous connectez et remarquez le décalage, vous devez appuyer sur le raccourci clavier choisi ci-dessus pour tenter de régler le temps de latence. Espérons que cela fonctionne pour vous!

36
ish

Dans pavucontrol, je vais dans l'onglet du périphérique de sortie, puis choisissez l'option advanced sous le périphérique Bluetooth. Là, vous pouvez définir le décalage de latence à 600 ms. Problème résolu.

19
Roelf Renkema

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

  • Lancer la lecture vidéo.
  • Allez dans Paramètres son> Matériel.
  • Sélectionnez le périphérique Bluetooth.
  • Puis, dans la liste déroulante Paramètres du périphérique sélectionné, basculez vers le profil Duplex téléphonique (HSP/HFP), puis revenez à la lecture haute fidélité (A2DP).
9
Sri

La première réponse fonctionne ici, mais pas pour tous les périphériques audio Bluetooth. Certains appareils ont des noms de profil différents de ceux de cette affiche avec ses haut-parleurs Bluetooth. Par exemple, dans le code suivant, qui a été publié à l'origine par cette personne, il y a apparemment des profils nommés a2dp et hsp. Par exemple, ni l'un ni l'autre n'est disponible avec mes LG Tones, mais 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 périphériques Bluetooth, semble-t-il, mais pour que cela fonctionne correctement pour les périphériques qui ne possèdent 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 périphérique Bluetooth. Par exemple, avec le casque LG Tone Ultra, je reçois 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 la section profiles. Dans cette section, nous voyons trois profils, qui sont a2dp_sink, headset_head_unit et off. Les deux profils dont nous avons besoin devraient avoir en eux (dissipateur A2DP) et (HSP/HFP). Dans ce cas, il s'agit de a2dp_sink pour le profil a2dp et de headsethead_unit pour le profil hsp. Notez que cela diffère des a2dp et hsp de l’affiche originale.

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

Accédez au répertoire dans lequel vous souhaitez placer le fichier. Cela peut être n'importe où.

touch bluezswitch.sh

Ensuite

nano bluezswitch.sh

Copiez et collez le code tout en haut de ce commentaire et remplacez les a2dp et hsp par les valeurs que vous avez obtenues lorsque vous avez exécuté la commande ci-dessus, puis collez-le dans ce fichier. Par exemple, voici à quoi ressemblait mon fichier pour mes tonalités LG.

#!/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

Continuez ensuite en définissant un raccourci clavier, comme cela a été expliqué.

Accédez à Paramètres ... Clavier ... Raccourcis et créez un raccourci personnalisé. nommez-le comme vous voulez, avec la commande /home/brillout/bluezswitch.sh (remplacez le nom d'utilisateur approprié par path!). Cliquez sur Appliquer, puis sur le côté droit où il est indiqué Désactivé pour configurer un raccourci clavier pour exécuter le script.

Cela devrait être tout ce qu'il y a à faire. Cela devrait fonctionner pour tous ceux pour qui cela n'avait pas fonctionné auparavant.

7
Timm Simpkins

La modulation de code d'impulsion différentielle adaptative fait appel à un algorithme de compression de type recherche dans laquelle les informations ne peuvent pas être transmises avant que le codeur ait eu l'occasion d'examiner plusieurs octets d'informations à venir. Par conséquent, les données doivent s'empiler dans le codeur et il existe un décalage temporel inhérent entre les flux entrant et sortant du codeur. Il y a longtemps, j'ai mené une étude sur les retards des réseaux de données afin de déterminer la faisabilité de la téléphonie voix sur données (l'actuelle VoIP). Je pense avoir conclu que la compression/encodage de type ADPCM introduirait trop de retard. Je pense que pour surmonter ce problème de délai Bluetooth, il peut être nécessaire d’avoir un type de codage audio non compressif qui devrait avoir une latence plus faible.

5
Kirk Shrewsbury

J'ai essayé beaucoup d'approches à ce problème, mais rien ne pouvait 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.

4
Arindam Mani Das

Voici ce qui a résolu le problème pour moi: $ Sudo apt-get install phonon-backend-vlc et assurez-vous qu'il s'agit du backend préféré. Dans KDE, accédez à [Paramètres système] [Multimédia] [Paramètres audio et vidéo] [Backend] et utilisez le bouton [Préférences].

1
dargaud

Comme pour la réponse de Timm, je n'avais pas non plus les profils de la réponse acceptée. Le paramétrage du HSP a généré un code d'erreur.

J'ai fini par utiliser le script suivant, presque identique.

#!/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
0
raahlb

Sur le lecteur multimédia VLC, allez dans Outils Synchroniser les pistes Onglet Synchroniser Sous Synchroniser les pistes audio audio/vidéo, utilisez une valeur négative telle que environ -0,67 et le décalage sera totalement compensé. Vous devez le faire manuellement chaque fois que vous ouvrez un nouveau fichier. Chris

0
Lex

personnes rencontrant ce problème Veuillez consulter ce site Web: http://projectzeorymer.wordpress.com/2011/09/01/ubuntu-how-to-connect-nokia-bh-503-bluetooth-headset-to -votre-pc / pour voir une photo de ce que vous devez télécharger.

Téléchargez le gestionnaire Bluetooth et utilisez-le pour manipuler les paramètres du casque. Définissez les paramètres audio sur Lecture haute fidélité (A2DP), puis entrez dans les paramètres audio.

0
Alex Force