Избавьтесь от задержки 0,5 с при воспроизведении аудио через Bluetooth с A2DP

49

Как описано в заголовке, при воспроизведении аудио через Bluetooth с A2DP я испытываю задержку в полсекунды.
Это делает просмотр фильмов невозможным, поскольку звук не синхронизирован с видео.

Я не уверен, вызвана ли задержка стандартом Bluetooth, протоколом A2PD, реализацией A2DP в Ubuntu 12.04 или Bluetooth-приемником Belkin Z73.

В любом случае, это нормальное отставание? Есть ли способ воспроизведения аудио через Bluetooth без заметных задержек?

brillout
источник
9
Не реальное решение вашей проблемы, а обходной путь: если речь идет только о воспроизведении фильмов, вы можете отрегулировать смещение аудио / видео, что также приведет к задержке видео. Используя mplayer, вы делаете это, нажав +и -ключи. В VLC я не знаю, как установить задержку, но я был бы удивлен, если VLC не имеет такой опции.
Leemes
Я думал об этом, но мне не хватает решения для YouTube. Когда видео воспроизводится с использованием HTML5, решением может быть установка расширения для браузера, которое устанавливает смещение видео. Но для случая, когда видео воспроизводится со вспышкой, я не уверен, как этого добиться.
Brillout
Между прочим, опция VLC в Tools->Track Synchronisation, или играть с --audio-desyncопцией. Боюсь, я не уверен, что такое подразделения, и в каком направлении они положительные, и по этому вопросу помощи не ожидается, но вы должны посмотреть на это.
Дараэль
Вы нашли постоянное решение этой проблемы? В настоящее время я использую решение для переключения между A2DP / HSP / A2DP, но не практично продолжать делать это каждый раз, когда возникает проблема синхронизации.
Фред Уэрджес

Ответы:

37

Нет, это не нормально, но у меня иногда возникала подобная проблема с моими динамиками Altec Lansing iMT525 Bluetooth. Что-то похожее на концепцию ответа Шри почти всегда работает для меня, и мне нужно сделать это только один раз за соединение.

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

Если вы ищете виновника, я бы посмотрел на звуковую систему Ubuntu, сначала PulseAudio, а затем на ваш Bluetooth-ресивер. Попробуй это:

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

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

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

  • Перейдите в Настройки ... Клавиатура ... Сочетания клавиш и создайте пользовательский ярлык; Назовите его как хотите, с помощью команды as /home/brillout/pabluezswitch.sh(подставьте соответствующее имя пользователя в путь!). Нажмите Применить , а затем щелкните справа, где написано « Отключено», чтобы настроить сочетание клавиш для выполнения сценария.

Это заставляет систему PulseAudio ресинхронизировать звук, передаваемый на гарнитуру / динамики, переключая профили ad2p -> hsp -> a2dp, таким образом, надеясь избавиться от любой задержки.


Всякий раз, когда вы подключаетесь и замечаете задержку, вы должны нажать комбинацию клавиш, выбранную выше, чтобы попытаться устранить задержку - надеюсь, она сработает для вас!

иш
источник
Я использовал это в течение пары дней, и это прекрасно работает. - 14.04
дпб
7
Обратите внимание, что в pactl есть ужасные сообщения об ошибках, и что многие аудиоаппаратуры не имеют их ad2pи hsp. Только мой Бозе ad2p_sink, а не эти два других.
Одино - Велмонт
1
Я думаю, что вам нужны цитаты вокруг этого шаблона egrep
naught101
1
Я не думаю, что есть способ контролировать задержку и запускать этот сценарий автоматически, когда он превышает некоторый порог выше эталонного? pacmd info | grep "current latency"и, pacmd statкажется, дают одинаковые числа задержки / размер буфера независимо от того, насколько велика фактическая задержка (например, когда гарнитура выходит за пределы диапазона и возвращает ее обратно), так что, возможно, другая задержка отвечает за задержку?
Ponkadoodle
2
@ odinho-Velmont переключается между ad2p_sinkи offработает на меня. Я недавно добавил это в свой скрипт управления звуком / громкостью Pulse, который может кому-то пригодиться
Сэм Мейсон,
21
  • Установите pavucontrol: sudo apt install pavucontrol
  • Запустить pavucontrolиз меню
  • Перейти к устройствам вывода
  • Перейти к устройству Bluetooth
  • Перейти к Advanced
  • Там вы можете установить смещение задержки на значение в миллисекундах (плюс или минус). Чтобы убедиться в значении, вы должны начать с любого значения, например, 250,00 миль.
  • Воспроизведите любой «тест синхронизации звука» с YouTube и установите скорость воспроизведения на 0,25 (сделайте ее медленнее), и оттуда вы можете начать замечать, является ли значение правильным, или его необходимо увеличить или уменьшить.
Рулф Ренкема
источник
2
Убрал лишний sass из ответа - не надо хамить. Кроме того, это звучит так, как будто это должно сработать, но, похоже, на самом деле это ничего не делает для меня ...
naught101
Для меня это работает для воспроизведения YouTube с динамиками Bluetooth. Благодарю. Когда я впервые открыл pavucontrol, расширенный параметр был скрыт. Пришлось вертикально расширить окно.
user75505
11

Иногда я получаю подобную проблему, независимо от используемого игрока. Mine представляет собой Bluetooth 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, как он появляется, но для корректной работы с теми устройствами, которые не имеют профиля a2dp или профиля 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 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

Теперь, 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

Я перепробовал много подходов к этой проблеме, но ничего не смог исправить. Затем я наткнулся на set-port-latency-offset

Если вы используете pulseaudio, сделайте:

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

Это даст вам интерфейс Bluetooth. Теперь установите время ожидания соответственно:

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

Я использую 100000 микросекунд, которые прекрасно работают для меня.

Ариндам Мани Дас
источник
1
Для всех, кто наткнулся на этот старый пост в поисках ответа, ответ Ариндам Мани Дас работает отлично. Если вы получаете сообщение об ошибке «нет такой сущности», запустите «карты списка pactl» и проверьте, какие порты доступны для вашего устройства. Мне пришлось изменить «выход динамика» на «выход гарнитуры» во второй команде, так как мое устройство не имеет порта вывода динамика.
Билли Фаррингтон
1

Вот что для меня решило: $ sudo apt-get install phonon-backend-vlcи убедитесь, что это предпочтительный бэкэнд, в KDE перейдите в [Настройки системы] [Мультимедиа] [Настройки аудио и видео] [Бэкенд] и используйте [Кнопка предпочтений]

dargaud
источник
1
@dargaud Я рекомендую расширить это, чтобы объяснить, как сделать его предпочтительным бэкэндом.
Элия ​​Каган
0

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

Скачайте bluetooth manager и используйте его для управления настройками гарнитуры. Установите для параметров звука значение High Fidelity Playback (A2DP), а затем перейдите к настройкам звука.

Алекс Форс
источник
1
Перейдите по управлению Bluetooth и зайдите в Audio Profile, а затем выберите 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
raahlb
источник
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 микросекунд, как рекомендовал Ариндам, и это также отлично работает для меня.

Якир Магрисо
источник