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

49

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

Je ne sais pas si le retard est dû au standard Bluetooth, au protocole A2PD, à la mise en œuvre 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 lire de l'audio via Bluetooth sans latence notable?

génial
la source
9
Pas une solution réelle à votre problème, mais une solution de contournement: s'il ne s'agit que de lire des films, vous pouvez régler le décalage audio / vidéo, ce qui retardera également la vidéo. En utilisant mplayer, vous le faites en appuyant sur les touches +et -. Dans VLC, je ne sais pas comment définir le délai, mais je serais surpris que VLC ne dispose pas d'une telle option.
leemes
J'y ai pensé mais il me manque une solution pour YouTube. Lorsque la vidéo est lue avec HTML5, une solution peut consister à installer une extension de navigateur permettant de définir un décalage vidéo. Mais dans le cas où la vidéo est lue au flash, je ne sais pas comment y parvenir.
brillout
Incidemment, l'option VLC est à Tools->Track Synchronisation, ou jouer avec l' --audio-desyncoption. J'ai bien peur de ne pas savoir exactement quelles unités sont, ni quelle direction est positive, et l'aide ne sera pas fournie, mais c'est là que vous voulez regarder.
Darael
Avez-vous trouvé une solution permanente à ce problème? J'utilise actuellement la solution pour basculer entre les modes A2DP / HSP / A2DP, mais il n'est pas pratique de le faire à chaque fois que le problème de synchronisation se produit.
Fred Wuerges

Réponses:

37

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 cherchez un coupable, jetez un coup d'œil au système sonore 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 .shfichier de votre répertoire personnel, par exemple /home/brillout/pabluezswitch.sh:

    #! / bin / bash
    BLUEZCARD = `pactl list card short | egrep -o bluez. * [[: space:]] ` pactl set-card-profile $ BLUEZCARD a2dp pactl set-card-profile $ BLUEZCARD hsp pactl set-card-profile $ BLUEZCARD a2dp
  • Rendre le fichier exécutable en ouvrant un terminal et en tapant chmod +x ~/pabluezswitch.sh

  • Accédez à Paramètres ... Clavier ... Raccourcis et créez un raccourci personnalisé. nommez-le comme vous voulez, avec la commande as /home/brillout/pabluezswitch.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 force le système PulseAudio à resynchroniser le son envoyé à votre casque / haut-parleur en changeant de profil ad2p -> hsp -> a2dp, ce qui permet de supprimer 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!

ish
la source
Je l'utilise depuis quelques jours maintenant et cela fonctionne très bien. - 14.04
dpb
7
Notez que pactl a de terribles messages d'erreur, et que de nombreux équipements audio ne les avez pas ad2pet hsp. Mon Bose a seulement ad2p_sink, pas ces deux autres.
Commentaires
1
Je pense que vous avez besoin de citations autour de ce motif
egrep
1
Je ne suppose pas qu'il existe un moyen de surveiller la latence et de déclencher ce script automatiquement lorsqu'il dépasse un seuil supérieur à la référence? pacmd info | grep "current latency"et pacmd statsemblent donner le même nombre de latences / la même taille de mémoire tampon, quelle que soit l’augmentation de la latence réelle (par exemple, lorsque le casque sort de la portée et le ramène), une partie différente de la pile est-elle donc responsable de la latence?
Ponkadoodle
2
@ odinho-Velmont bascule entre ad2p_sinket offtravaille pour moi. J'ai récemment ajouté ceci à mon script de contrôle du volume et de l'audio Pulse qui pourrait être utile à quelqu'un
Sam Mason
21
  • Installez pavucontrol: sudo apt install pavucontrol
  • Exécuter pavucontroldepuis le menu
  • Aller aux périphériques de sortie
  • Aller au périphérique Bluetooth
  • Aller à avancé
  • Là, vous pouvez définir le décalage de latence sur la valeur en millisecondes (plus ou moins). Pour vous assurer de la valeur, vous devez commencer par n'importe quelle valeur, par exemple 250,00 mi.
  • Lisez n'importe quel "test de synchronisation audio" de YouTube et réglez la vitesse de lecture sur 0,25 (ralentissez-le). À partir de là, vous pourrez voir si la valeur est correcte ou s'il faut l'augmenter ou la diminuer.
Roelf Renkema
la source
2
Supprimé sass inutile de réponse - pas besoin d'être grossier. De plus, cela semble fonctionner, mais cela ne semble vraiment rien faire pour moi ...
naught101
Pour moi, cela a fonctionné pour la lecture de youtube avec des haut-parleurs Bluetooth. Merci. Lorsque j'ai ouvert Pavucontrol pour la première fois, l'option avancée était masquée. A dû élargir verticalement la fenêtre.
user75505
11

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).
Sri
la source
7

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 semble que ses profils soient nommés a2dpet hsp. Par exemple, aucun de ceux-ci 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 profilessection. Dans cette section, nous voyons trois profils, qui sont a2dp_sink, headset_head_unitet off. Les deux profils dont nous avons besoin devraient avoir en eux (dissipateur A2DP) et (HSP / HFP). Dans ce cas, ils sont a2dp_sinkpour le profil a2dp et headsethead_unitpour le profil hsp. Notez que ceci est différent de celui de l’affiche originale a2dpet hsp.

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 au sommet de ce commentaire et remplacer le a2dpet hsples valeurs que vous obtenu quand 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-xpuis ypour 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 à droite à droite de la mention Désactivé pour configurer un raccourci clavier permettant d'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.

Timm Simpkins
la source
1
Pour moi, éteindre a2dp_sink, off, a2dp_sinkdans des œuvres de séquence très bien pour moi. Réglage sur headset_head_uniterreur E / S.
Mohd Shahril
5

La modulation de code à impulsions 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 étudié 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’utiliser un codage audio de type non compressif qui doit présenter une latence plus faible.

Kirk Shrewsbury
la source
6
Le problème de compression représenterait quelques dizaines de millisecondes, pas une demi-seconde, sûrement?
naught101
4

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.

Arindam Mani Das
la source
1
Pour ceux qui tombent sur ce vieil article à la recherche d'une réponse, la réponse d'Arindam Mani Das fonctionne parfaitement. Si vous recevez l'erreur "aucune entité de ce type", exécutez "pactl list cards" et vérifiez quels ports sont disponibles pour votre appareil. J'ai dû changer "sortie haut-parleur" en "sortie casque" dans la deuxième commande, car mon appareil ne dispose pas de port de sortie haut-parleur.
Billy Farrington
1

Voici ce qui a résolu le problème pour moi: $ sudo apt-get install phonon-backend-vlcet assurez-vous que c'est le backend préféré. Dans KDE, allez dans [Paramètres système] [Multimédia] [Réglages audio et vidéo] [Backend] et utilisez le bouton [Préfecture].

Dargaud
la source
1
@dargaud Je recommande de développer cela pour expliquer comment en faire le moteur préféré.
Eliah Kagan
0

les personnes qui ont ce problème S'il vous plaît consulter ce site Web: http://projectzeorymer.wordpress.com/2011/09/01/ubuntu-how-to-connect-nokia-bh-503-bluetooth-headset-to-your-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.

Alex Force
la source
1
Allez sur bluetooth gérer et allez dans Profil Audio puis sélectionnez Lecture à haute vitesse .. ça y est
Alex Force
0

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

Lex
la source
0

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
Raahlb
la source
0

On dirait que cette question est toujours d'actualité après toutes ces années.

Basé sur la réponse de Arindam Mani Das et le commentaire de Billy Farrington , j'ai créé le script shell suivant:

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

J'utilise 100 000 microsecondes comme Arindam le recommande et cela fonctionne également très bien pour moi.

Yakir Magriso
la source