Позбудьтеся затримки 0,5 с під час відтворення аудіо через Bluetooth за допомогою A2DP


49

Як описано в назві, у мене виникає затримка на пів секунди під час відтворення аудіо через Bluetooth з A2DP.
Це робить перегляд фільмів неможливим, оскільки звук не синхронізується з відео.

Я не впевнений, що затримка викликана стандартом Bluetooth, протоколом A2PD, реалізацією A2DP на Ubuntu 12.04 або приймачем Bluetooth Belkin Z73.

Все-таки це нормальне відставання? Чи є спосіб відтворення аудіо через Bluetooth без помітних затримок?


9
Не справжнє рішення вашої проблеми, але вирішення: якщо мова йде лише про відтворення фільмів, ви можете налаштувати зміщення аудіо / відео, що також затримає відео. Використовуючи це mplayer, ви робите це, натискаючи клавіші +і -. У VLC я не знаю, як встановити затримку, але буду здивований, якщо у VLC немає такої можливості.
leemes

Я думав про це, але мені не вистачає рішення для YouTube. Коли відео відтворюється за допомогою HTML5, рішенням може бути встановлення розширення для браузера, яке встановлює зміщення відео. Але для випадку, коли відео відтворюється зі спалахом, я не знаю, як цього досягти.
брилеут

До речі, варіант VLC знаходиться у режимі Tools->Track Synchronisationабо грати з цим --audio-desyncваріантом. Боюся, я не впевнений, що це за підрозділи, і який напрям є позитивним, і допомога не буде з цього приводу, але саме там ви хочете подивитися.
Дараель


Ви знайшли постійне рішення цієї проблеми? Наразі я використовую рішення для перемикання між A2DP / HSP / A2DP, але це практично не залишається робити щоразу, коли проблема синхронізації.
Фред Вюргес

Відповіді:


37

Ні, це не нормально, але у мене часто виникають подібні проблеми зі своїми динаміками Bluetooth Altec Lansing iMT525. Щось подібне за концепцією до відповіді Шрі майже завжди працює для мене, і мені потрібно це робити лише один раз за з'єднання.

Автоматичне перемикання профілів Bluetooth для повторної ініціалізації PulseAudio

Якщо ви шукаєте винуватця, я спершу подивлюсь на звукову систему Ubuntu, PulseAudio, а потім на ваш Bluetooth-приймач. Спробуйте це:

  • Спочатку видаліть і повторно з'єднайте свій пристрій Bluetooth.

  • Потім скопіюйте та вставте нижче в а .sh файл у домашній каталог, скажіть /home/brillout/pabluezswitch.sh:

    #! / бін / баш
    BLUEZCARD = `Картки списку Pactl короткі | egrep -o bluez. * [[: простір:]] ` Pactl набір-профіль $ BLUEZCARD a2dp pactl set-card-profile $ BLUEZCARD hsp Pactl набір-профіль $ BLUEZCARD a2dp
  • Зробіть файл виконуваним, відкривши термінал і ввівши chmod +x ~/pabluezswitch.sh

  • Перейдіть у Налаштування ... Клавіатура ... Комбінації клавіш і створіть спеціальний ярлик; назвіть його все, що завгодно, командою як /home/brillout/pabluezswitch.sh(замініть відповідне ім'я користувача на шляху!). Клацніть Застосувати , а потім натисніть праворуч там, де написано Відключено, щоб встановити ярлик клавіатури для виконання сценарію.

Завдяки цьому система PulseAudio змушує синхронізувати звук, що надсилається на вашу гарнітуру / динаміки, перемикаючи профілі ad2p -> hsp -> a2dp, таким чином, сподіваючись, позбутися будь-яких затримок.


Щоразу, коли ви підключаєтесь і помічаєте відставання, вам слід натиснути на вибрану вище комбінацію клавіатури, щоб спробувати виправити затримку - сподіваємось, вона працює для вас!


Я використовую це вже пару днів, і це чудово працює. - 14.04
dpb

7
Зауважте, що Pactl містить жахливі повідомлення про помилки, і що багато аудіоапаратури не мають цих ad2pта hsp. Тільки мій Бозе ad2p_sink, не ці двоє.
odinho - Велмонт

1
Я думаю, що вам потрібні цитати навколо цієї схеми
вивертання

1
Я не думаю, що існує спосіб відстежувати затримку та автоматично запускати цей скрипт, коли він перевищує деякий поріг вище посилання? pacmd info | grep "current latency"і, pacmd statздається, дають однакові номери затримки / розмір буфера незалежно від того, наскільки сильно зростає фактична затримка (наприклад, коли виймаєте гарнітуру поза діапазоном і повертаєте її назад), тож, можливо, інша частина стека відповідає за затримку?
Ponkadoodle

2
@ odinho-Velmont перемикається між собою ad2p_sinkі offпрацює для мене. Нещодавно я оголосив це своїм сценарієм контролю звуку / регулювання гучності Pulse, який комусь може бути корисним
Сем Мейсон

21
  • Встановити pavucontrol: sudo apt install pavucontrol
  • Запустити pavucontrolз меню
  • Перейдіть до вихідних пристроїв
  • Перейдіть на Bluetooth-пристрій
  • Перейдіть до розширеного
  • Там ви можете встановити зміщення затримки на значення в мілісекундах (плюс або мінус). Щоб переконатися у значенні, потрібно почати з будь-якого значення, наприклад, 250,00 миль.
  • Відтворіть будь-який "тест на синхронізацію аудіо" з YouTube і встановіть швидкість відтворення на 0,25 (зробіть це повільніше), і звідти ви можете почати помічати, чи значення це правильне чи потрібно збільшувати або зменшувати.

2
Видалено непотрібні саси з відповіді - не потрібно грубіти. Крім того, це здається, що воно повинно працювати, але, схоже, насправді нічого для мене не робить ...
naught101

Для мене це працювало для відтворення на YouTube з динаміками Bluetooth. Дякую. Коли я вперше відкрив pavucontrol, розширений варіант був прихований. Довелося вертикально розгорнути вікно.
користувач75505

11

Іноді я отримую подібну проблему, незалежно від гравця. Моя - стерео навушники Nokia BH-503 Bluetooth з ноутбуком MSI CR400 та Ubuntu 11.10. Я випадково натрапив на вирішення, яке можна спробувати.

  • Почніть відтворення відео.
  • Перейдіть до Налаштування звуку> Обладнання.
  • Виберіть пристрій Bluetooth.
  • Потім у спадному меню Налаштування вибраного пристрою переключіться на профіль дуплексного телефонного зв’язку (HSP / HFP), а потім перейдіть до режиму відтворення з високою точністю (A2DP).

7

Верхня відповідь тут працює, але не для кожного аудіопристрою Bluetooth. Деякі пристрої мають інші назви профілів, ніж ті, що мають плакати зі своїми динаміками Bluetooth. Наприклад, у наступному коді, який був спочатку розміщений цією особою, він, мабуть, має профілі з ім'ям a2dpта hsp. Наприклад, жодна з них не доступна в моїх тонах LG, але вони є на інших пристроях, таких як гарнітура 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

Цей код буде працювати на більшості пристроїв Bluetooth, які він з'являється, але щоб правильно працювати для тих пристроїв, у яких немає а2dp-профілю або профілю hsp, введіть:

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

Це поверне все після того, де він знайде Bluetooth-пристрій. Наприклад, завдяки гарнітурі LG Tone Ultra я отримую таке:

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

Нас цікавить profilesрозділ. В цьому розділі, ми бачимо три профілю, які a2dp_sink, headset_head_unitі off. Два необхідних нам профілю повинні мати в них (A2DP Sink) та (HSP / HFP). У цьому випадку вони призначені a2dp_sinkдля профілю a2dp, і headsethead_unitдля профілю hsp. Зауважте, що це відрізняється від оригіналу a2dpта hsp.

Тепер, з вищевказаним кодом, ми його модифікуємо та вкладемо у файл. Я зателефонував у файл bluezswitch.sh.

Перейдіть до каталогу, в який потрібно помістити файл. Це може бути де завгодно.

touch bluezswitch.sh

Тоді

nano bluezswitch.sh

Скопіюйте та вставте код у верхній частині цього коментаря та замініть значення a2dpта hspзначення, отримані під час виконання вищевказаної команди, та вставте його у цей файл. Наприклад, так виглядав мій файл для моїх тонів 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

Тепер, ctrl-xпотім yзберегти файл і вийти з нано, а потім зробити файл виконуваним:

chmod +x bluezswitch.sh

Потім слід встановити комбінацію клавіш, як було пояснено.

Перейдіть у Налаштування ... Клавіатура ... Комбінації клавіш і створіть спеціальний ярлик; назвіть його все, що вам завгодно, за допомогою команди як /home/brillout/bluezswitch.sh (замініть відповідне ім'я користувача у шляху!). Клацніть Застосувати, а потім натисніть праворуч там, де написано Відключено, щоб встановити ярлик клавіатури для виконання сценарію.

Це повинно бути все, що є. Це має працювати для всіх тих, що раніше не працювали.


1
Для мене, вимикаючи a2dp_sink, off, a2dp_sinkв послідовності робіт дуже добре для мене. Встановлення headset_head_unitпомилки вводу / виводу.
Мохд Шахріл

5

Адаптивна диференціальна модуляція імпульсного коду включає алгоритм стиснення випереджувального типу, де інформація не може бути передана до того, як кодер отримав можливість вивчити кілька байтів майбутньої інформації. Отже, дані повинні накопичуватися в кодері, і між потоками, що входять і виходять з кодера, є властивий часовий зсув. Давно я зробив дослідження затримок в мережі передачі даних, щоб визначити доцільність телефонної передачі голосових даних (що зараз є VoIP). Думаю, я зробив висновок, що стиснення / кодування стилю ADPCM призведе до занадто великої затримки. Я думаю, щоб подолати цю проблему із затримкою Bluetooth, можливо, знадобиться не стискаючий тип кодування аудіо, який повинен мати меншу затримку.


6
Проблема стиснення складе кілька десятків мілісекунд, а не півсекунди, безумовно?
naught101

4

Я спробував багато підходів до цієї проблеми, але нічого не вдалося виправити. Тоді я натрапив на компенсацію затримки встановленого порту

Якщо ви використовуєте pulseaudio do:

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

Це дасть вам інтерфейс Bluetooth. Тепер відповідно встановіть затримку:

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

Я використовую 100000 мікросекунд, що добре працює для мене.


1
Для всіх, хто натрапляє на цю стару публікацію, яка шукає відповідь, відповідь Аріндама Мані Дас прекрасно працює. Якщо ви отримаєте помилку "немає такої сутності", запустіть "Картки списку пактлів" і перевірте, які порти доступні для вашого пристрою. Мені довелося змінити "динамік-вихід" на "гарнітура-вихід" у другій команді, оскільки у мого пристрою немає порту динамічного виходу.
Біллі Фаррінгтон

1

Ось що це вирішило для мене: $ sudo apt-get install phonon-backend-vlcі переконайтеся, що це бажаний бекенд, у KDE перейдіть до [Налаштування системи] [Мультимедіа] [Налаштування аудіо та відео] [Резервний] та скористайтесь кнопкою [Кращий]


1
@dargaud Я рекомендую розширити це, щоб пояснити, як зробити його кращим серцем.
Елія Каган

0

особи, які мають цю проблему. Перегляньте цей веб-сайт: http://projectzeorymer.wordpress.com/2011/09/01/ubuntu-how-to-connect-nokia-bh-503-bluetooth-headset-to-your-pc / щоб побачити зображення того, що вам потрібно завантажити.

Завантажте Bluetooth-менеджер і використовуйте його для маніпулювання налаштуваннями гарнітури. Встановіть для налаштувань звуку параметр відтворення високої чіткості (A2DP), а потім перейдіть у налаштування звуку.


1
Перейдіть по Bluetooth і перейдіть до аудіопрофілю, а потім виберіть програвання High Fedelity Playback. Ось це
Alex Force

0

На медіаплеєрі VLC перейдіть на Інструменти Синхронізація треку Синхронізація на вкладці Синхронізація Під час синхронізації аудіо / відео аудіозапису використовуйте негативне значення, наприклад приблизно -0,67, і відставання буде компенсовано повністю. Це потрібно робити вручну кожного разу, коли ви відкриваєте новий файл. Кріс


0

Як і у відповіді Тімма, я також не мав профілів прийнятої відповіді. Встановлення HSP дало код помилки.

Я в кінцевому рахунку використовував наступний, майже ідентичний, сценарій.

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

Здається, ця проблема залишається актуальною після всіх цих років.

На основі відповіді Аріндама Мані Даса та коментаря Біллі Фаррінгтона я створив наступний сценарій оболонки:

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

Я використовую 100000 мікросекунд, як рекомендував Arindam, і це добре працює для мене.

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.