Singkirkan latensi 0,5 saat memainkan audio melalui Bluetooth dengan A2DP

49

Seperti dijelaskan dalam judul, saya mengalami penundaan setengah detik saat memutar audio melalui Bluetooth dengan A2DP.
Ini membuat menonton film tidak dimungkinkan karena suara tidak disinkronkan dengan video.

Saya tidak yakin apakah penundaan itu disebabkan oleh standar Bluetooth, protokol A2PD, implementasi A2DP pada Ubuntu 12.04, atau Penerima Bluetooth Belkin Z73.

Ngomong-ngomong, apakah ini lag yang normal? Apakah ada cara untuk memutar audio melalui Bluetooth tanpa latensi yang terlihat?

brillout
sumber
9
Bukan solusi nyata untuk masalah Anda tetapi solusi: Jika ini hanya tentang memutar film, Anda dapat menyesuaikan offset audio / video, yang juga akan menunda video. Menggunakan mplayer, Anda melakukannya dengan menekan tombol +dan -. Di VLC, saya tidak tahu cara mengatur penundaan, tetapi saya akan terkejut jika VLC tidak memiliki opsi seperti itu.
Tema
Saya memikirkan hal itu tetapi saya kehilangan solusi untuk YouTube. Ketika video diputar dengan HTML5 solusinya adalah dengan menginstal ekstensi browser yang menetapkan offset video. Tetapi untuk kasus video diputar dengan flash, saya tidak yakin bagaimana mencapainya.
brillout
Kebetulan, opsi VLC berada di Tools->Track Synchronisation, atau bermain dengan --audio-desyncopsi. Saya khawatir saya tidak yakin apa unitnya, dan arah mana yang positif, dan bantuan tidak akan datang tentang masalah ini, tetapi di situlah Anda ingin melihat.
Darael
Sudahkah Anda menemukan solusi permanen untuk masalah ini? Saat ini saya menggunakan solusi untuk beralih antara A2DP / HSP / A2DP, tetapi tidak praktis untuk tetap melakukan itu setiap kali masalah sinkronisasi.
Fred Wuerges

Jawaban:

37

Tidak, ini tidak normal tetapi saya terkadang mengalami masalah serupa dengan Pembicara Bluetooth Altec Lansing iMT525 saya. Sesuatu yang mirip dalam konsep dengan jawaban Sri hampir selalu bekerja untuk saya, dan saya perlu melakukannya hanya sekali per koneksi.

Beralih otomatis profil Bluetooth untuk menginisialisasi ulang PulseAudio

Jika Anda mencari pelakunya, saya akan melihat sound system Ubuntu, PulseAudio terlebih dahulu, dan kemudian penerima bluetooth Anda. Coba ini:

  • Pertama, hapus dan pasangkan kembali perangkat Bluetooth Anda.

  • Kemudian, salin dan tempel yang di bawah ini ke .shfile di direktori rumah Anda, katakan /home/brillout/pabluezswitch.sh:

    #! / bin / bash
    BLUEZCARD = `daftar kartu pactl singkat | egrep -o bluez. * [[: space:]] ` pactl set-card-profile $ BLUEZCARD a2dp pactl set-card-profile $ BLUEZCARD hsp pactl set-card-profile $ BLUEZCARD a2dp
  • Buat file dapat dieksekusi dengan membuka terminal dan mengetik chmod +x ~/pabluezswitch.sh

  • Buka Pengaturan ... Keyboard ... Pintasan , dan buat pintasan khusus; beri nama apa pun yang Anda inginkan, dengan perintah sebagai /home/brillout/pabluezswitch.sh(gantikan nama pengguna yang sesuai di jalur!). Klik Terapkan , lalu klik kanan di mana dikatakan Nonaktif untuk mengatur pintasan keyboard untuk menjalankan skrip.

Apa yang dilakukan adalah memaksa sistem PulseAudio untuk menyinkronkan ulang audio yang dikirim ke headset / speaker Anda dengan beralih dari profil ad2p -> hsp -> a2dp, sehingga mudah-mudahan menghilangkan latensi.


Setiap kali Anda terhubung dan melihat lag, Anda harus menekan pintasan keyboard yang dipilih di atas untuk mencoba memperbaiki latensi - semoga ini berfungsi untuk Anda!

ish
sumber
Saya telah menggunakan ini selama beberapa hari sekarang, dan itu bekerja dengan baik. - 14,04
dpb
7
Perhatikan bahwa pactl memiliki pesan kesalahan yang mengerikan, dan banyak peralatan audio tidak memilikinya ad2pdan hsp. Bose saya hanya punya ad2p_sink, bukan dua lainnya.
odinho
1
Saya pikir Anda perlu mengutip sekitar pola egrep itu
naught101
1
Saya tidak mengira ada cara untuk memantau latensi dan memicu skrip ini secara otomatis ketika melebihi beberapa ambang batas di atas referensi? pacmd info | grep "current latency"dan pacmd stattampaknya memberikan nomor latensi yang sama / ukuran buffer tidak peduli seberapa besar latensi yang sebenarnya tumbuh (misalnya ketika mengambil headset di luar jangkauan dan membawanya kembali), jadi mungkin bagian tumpukan yang berbeda bertanggung jawab atas latensi?
Ponkadoodle
2
@ odinho-Velmont beralih antara ad2p_sinkdan offbekerja untuk saya. Saya baru-baru ini menambahkan ini ke skrip kontrol audio / volume Pulse saya yang mungkin membantu seseorang
Sam Mason
21
  • Instal pavucontrol: sudo apt install pavucontrol
  • Jalankan pavucontroldari menu
  • Pergi ke Perangkat Output
  • Pergi ke perangkat bluetooth
  • Pergi ke Tingkat Lanjut
  • Di sana Anda dapat mengatur latensi offset ke nilai dalam milidetik (plus atau minus). Untuk memastikan nilai yang Anda harus mulai dengan nilai apa pun misalnya, 250,00 mi.
  • Mainkan "uji sinkronisasi audio" apa pun dari YouTube dan atur kecepatan pemutaran ke 0,25 (membuatnya lebih lambat) dan dari sana Anda dapat mulai memperhatikan jika nilainya benar atau perlu ditingkatkan atau dikurangi.
Roelf Renkema
sumber
2
Menghapus jawaban yang tidak perlu - tidak perlu kasar. Juga, ini terdengar seperti itu seharusnya berhasil, tetapi tampaknya tidak benar-benar melakukan apa pun untuk saya ...
naught101
Bagi saya ini berfungsi untuk pemutaran youtube dengan speaker bluetooth. Terima kasih. Ketika saya pertama kali membuka pavucontrol, opsi lanjutan disembunyikan. Harus memperluas jendela secara vertikal.
user75505
11

Saya mendapat masalah serupa sesekali, terlepas dari pemain yang digunakan. Milik saya adalah Nokia BH-503 Bluetooth Stereo Headphone dengan laptop MSI CR400 dan Ubuntu 11.10. Saya kebetulan menemukan solusi yang dapat Anda coba.

  • Mulai pemutaran video.
  • Buka Pengaturan Suara> Perangkat Keras.
  • Pilih perangkat Bluetooth.
  • Kemudian di Pengaturan untuk drop-down Perangkat yang Dipilih, beralih ke profil Telephony Duplex (HSP / HFP), kemudian beralih kembali ke Pemutaran Fidelitas Tinggi (A2DP).
Sri
sumber
7

Balasan teratas di sini berfungsi, tetapi tidak untuk setiap perangkat audio bluetooth. Beberapa perangkat memiliki nama profil yang berbeda dari apa yang poster miliki dengan speaker bluetooth-nya. Misalnya, dalam kode berikut, yang semula diposting oleh orang itu, ternyata memiliki profil yang bernama a2dpdan hsp. Tidak satu pun dari ini tersedia dengan Nada LG saya, tetapi mereka dengan perangkat lain seperti headset Sony saya.

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

Kode itu akan berfungsi untuk sebagian besar perangkat bluetooth yang muncul, tetapi untuk membuatnya berfungsi dengan benar untuk perangkat yang tidak memiliki profil a2dp atau profil hsp, ketikkan:

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

Ini akan mengembalikan semuanya setelah menemukan perangkat bluetooth. Misalnya, dengan headset LG Tone Ultra, saya mendapatkan ini:

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

Kami tertarik pada profilesbagian ini. Pada bagian ini, kita melihat tiga profil, yang a2dp_sink, headset_head_unit, dan off. Dua profil yang kita butuhkan harus ada di dalamnya (Sink A2DP) dan (HSP / HFP). Dalam hal ini, mereka a2dp_sinkuntuk profil a2dp, dan headsethead_unituntuk profil hsp. Perhatikan ini berbeda dari poster asli a2dpdan hsp.

Sekarang, dengan kode di atas, kita akan memodifikasinya dan memasukkannya ke dalam file. Saya menelepon file bluezswitch.sh.

Ubah ke direktori yang Anda inginkan untuk meletakkan file. Itu bisa dimana saja.

touch bluezswitch.sh

Kemudian

nano bluezswitch.sh

Salin dan tempel kode di bagian paling atas dari komentar ini dan ganti a2dpdan hspdengan nilai-nilai yang Anda dapatkan ketika Anda menjalankan perintah di atas, dan rekatkan dalam file itu. Misalnya, inilah tampilan file saya untuk Nada LG saya.

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

Sekarang, ctrl-xkemudian yuntuk menyimpan file dan keluar nano, dan kemudian membuat file executable:

chmod +x bluezswitch.sh

Kemudian ikuti dengan mengatur pintasan keyboard seperti yang telah dijelaskan.

Buka Pengaturan ... Keyboard ... Pintasan, dan buat pintasan khusus; beri nama apa pun yang Anda inginkan, dengan perintah sebagai / home / brillout/bluezswitch.sh (gantikan nama pengguna yang sesuai di jalur!). Klik Terapkan, lalu klik kanan di mana dikatakan Nonaktif untuk mengatur pintasan keyboard untuk menjalankan skrip.

Seharusnya hanya itu yang ada di sana. Ini harus bekerja untuk semua orang yang sebelumnya tidak bekerja.

Timm Simpkins
sumber
1
Bagi saya, mematikan a2dp_sink, off, a2dp_sinkdalam urutan bekerja sangat baik bagi saya. Pengaturan ke headset_head_unitI / O error.
Mohd Shahril
5

Modulasi kode pulsa diferensial adaptif melibatkan algoritme kompresi jenis lihat-depan di mana informasi tidak dapat dikirim sebelum pembuat kode memiliki kesempatan untuk memeriksa beberapa byte informasi yang akan datang. Oleh karena itu, data harus ditumpuk di encoder, dan ada pergeseran waktu yang melekat antara stream yang masuk dan keluar dari encoder. Dulu, saya melakukan penelitian tentang keterlambatan jaringan data untuk menentukan kelayakan telepon suara-over-data (apa yang sekarang VoIP). Saya pikir saya menyimpulkan bahwa kompresi / pengkodean gaya ADPCM akan menyebabkan terlalu banyak penundaan. Saya pikir untuk mengatasi masalah keterlambatan Bluetooth ini, orang mungkin perlu jenis pengkodean audio non-kompresi yang seharusnya memiliki latensi lebih rendah.

Kirk Shrewsbury
sumber
6
Masalah kompresi akan mencapai beberapa puluh milidetik, bukan setengah detik, tentu saja?
naught101
4

Saya mencoba banyak pendekatan untuk masalah ini, tetapi tidak ada yang bisa memperbaikinya. Kemudian saya menemukan set-port-latency-offset

Jika Anda menggunakan pulseaudio, lakukan:

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

Ini akan memberi Anda antarmuka bluetooth. Sekarang atur latensi sesuai:

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

Saya menggunakan 100000 mikrodetik yang berfungsi dengan baik untuk saya.

Arindam Mani Das
sumber
1
Bagi orang lain yang menemukan tulisan lama ini mencari jawaban, jawaban Arindam Mani Das bekerja dengan baik. Jika Anda menerima kesalahan "tidak ada entitas seperti itu", jalankan 'kartu daftar pactl' dan periksa port mana yang tersedia untuk perangkat Anda. Saya harus mengubah "speaker-output" menjadi "headset-output" pada perintah kedua karena perangkat saya tidak memiliki port speaker-output.
Billy Farrington
1

Inilah yang menyelesaikannya untuk saya: $ sudo apt-get install phonon-backend-vlcdan pastikan itu backend yang disukai, di KDE buka [Pengaturan Sistem] [Multimedia] [Pengaturan audio dan video] [Backend] dan gunakan [Tombol Prefer]

dargaud
sumber
1
@ Dargaud Saya sarankan memperluas ini untuk menjelaskan bagaimana menjadikannya backend yang disukai.
Eliah Kagan
0

orang yang mengalami masalah ini Silakan lihat situs web ini: http://projectzeorymer.wordpress.com/2011/09/01/ubuntu-how-to-connect-nokia-bh-503-bluetooth-headset-to-your-pc / untuk melihat pic dari apa yang perlu Anda unduh.

Unduh pengelola bluetooth dan gunakan untuk memanipulasi pengaturan headset. Atur pengaturan suara ke Playback Fidelity Tinggi (A2DP) dan kemudian masuk dalam pengaturan suara.

Alex Force
sumber
1
Pergi mengelola bluetooth dan pergi ke Audio Profile dan kemudian pilih High Fedelity Playback .. itu saja
Alex Force
0

Pada VLC media player, Pergi ke Sinkronisasi Track alat Sinkronkan tab Di bawah sinkronisasi audio / video track audio, gunakan nilai negatif seperti sekitar -0,67 dan lag akan dikompensasi sepenuhnya. Anda harus melakukan ini secara manual setiap kali Anda membuka file baru. Chris

Lex
sumber
0

Demikian pula dengan jawaban Timm, saya juga tidak memiliki profil jawaban yang diterima. Pengaturan HSP memberi kode kesalahan.

Saya akhirnya menggunakan skrip berikut yang hampir identik.

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

Sepertinya masalah ini masih relevan setelah bertahun-tahun.

Berdasarkan jawaban Arindam Mani Das dan komentar Billy Farrington , saya membuat skrip shell berikut:

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

Saya menggunakan 100000 mikrodetik seperti yang disarankan Arindam dan juga berfungsi dengan baik untuk saya.

Yakir Magriso
sumber