A2DP ile Bluetooth üzerinden ses çalarken 0,5 saniyelik gecikmeden kurtulun


49

Başlıkta açıklandığı gibi, A2DP ile Bluetooth üzerinden ses çalarken yarım saniye gecikme yaşıyorum.
Bu, ses video ile senkronize edilmediğinden film izlemenin mümkün olmamasını sağlar.

Gecikmenin Bluetooth standardı, A2PD protokolü, Ubuntu 12.04'teki A2DP uygulaması veya Belkin Z73 Bluetooth Alıcısı nedeniyle olup olmadığından emin değilim.

Herneyse, bu normal bir gecikme mi? Gözle görülür bir gecikme olmadan Bluetooth üzerinden ses çalmanın bir yolu var mı?


9
Sorununuza gerçek bir çözüm değil, geçici bir çözüm: Yalnızca film oynatmakla ilgiliyse, videoyu geciktirecek olan ses / video ofsetini de ayarlayabilirsiniz. Kullanarak mplayer, +ve -tuşlarına basarak bunu yaparsınız . VLC'de gecikmeyi nasıl ayarlayacağımı bilmiyorum, ancak VLC'nin böyle bir seçeneği yoksa şaşırırdım.
leemes

Bunu düşündüm ama YouTube için bir özüm yok. Video HTML5 ile oynatıldığında, çözüm bir video ofsetini ayarlayan bir tarayıcı uzantısı yüklemek olabilir. Ancak videonun flaşla oynatılması durumunda, bunu nasıl başaracağımı bilmiyorum.
brillout

Bu arada, VLC seçeneği de opsiyondadır Tools->Track Synchronisationya da bu --audio-desyncseçenek ile oynanır. Korkarım birimlerin ne olduğundan ve hangi yönün olumlu olduğundan emin değilim ve bu konuda yardım gelmiyor, ama orası bakmak istediğiniz yer.
Darael,


Bu soruna kalıcı bir çözüm buldunuz mu? Şu anda A2DP / HSP / A2DP arasında geçiş yapmak için çözümü kullanıyorum, ancak senkronizasyon probleminin her seferinde bunu yapmak pratik değil.
Fred Wuerges

Yanıtlar:


37

Hayır, bu normal değil, ancak Altec Lansing iMT525 Bluetooth Hoparlörlerimde de benzer bir sorunla karşılaştım. Konseptte Sri'nin cevabına benzer bir şey neredeyse her zaman benim için işe yarıyor ve bunu bağlantı başına sadece bir kez yapmam gerekiyor.

PulseAudio'yu yeniden başlatmak için Bluetooth profillerini otomatik değiştirme

Bir suçlu arıyorsanız, önce Ubuntu'nun ses sistemine, önce PulseAudio'ya, sonra da bluetooth alıcınıza bakardım. Bunu dene:

  • İlk önce, Bluetooth cihazınızı silin ve yeniden eşleştirin.

  • Sonra, kopyalayıp bir içine aşağıya yapıştırın .shev dizinindeki dosyaya derler /home/brillout/pabluezswitch.sh:

    #! / Bin / bash
    BLUEZCARD = `pactl liste kartları kısa | egrep -o bluez. * [[: space:]] ` pactl set kartı profili $ BLUEZCARD a2dp pactl set-kart profili $ BLUEZCARD hsp pactl set kartı profili $ BLUEZCARD a2dp
  • Bir terminal açıp yazarak dosyayı çalıştırılabilir hale getirin chmod +x ~/pabluezswitch.sh

  • Git Ayarlar ... Klavye ... Kısayollar ve özel bir kısayol oluşturmak; ne istersen onu isimlendir ve komutunu ver /home/brillout/pabluezswitch.sh(yoluna uygun kullanıcı adını kullan!). Uygula'yı tıklayın ve ardından betiği çalıştırmak için bir klavye kısayolu ayarlamak için Devre Dışı yazanların bulunduğu sağa tıklayın .

Bu, PulseAudio sistemini, profilleri değiştirerek kulaklığınıza / hoparlörlerinize gönderilen sesi yeniden senkronize etmeye zorlar ad2p -> hsp -> a2dp, böylece umarım herhangi bir gecikmeden kurtulursunuz.


Bağlanıp gecikmeyi fark ettiğinizde, gecikmeyi düzeltmek için yukarıda seçilen klavye kısayoluna basmalısınız - umarım sizin için işe yarar!


Bunu birkaç gündür kullanıyorum ve harika çalışıyor. -
14.04

7
Pactl'nin korkunç hata mesajları olduğunu ve birçok ses cihazında bu ad2pve bulunmadığını unutmayın hsp. Bose'm sadece ad2p_sinkbu ikisi değil.
odinho - Velmont

1
Ben bu egrep modeli etrafında tırnak ihtiyacınız olduğunu düşünüyorum
naught101

1
Gecikmeyi izlemenin ve bu betiği referansın üstünde bir eşiği aştığında otomatik olarak tetiklemenin bir yolu olduğunu sanmıyorum? pacmd info | grep "current latency"ve pacmd statgerçek gecikme süresi ne kadar büyük olursa olsun (örneğin, kulaklıklı mikrofon setini kapsama alanı dışına çıkarıp geri getirirken) aynı gecikme sayıları / arabellek boyutunu veriyor gibi görünüyor;
Ponkadoodle

2
@ odinho-Velmont arasında geçiş yapıyor ad2p_sinkve offbenim için çalışıyor. Geçenlerde bunu , birileri için yardımcı olabilecek Pulse ses / ses kontrol komut
Sam Mason

21
  • Pavucontrol yükleyin: sudo apt install pavucontrol
  • pavucontrolMenüden çalıştır
  • Çıkış Aygıtlarına Git
  • Bluetooth cihazına git
  • Gelişmiş'e Git
  • Burada gecikme ofsetini milisaniye cinsinden (artı veya eksi) değerine ayarlayabilirsiniz. Değerden emin olmak için herhangi bir değerle başlamanız gerekir, örneğin, 250.00 mil.
  • Herhangi bir "ses senkronizasyonu testini" YouTube'dan oynatın ve oynatma hızını 0,25'e (daha yavaş yapın) ayarlayın; oradan değerin doğru olup olmadığını veya arttırılması veya azaltılması gerektiğini fark etmeye başlayabilirsiniz.

2
Gereksiz sass cevaptan kaldırıldı - kaba olmaya gerek yok. Ayrıca, bu çalışması gerektiği gibi geliyor, ama aslında benim için bir şey yapmıyor gibi görünüyor ...
naught101

Benim için bu bluetooth hoparlörler ile youtube çalma için çalıştı. Teşekkürler. Pavucontrol'ü ilk açtığımda gelişmiş seçenek gizlendi. Pencereyi dikey olarak genişletmek zorunda kaldım.
user75505,

11

Kullanılan oyuncudan bağımsız olarak bazen de benzer bir sorunla karşılaşıyorum. Mine, MSI CR400 dizüstü bilgisayar ve Ubuntu 11.10 ile Nokia BH-503 Bluetooth Stereo Kulaklıktır. Deneyebileceğin bir çözüm buldum.

  • Video oynatmayı başlatın.
  • Ses Ayarları> Donanım'a gidin.
  • Bluetooth cihazını seçin.
  • Ardından, Seçilen Aygıt Ayarları açılır menüsünde, Telefon Dubleks (HSP / HFP) profiline geçin, ardından Yüksek Kaliteli Oynatma'ya (A2DP) geri dönün.

7

Buradaki en iyi cevap işe yarıyor ama her bluetooth ses cihazı için değil. Bazı cihazlar, bu posterin bluetooth hoparlörü ile sahip olduklarından farklı profil adlarına sahiptir. Örneğin, orijinal olarak o kişi tarafından gönderilen aşağıdaki kodda, görünüşe göre a2dpve hsp. Bunların hiçbiri, örneğin LG Tonlarımda mevcut değil, ancak Sony kulaklığım gibi diğer cihazlarda bulunuyor.

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

Bu kod göründüğü bluetooth cihazlarının çoğunda işe yarar, ancak a2dp profili veya hsp profili olmayan cihazlarda bunun doğru şekilde çalışmasını sağlamak için şunu yazın:

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

Bu, bir bluetooth cihazını bulduğu yerden sonra her şeyi döndürür. Mesela, LG Tone Ultra kulaklıkla şunu anlıyorum:

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

Bu profilesbölümle ilgileniyoruz . Bu bölümde, üç profillerini görmek a2dp_sink, headset_head_unitve off. İhtiyacımız olan iki profilin içinde (A2DP Evye) ve (HSP / HFP) olmalı. Bu durumda a2dp_sinka2dp profili ve headsethead_unithsp profili içindir. Bu orijinal afiş en farklı olması dikkat a2dpve hsp.

Şimdi yukarıdaki kodla değiştireceğiz ve bir dosyaya koyacağız. Dosyayı aradım bluezswitch.sh.

Dosyayı koymak istediğiniz dizine geçin. Her yerde olabilir.

touch bluezswitch.sh

Sonra

nano bluezswitch.sh

Bu yorumun en üstündeki kodu kopyalayıp yapıştırın ve yukarıdaki komutu çalıştırdığınızda aldığınız değerlerle değiştirin a2dpve hspbu dosyaya yapıştırın. Örneğin, dosyam LG Tonlarım için böyle görünüyordu.

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

Şimdi, ctrl-xdaha sonra ydosya ve çıkış nano kaydetmek ve sonra dosyayı çalıştırılabilir yapın:

chmod +x bluezswitch.sh

Sonra açıklandığı gibi bir klavye kısayolu ayarlayarak takip edin.

Ayarlar ... Klavye ... Kısayollar'a gidin ve özel bir kısayol oluşturun; /home/brillout/bluezswitch.sh komutunu kullanarak istediğiniz şekilde adlandırın (yolunda uygun kullanıcı adını kullanın!). Uygula'yı tıklayın ve ardından betiği çalıştırmak için bir klavye kısayolu ayarlamak için Devre Dışı yazanların bulunduğu sağa tıklayın.

Hepsi bu kadar olmalı. Bu daha önce çalışmadığı herkes için işe yaramalı.


1
Benim için kapatarak a2dp_sink, off, a2dp_sinkdizi benim için çok iyi çalışıyor içinde. headset_head_unitG / Ç hatasının ayarlanması .
Mohd Shahril

5

Uyarlanabilir diferansiyel puls kodu modülasyonu, kodlayıcı gelecek bilginin birkaç baytını inceleme şansına sahip olmadan önce bilgilerin iletilemediği ileriye dönük bir tip sıkıştırma algoritmasını içerir. Bu nedenle, verilerin kodlayıcıda birikmesi gerekir ve kodlayıcıya giren ve çıkan akışlar arasında doğal bir zaman kayması vardır. Uzun zaman önce, veri üzerinden ses telefonunun uygulanabilirliğini belirlemek için veri ağı gecikmeleri üzerine bir araştırma yaptım (şimdi VoIP nedir). ADPCM tarzı sıkıştırma / kodlamanın çok fazla gecikme sağlayacağı sonucuna vardım. Bluetooth gecikme sorununun üstesinden gelmeyi düşünüyorum, gecikme süresi düşük olan, sıkıştırılmayacak türde bir ses kodlaması gerekebilir.


6
Sıkıştırma problemi, kesinlikle yarım saniye değil, birkaç milisaniyeden sorumlu olacak.
naught101

4

Bu soruna birçok yaklaşım denedim, ancak hiçbir şey sorunu çözemedi. Sonra set-port-gecikme-dengeleme üzerine tökezledi

Pulseaudio kullanıyorsanız:

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

Bu size bluetooth arayüzünü verecektir. Şimdi gecikmeyi buna göre ayarlayın:

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

Benim için iyi çalışan 100000 mikrosaniye kullanıyorum.


1
Arindam Mani Das'ın cevabı, mükemmel bir cevap arayışı içinde olan bu eski yazı boyunca tökezleyen herhangi biri için mükemmel bir şekilde çalışıyor. "Böyle bir varlık yok" hatasını alırsanız, "pactl list cards" komutunu çalıştırın ve cihazınız için hangi bağlantı noktalarının kullanılabilir olduğunu kontrol edin. Cihazımın hoparlör çıkış portu olmadığından, ikinci komutta "hoparlör çıkışı" nı "kulaklık çıkışı" olarak değiştirmek zorunda kaldım.
Billy Farrington

1

İşte benim için çözdüğüm şey: $ sudo apt-get install phonon-backend-vlcve bunun tercih edilen arka uç olduğundan emin olun, KDE'de [Sistem Ayarları] [Multimedya] [Ses ve video ayarları] [Arka uç] bölümüne gidin ve [Tercih düğmesini] kullanın


1
@dargaud Tercih edilen arka uç nasıl yapılacağını açıklamak için bunu genişletmenizi tavsiye ederim.
Eliah Kagan

0

Bu sorunu yaşayan kişiler Lütfen bu web sitesini ziyaret edin: http://projectzeorymer.wordpress.com/2011/09/01/ubuntu-how-to-connect-nokia-bh-503-bluetooth-headset-to-your-pc / indirmek için gerekenleri bir pic görmek için.

Bluetooth yöneticisini indirin ve kulaklığın ayarlarını değiştirmek için kullanın. Ses ayarlarını High Fidelity Playback (A2DP) olarak ayarlayın ve sonra ses ayarlarına girin.


1
Thats .. yönetmek ve Ses Profilinize gidin bluetooth gidin ve ardından Yüksek Fedelity Oynatma seçin
Alex Gücü

0

VLC media player'da, Araçlar İzi senkronizasyonuna git Senkronize et sekmesi Ses / video ses parçası senkronizasyonunda, -0.67 gibi bir negatif değer kullanın; gecikme tam olarak telafi edilir. Bunu her yeni dosya açtığınızda manuel olarak yapmanız gerekir. Chris


0

Timm'in cevabına benzer şekilde, kabul edilen cevabın profilleri de yoktu. HSP'nin ayarlanması bir hata kodu verdi.

Aşağıdaki, neredeyse aynı, komut dosyası kullanarak sona erdi.

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

Bütün bu yıllar sonra bu mesele hâlâ geçerli görünüyor.

Dayanarak Arindam Mani Das 'ın cevabı ve Billy Farrington ' un yorumunu aşağıdaki shell script oluşturuldu:

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

Arindam'ın önerdiği şekilde 100000 mikrosaniye kullanıyorum ve bu benim için de iyi sonuç veriyor.

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.