Loại bỏ độ trễ 0,5 giây khi phát âm thanh qua Bluetooth với A2DP


49

Như được mô tả trong tiêu đề, tôi gặp phải độ trễ nửa giây khi phát âm thanh qua Bluetooth với A2DP.
Điều này làm cho việc xem phim không thể thực hiện được vì âm thanh không được đồng bộ hóa với video.

Tôi không chắc liệu sự chậm trễ này có phải do tiêu chuẩn Bluetooth, giao thức A2PD, triển khai A2DP trên Ubuntu 12.04 hoặc Bộ thu Bluetooth Belkin Z73 hay không.

Dù sao, đây có phải là một độ trễ bình thường? Có cách nào để phát âm thanh qua Bluetooth mà không có độ trễ đáng chú ý nào không?


9
Không phải là một giải pháp thực sự cho vấn đề của bạn mà là một cách giải quyết: Nếu chỉ là về việc phát phim, bạn có thể điều chỉnh bù âm thanh / video, điều này cũng sẽ làm chậm video. Sử dụng mplayer, bạn làm như vậy bằng cách nhấn +-phím. Trong VLC, tôi không biết cách đặt độ trễ, nhưng tôi sẽ ngạc nhiên nếu VLC không có tùy chọn như vậy.
leeme

Tôi đã nghĩ về điều đó nhưng tôi đang thiếu một giải pháp cho YouTube. Khi video được phát bằng HTML5, một giải pháp có thể là cài đặt tiện ích mở rộng trình duyệt đặt bù video. Nhưng đối với trường hợp video được phát bằng flash, tôi không biết làm thế nào để đạt được điều đó.
sáng chói

Ngẫu nhiên, tùy chọn VLC đang ở Tools->Track Synchronisationhoặc chơi với --audio-desynctùy chọn. Tôi e rằng tôi không chắc các đơn vị là gì, và hướng nào là tích cực và sự giúp đỡ không phải là vấn đề, nhưng đó là nơi bạn muốn tìm.
Darael


Bạn đã tìm thấy một giải pháp lâu dài cho vấn đề này? Tôi hiện đang sử dụng giải pháp để chuyển đổi giữa A2DP / HSP / A2DP, nhưng không thực tế khi tiếp tục làm điều đó mỗi khi xảy ra sự cố đồng bộ hóa.
Fred Wuerges 18/07/2016

Câu trả lời:


37

Không, điều này không bình thường nhưng thỉnh thoảng tôi cũng gặp vấn đề tương tự với Loa Bluetooth Altec Lansing iMT525. Một cái gì đó tương tự như khái niệm với câu trả lời của Sri hầu như luôn hoạt động với tôi và tôi chỉ cần thực hiện một lần cho mỗi lần kết nối.

Tự động chuyển đổi cấu hình Bluetooth để khởi chạy lại PulseAudio

Nếu bạn đang tìm kiếm thủ phạm, trước tiên tôi nên xem hệ thống âm thanh của Ubuntu, PulseAudio và sau đó là bộ thu bluetooth của bạn. Thử đi:

  • Đầu tiên, xóa và ghép nối lại thiết bị Bluetooth của bạn.

  • Sau đó, sao chép và dán phần bên dưới vào một .shtệp trong thư mục chính của bạn, nói /home/brillout/pabluezswitch.sh:

    #! / bin / bash
    BLUEZCARD = `danh sách thẻ pactl ngắn | egrep -o bluez. * [[: space:]] ` pactl set-card-profile $ BLUEZCARD a2dp pactl set-card-profile $ BLUEZCARD hsp pactl set-card-profile $ BLUEZCARD a2dp
  • Làm cho tập tin thực thi bằng cách mở một thiết bị đầu cuối và gõ chmod +x ~/pabluezswitch.sh

  • Chuyển đến Cài đặt ... Bàn phím ... Phím tắt và tạo lối tắt tùy chỉnh; đặt tên cho nó bất cứ điều gì bạn muốn, với lệnh là /home/brillout/pabluezswitch.sh(thay thế tên người dùng phù hợp trong đường dẫn!). Bấm vào Áp dụng , rồi bấm vào bên phải nơi nó bị Vô hiệu hóa để thiết lập lối tắt bàn phím để thực thi tập lệnh.

Điều này làm là buộc hệ thống PulseAudio đồng bộ hóa lại âm thanh được gửi đến tai nghe / loa của bạn bằng cách chuyển đổi cấu hình từ ad2p -> hsp -> a2dpđó, do đó hy vọng sẽ thoát khỏi mọi độ trễ.


Bất cứ khi nào bạn kết nối và nhận thấy độ trễ, bạn nên nhấn phím tắt được chọn ở trên để cố gắng khắc phục độ trễ - hy vọng nó hoạt động cho bạn!


Tôi đã sử dụng điều này trong một vài ngày và nó hoạt động rất tốt. - 14.04
dpb

7
Lưu ý rằng pactl có thông báo lỗi khủng khiếp và nhiều thiết bị âm thanh không có những thứ này ad2phsp. Bose của tôi chỉ có ad2p_sinkchứ không phải hai cái kia.
odinho - Velmont

1
Tôi nghĩ rằng bạn cần trích dẫn xung quanh mẫu egrep đó
naught101

1
Tôi không cho rằng có cách nào để theo dõi độ trễ và tự động kích hoạt tập lệnh này khi nó vượt quá ngưỡng tham chiếu nào đó? pacmd info | grep "current latency"pacmd statdường như đưa ra cùng một số độ trễ / kích thước bộ đệm cho dù độ trễ thực tế tăng đến mức nào (ví dụ: khi lấy tai nghe ra khỏi phạm vi và mang nó trở lại), vậy có lẽ một phần khác của ngăn xếp chịu trách nhiệm cho độ trễ?
Ponkadoodle

2
@ odinho-Velmont chuyển đổi giữa ad2p_sinkofflàm việc cho tôi. Gần đây tôi đã quảng cáo điều này với tập lệnh điều khiển âm lượng / âm thanh Pulse có thể hữu ích cho ai đó
Sam Mason

21
  • Cài đặt pavucontrol: sudo apt install pavucontrol
  • Chạy pavucontroltừ menu
  • Đi đến thiết bị đầu ra
  • Chuyển đến thiết bị bluetooth
  • Chuyển đến Nâng cao
  • Ở đó bạn có thể đặt độ trễ bù cho giá trị tính bằng mili giây (cộng hoặc trừ). Để đảm bảo giá trị bạn cần đặt bắt đầu với bất kỳ giá trị nào, ví dụ: 250,00 mi.
  • Phát bất kỳ "kiểm tra đồng bộ hóa âm thanh" nào từ YouTube và đặt tốc độ phát lại thành 0,25 (làm cho nó chậm hơn) và từ đó bạn có thể bắt đầu nhận thấy nếu giá trị này là chính xác hay cần phải tăng hoặc giảm.

2
Loại bỏ sass không cần thiết khỏi câu trả lời - không cần phải thô lỗ. Ngoài ra, điều này nghe có vẻ như nó sẽ hoạt động, nhưng nó dường như không thực sự làm bất cứ điều gì cho tôi ...
naught 101

Đối với tôi điều này làm việc để phát lại youtube với loa bluetooth. Cảm ơn. Khi tôi lần đầu tiên mở pavucontrol, tùy chọn nâng cao đã bị ẩn. Phải mở rộng theo chiều dọc cửa sổ.
dùng75505

11

Thỉnh thoảng tôi gặp vấn đề tương tự, không phân biệt người chơi đã sử dụng. Của tôi là một tai nghe Bluetooth stereo Nokia BH-503 với máy tính xách tay MSI CR400 và Ubuntu 11.10. Tôi tình cờ bắt gặp một cách giải quyết mà bạn có thể thử.

  • Bắt đầu phát lại video.
  • Chuyển đến Cài đặt âm thanh> Phần cứng.
  • Chọn thiết bị Bluetooth.
  • Sau đó, trong Cài đặt cho trình đơn thả xuống Thiết bị đã chọn, chuyển sang cấu hình Điện thoại song công (HSP / HFP), sau đó chuyển về Phát lại độ trung thực cao (A2DP).

7

Câu trả lời hàng đầu ở đây hoạt động, nhưng không phải cho mọi thiết bị âm thanh bluetooth. Một số thiết bị có tên hồ sơ khác với những gì người đăng có với loa bluetooth của mình. Ví dụ, trong đoạn mã sau, được đăng bởi người đó, rõ ràng nó có các hồ sơ được đặt tên a2dphsp. Chẳng có cái nào trong số này có sẵn với LG Tones của tôi, ví dụ, nhưng chúng là với các thiết bị khác như tai nghe Sony của tôi.

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

Mã đó sẽ hoạt động đối với hầu hết các thiết bị bluetooth xuất hiện, nhưng để mã này hoạt động chính xác cho những thiết bị không có cấu hình a2dp hoặc cấu hình hsp, hãy nhập:

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

Điều này sẽ trả lại mọi thứ sau khi nó tìm thấy một thiết bị bluetooth. Chẳng hạn, với tai nghe LG Tone Ultra, tôi nhận được điều này:

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

Chúng tôi quan tâm đến profilesphần này. Trong phần này, chúng tôi thấy có ba hồ sơ, đó là a2dp_sink, headset_head_unit, và off. Hai hồ sơ chúng ta cần có trong đó (A2DP chìm) và (HSP / HFP). Trong trường hợp này, chúng a2dp_sinkdành cho hồ sơ headsethead_unita2dp và cho hồ sơ hsp. Lưu ý điều này khác với người gửi ban đầu a2dphsp.

Bây giờ, với đoạn mã trên, chúng tôi sẽ sửa đổi nó và đưa nó vào một tệp. Tôi gọi tập tin bluezswitch.sh.

Thay đổi thư mục bạn muốn đặt tập tin. Nó có thể là bất cứ nơi nào.

touch bluezswitch.sh

Sau đó

nano bluezswitch.sh

Sao chép và dán mã ở đầu nhận xét này và thay thế a2dphspbằng các giá trị bạn nhận được khi chạy lệnh trên và dán mã vào tệp đó. Chẳng hạn, đây là tệp của tôi trông giống như 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

Bây giờ, ctrl-xsau đó yđể lưu tệp và thoát nano, và sau đó làm cho tệp thực thi:

chmod +x bluezswitch.sh

Sau đó theo dõi bằng cách đặt một phím tắt như đã được giải thích.

Chuyển đến Cài đặt ... Bàn phím ... Phím tắt và tạo lối tắt tùy chỉnh; đặt tên cho nó là bất cứ thứ gì bạn muốn, với lệnh là /home/brillout/bluezswitch.sh (thay thế tên người dùng phù hợp trong đường dẫn!). Bấm vào Áp dụng, rồi bấm vào bên phải nơi nó bị Vô hiệu hóa để thiết lập lối tắt bàn phím để thực thi tập lệnh.

Đó nên là tất cả để có nó. Điều này sẽ làm việc cho tất cả những người mà trước đây nó không hoạt động.


1
Đối với tôi, tắt a2dp_sink, off, a2dp_sinktrong tác phẩm tự rất tốt cho tôi. Đặt thành headset_head_unitlỗi I / O.
Mohd Shahril

5

Điều chế mã xung vi sai thích ứng liên quan đến thuật toán nén kiểu nhìn về phía trước, nơi thông tin không thể được truyền đi trước khi bộ mã hóa có cơ hội kiểm tra một vài byte thông tin sắp tới. Do đó, dữ liệu phải được xếp chồng lên nhau trong bộ mã hóa và có sự dịch chuyển thời gian vốn có giữa các luồng vào và rời bộ mã hóa. Từ lâu, tôi đã làm một nghiên cứu về sự chậm trễ của mạng dữ liệu để xác định tính khả thi của điện thoại thoại qua dữ liệu (ngày nay là VoIP). Tôi nghĩ rằng tôi đã kết luận rằng nén / mã hóa theo kiểu ADPCM sẽ gây ra quá nhiều độ trễ. Tôi nghĩ rằng để khắc phục vấn đề trì hoãn Bluetooth này, người ta có thể cần một loại mã hóa âm thanh không nén nên có độ trễ thấp hơn.


6
Vấn đề nén sẽ chiếm vài chục mili giây, chứ không phải nửa giây, chắc chắn?
ness101

4

Tôi đã thử rất nhiều cách tiếp cận vấn đề này, nhưng không gì có thể khắc phục được. Sau đó, tôi tình cờ phát hiện ra độ trễ-set-port-offset

Nếu bạn đang sử dụng pulseaudio, hãy làm:

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

Điều này sẽ cung cấp cho bạn giao diện bluetooth. Bây giờ đặt độ trễ phù hợp:

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

Tôi đang sử dụng 100000 micro giây hoạt động tốt với tôi.


1
Đối với bất kỳ ai khác tình cờ tìm thấy câu trả lời cũ này để tìm kiếm câu trả lời, câu trả lời của Arindam Mani Das hoạt động hoàn hảo. Nếu bạn nhận được lỗi "không có thực thể như vậy", hãy chạy 'thẻ danh sách pactl' và kiểm tra cổng nào có sẵn cho thiết bị của bạn. Tôi đã phải thay đổi "đầu ra loa" thành "đầu ra tai nghe" trong lệnh thứ hai vì thiết bị của tôi không có cổng đầu ra loa.
Billy Farrington

1

Đây là những gì đã giải quyết cho tôi: $ sudo apt-get install phonon-backend-vlcvà đảm bảo đó là phần phụ trợ ưa thích, trong KDE, chuyển đến [Cài đặt hệ thống] [Đa phương tiện] [Cài đặt âm thanh và video] [Phần cuối] và sử dụng [Nút ưa thích]


1
@dargaud Tôi khuyên bạn nên mở rộng phần này để giải thích cách làm cho phần phụ trợ ưa thích.
Eliah Kagan

0

những cá nhân đang gặp vấn đề này Vui lòng xem trang web này: http://projectzeorymer.wordpress.com/2011/09/01/ubfox-how-to-connect-nokia-bh-503-bluetooth-headset-to-your-pc / để xem ảnh của những gì bạn cần tải xuống.

Tải xuống trình quản lý bluetooth và sử dụng nó để thao tác cài đặt tai nghe. Đặt cài đặt âm thanh thành Phát lại độ trung thực cao (A2DP) và sau đó chuyển sang cài đặt âm thanh.


1
Tiếp tục quản lý bluetooth và đi tới Hồ sơ âm thanh và sau đó chọn Phát lại liên kết cao .. đó là
Alex Force

0

Trên trình phát phương tiện VLC, Chuyển đến đồng bộ hóa theo dõi công cụ Tab Đồng bộ hóa Theo đồng bộ hóa âm thanh / video âm thanh, sử dụng giá trị âm như khoảng -0,67 và độ trễ sẽ được bù đầy đủ. Bạn phải tự làm điều này mỗi khi bạn mở một tệp mới. Chris


0

Tương tự như câu trả lời của Timm, tôi cũng không có hồ sơ của câu trả lời được chấp nhận. Đặt HSP đã cung cấp mã lỗi.

Tôi đã kết thúc bằng cách sử dụng kịch bản sau đây, gần như giống hệt nhau.

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

Có vẻ như vấn đề này vẫn còn có liên quan sau tất cả những năm đó.

Dựa trên câu trả lời của Arindam Mani Das và nhận xét của Billy Farrington , tôi đã tạo ra kịch bản shell sau:

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

Tôi đang sử dụng 100000 micro giây như Arindam khuyên dùng và nó cũng hoạt động tốt với tôi.

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.