Sbarazzati della latenza di 0,5 secondi durante la riproduzione di audio tramite Bluetooth con A2DP


49

Come descritto nel titolo, avverto mezzo secondo di ritardo durante la riproduzione di audio tramite Bluetooth con A2DP.
Ciò rende impossibile la visione di film poiché l'audio non è sincronizzato con il video.

Non sono sicuro che il ritardo sia causato dallo standard Bluetooth, dal protocollo A2PD, dall'implementazione A2DP su Ubuntu 12.04 o dal ricevitore Bluetooth Belkin Z73.

Comunque, è un ritardo normale? Esiste un modo per riprodurre l'audio tramite Bluetooth senza alcuna latenza evidente?


9
Non una vera soluzione al tuo problema, ma una soluzione alternativa: se si tratta solo di riprodurre film, è possibile regolare l'offset audio / video, che ritarderà anche il video. Utilizzando mplayer, lo fai premendo i tasti +e -. In VLC, non so come impostare il ritardo, ma sarei sorpreso se VLC non avesse tale opzione.
leemes

Ci ho pensato ma mi manca una soluzione per YouTube. Quando il video viene riprodotto con HTML5, una soluzione potrebbe essere quella di installare un'estensione del browser che imposta un offset video. Ma per il caso il video viene riprodotto con il flash non sono sicuro di come riuscirci.
Brillout,

Per inciso, l'opzione VLC è disponibile Tools->Track Synchronisationo gioca con l' --audio-desyncopzione. Temo di non essere sicuro di quali siano le unità e quale direzione sia positiva e l'aiuto non è in arrivo sulla questione, ma è lì che vuoi guardare.
Darael,


Hai trovato una soluzione permanente a questo problema? Attualmente sto usando la soluzione per passare da A2DP / HSP / A2DP, ma non è pratico continuare a farlo ogni volta che il problema di sincronizzazione.
Fred Wuerges,

Risposte:


37

No, questo non è normale ma a volte ho riscontrato un problema simile con i miei altoparlanti Bluetooth Altec Lansing iMT525. Qualcosa di simile nel concetto alla risposta di Sri funziona quasi sempre per me, e devo farlo solo una volta per connessione.

Profili Bluetooth a commutazione automatica per reinizializzare PulseAudio

Se stai cercando un colpevole, guarderei prima il sistema audio di Ubuntu, PulseAudio e poi il tuo ricevitore bluetooth. Prova questo:

  • Innanzitutto, elimina e ricollega il tuo dispositivo Bluetooth.

  • Quindi, copia e incolla il seguente in un .shfile nella tua home directory, ad esempio /home/brillout/pabluezswitch.sh:

    #! / Bin / bash
    BLUEZCARD = `short list list pactl | egrep -o bluez. * [[:: space:]] ` pactl set-card-profile $ BLUEZCARD a2dp pactl set-card-profile $ BLUEZCARD hsp pactl set-card-profile $ BLUEZCARD a2dp
  • Rendi eseguibile il file aprendo un terminale e digitando chmod +x ~/pabluezswitch.sh

  • Vai su Impostazioni ... Tastiera ... Collegamenti e crea un collegamento personalizzato; chiamalo come preferisci, con il comando come /home/brillout/pabluezswitch.sh(sostituisci il nome utente appropriato nel percorso!). Fai clic su Applica , quindi fai clic sulla destra dove dice Disabilitato per impostare una scorciatoia da tastiera per eseguire lo script.

Quello che fa è forzare il sistema PulseAudio a risincronizzare l'audio inviato alle cuffie / agli altoparlanti cambiando i profili da ad2p -> hsp -> a2dp, sperando quindi di sbarazzarsi di qualsiasi latenza.


Ogni volta che ti connetti e noti il ​​ritardo, dovresti premere la scorciatoia da tastiera scelta sopra per tentare di correggere la latenza - speriamo che funzioni per te!


Lo sto usando da un paio di giorni e funziona benissimo. - 14.04
dpb

7
Si noti che pactl ha messaggi di errore terribili e che molte apparecchiature audio non hanno questi ad2pe hsp. Il mio Bose ha solo ad2p_sink, non questi altri due.
odinho - Velmont,

1
Penso che tu abbia bisogno di citazioni attorno a quel modello egrep
nought101

1
Suppongo che non ci sia un modo per monitorare la latenza e attivare automaticamente questo script quando supera una soglia sopra il riferimento? pacmd info | grep "current latency"e pacmd statsembrano fornire gli stessi numeri di latenza / dimensioni del buffer, non importa quanto cresca la latenza effettiva (ad esempio quando si toglie l'auricolare dal range e lo si riporta indietro), quindi forse una parte diversa dello stack è responsabile della latenza?
Ponkadoodle,

2
@ odinho-Velmont alternando ad2p_sinke offfunziona per me. Di recente l'ho aggiunto al mio script Pulse di controllo audio / volume che potrebbe essere utile a qualcuno
Sam Mason

21
  • Installa pavucontrol: sudo apt install pavucontrol
  • Esegui pavucontroldal menu
  • Vai a Dispositivi di output
  • Vai al dispositivo Bluetooth
  • Vai su Avanzate
  • Lì puoi impostare l'offset di latenza sul valore in millisecondi (più o meno). Per assicurarsi del valore è necessario iniziare con qualsiasi valore, ad esempio 250,00 mi.
  • Riproduci qualsiasi "test di sincronizzazione audio" da YouTube e imposta la velocità di riproduzione su 0,25 (rendila più lenta) e da lì puoi iniziare a notare se il valore è corretto o deve essere aumentato o diminuito.

2
Rimosso il superfluo inutile dalla risposta: non è necessario essere scortesi. Inoltre, sembra che dovrebbe funzionare, ma in realtà non sembra fare nulla per me ...
nought101

Per me questo ha funzionato per la riproduzione su YouTube con altoparlanti bluetooth. Grazie. Quando ho aperto pavucontrol per la prima volta, l'opzione avanzata era nascosta. Ho dovuto espandere verticalmente la finestra.
user75505

11

Ottengo problemi simili occasionalmente, indipendentemente dal giocatore utilizzato. La mia è una cuffia stereo Bluetooth Nokia BH-503 con laptop MSI CR400 e Ubuntu 11.10. Mi è capitato di imbattermi in una soluzione alternativa che puoi provare.

  • Inizia la riproduzione del video.
  • Vai su Impostazioni audio> Hardware.
  • Seleziona il dispositivo Bluetooth.
  • Quindi, in Impostazioni per il menu a discesa Dispositivo selezionato, passare al profilo Telefonia duplex (HSP / HFP), quindi tornare alla riproduzione ad alta fedeltà (A2DP).

7

La risposta in alto qui funziona, ma non per tutti i dispositivi audio bluetooth. Alcuni dispositivi hanno nomi di profilo diversi rispetto a quelli di quel poster con i suoi altoparlanti bluetooth. Ad esempio, nel seguente codice, originariamente pubblicato da quella persona, apparentemente ha profili nominati a2dpe hsp. Nessuno di questi è disponibile con i miei toni LG, ad esempio, ma lo sono con altri dispositivi come il mio auricolare 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

Questo codice funzionerà per la maggior parte dei dispositivi bluetooth che sembra, ma per farlo funzionare correttamente per quei dispositivi che non hanno il profilo a2dp o il profilo hsp, digitare:

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

Questo restituirà tutto dopo dove trova un dispositivo bluetooth. Ad esempio, con l'auricolare LG Tone Ultra, ottengo questo:

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

Siamo interessati alla profilessezione. In questa sezione, vediamo tre profili, che sono a2dp_sink, headset_head_unite off. I due profili di cui abbiamo bisogno dovrebbero avere in loro (lavello A2DP) e (HSP / HFP). In questo caso, sono a2dp_sinkper il profilo a2dp e headsethead_unitper il profilo hsp. Si noti che questo è diverso da quello del poster originale a2dpe hsp.

Ora, con il codice sopra, lo modificheremo e lo inseriremo in un file. Ho chiamato il file bluezswitch.sh.

Passare alla directory in cui si desidera inserire il file. Può essere ovunque.

touch bluezswitch.sh

Poi

nano bluezswitch.sh

Copia e incolla il codice nella parte superiore di questo commento e sostituisci a2dpe hspcon i valori che hai ottenuto quando hai eseguito il comando sopra e incollalo in quel file. Ad esempio, questo è l'aspetto del mio file per i miei toni 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

Ora, ctrl-xquindi yper salvare il file ed uscire da nano, quindi rendere eseguibile il file:

chmod +x bluezswitch.sh

Quindi follow-up impostando una scorciatoia da tastiera come è stato spiegato.

Vai su Impostazioni ... Tastiera ... Collegamenti e crea un collegamento personalizzato; chiamalo come preferisci, con il comando come /home/brillout/bluezswitch.sh (sostituisci il nome utente appropriato nel percorso!). Fai clic su Applica, quindi fai clic sulla destra dove dice Disabilitato per impostare una scorciatoia da tastiera per eseguire lo script.

Questo dovrebbe essere tutto ciò che c'è da fare. Questo dovrebbe funzionare per tutti quelli per cui non ha funzionato prima.


1
Per me, lo spegnimento a2dp_sink, off, a2dp_sinkin opere di sequenza molto bene per me. Impostazione su headset_head_uniterrore I / O.
Mohd Shahril,

5

La modulazione adattiva del codice di impulsi differenziali implica un algoritmo di compressione di tipo look-ahead in cui le informazioni non possono essere trasmesse prima che l'encoder abbia avuto la possibilità di esaminare diversi byte di informazioni imminenti. Quindi, i dati devono accumularsi nell'encoder e c'è uno spostamento temporale intrinseco tra i flussi che entrano e escono dall'encoder. Molto tempo fa, ho studiato i ritardi della rete di dati per determinare la fattibilità della telefonia voice over data (che ora è il VoIP). Penso di aver concluso che la compressione / codifica in stile ADPCM avrebbe introdotto troppi ritardi. Penso che per superare questo problema di ritardo Bluetooth, potrebbe essere necessario un tipo di codifica audio non comprimente che dovrebbe avere una latenza inferiore.


6
Il problema della compressione spiegherebbe alcune decine di millisecondi, non mezzo secondo, sicuramente?
naught101

4

Ho provato molti approcci a questo problema, ma nulla poteva risolverlo. Poi mi sono imbattuto in set-port-latency-offset

Se stai usando pulseaudio fai:

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

Questo ti darà l'interfaccia bluetooth. Ora imposta la latenza di conseguenza:

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

Sto usando 100000 microsecondi che funziona bene per me.


1
Per chiunque altro si imbattesse in questo vecchio post alla ricerca di una risposta, la risposta di Arindam Mani Das funziona perfettamente. Se ricevi l'errore "nessuna entità del genere", esegui "schede elenco pactl" e verifica quali porte sono disponibili per il tuo dispositivo. Ho dovuto cambiare "uscita altoparlanti" in "uscita cuffie" nel secondo comando poiché il mio dispositivo non ha una porta di uscita altoparlanti.
Billy Farrington,

1

Ecco cosa mi ha risolto: $ sudo apt-get install phonon-backend-vlce assicurati che sia il backend preferito, in KDE vai su [Impostazioni di sistema] [Multimedia] [Impostazioni audio e video] [Backend] e usa il [pulsante Prefer]]


1
@dargaud Raccomando di espandere questo per spiegare come renderlo il backend preferito.
Eliah Kagan,

0

persone che hanno questo problema Si prega di consultare questo sito Web: http://projectzeorymer.wordpress.com/2011/09/01/ubuntu-how-to-connect-nokia-bh-503-bluetooth-headset-to-your-pc / per vedere una foto di ciò che è necessario scaricare.

Scarica il gestore bluetooth e usalo per manipolare le impostazioni dell'auricolare. Impostare le impostazioni audio su Riproduzione ad alta fedeltà (A2DP), quindi selezionare Impostazioni audio.


1
Vai su Bluetooth gestisci e vai su Profilo audio, quindi seleziona Riproduzione ad alta fedeltà .. questo è tutto
Alex Force

0

Su VLC media player, vai a Strumenti Sincronizzazione traccia Scheda Sincronizza Sotto sincronizzazione traccia audio / video audio, usa un valore negativo come circa -0.67 e il ritardo sarà completamente compensato. Devi farlo manualmente ogni volta che apri un nuovo file. Chris


0

Analogamente alla risposta di Timm, non avevo nemmeno i profili della risposta accettata. L'impostazione dell'HSP ha fornito un codice di errore.

Ho finito per usare la seguente sceneggiatura, quasi identica.

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

Sembra che questo problema sia ancora rilevante dopo tutti quegli anni.

Sulla base della risposta di Arindam Mani Das e del commento di Billy Farrington , ho creato il seguente script 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

Sto usando 100000 microsecondi come Arindam ha raccomandato e funziona anche bene per me.

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.