Raspberry Pi3, bluealsa - подключен, но нет звука на динамике Bluetooth? - PullRequest
0 голосов
/ 11 ноября 2018

Резюме: все подключено, и кажется, что работает, но из динамика не выходит звук - как диагностировать или исправить?

Я пытаюсь воспроизвести звук с моего Raspberry Pi 3 на динамик Bluetooth, но он не работает.

Пи подключается к динамику Bluetooth (подтверждается автоматическим звуком на динамике при подключении, "raspberrypi подключен", и проверка echo "info 04:52:C7:5A:3B:A1" | bluetoothctl на Пи также показывает, что он подключен).

Громкость динамика не отключена, и другие устройства могут подключаться к нему и воспроизводить его. Проверка alsamixer подтверждает, что звук не отключен.

Но использование aplay для воспроизведения звука через bluetooth-динамик ведет только к оглушительной тишине. Хотя похоже, что работает:

$ aplay -D bluealsa:HCI=hci0,DEV=04:52:C7:5A:3B:A1,PROFILE=a2dp /usr/share/sounds/alsa/Front_Center.wav
Playing WAVE '/usr/share/sounds/alsa/Front_Center.wav' : Signed 16 bit Little Endian, Rate 48000 Hz, Mono

Я искал файлы журналов, в которых могла бы быть информация, но ничего не нашел.

конфигурация bluealsa

Я настроил это, следуя инструкциям здесь . Подробности этой настройки:

  • Raspbian Stretch, изображение 2018-10-09 (bluealsa v5.43 устанавливается из коробки)
  • bluez v5.49 скачан, собран и установлен (без ошибок)
  • /etc/dbus-1/system.d/bluetooth.conf отредактировано, следующие элементы добавлены к элементу root:
    • <allow send_interface="org.bluez.ThermometerWatcher1"/>
    • <allow send_interface="org.bluez.HeartRateWatcher1"/>
    • <allow send_interface="org.bluez.CyclingSpeedWatcher1"/>
  • И следующий элемент также добавлен к элементу busconfig верхнего уровня:
    • <policy group="bluetooth"><allow send_destination="org.bluez"/></policy>
  • Пользователь Пи добавлен в группу Bluetooth

Я пытался переместить детали HCI, устройства и профиля в файлы .asoundrc и /etc/asound.conf, но они дают одинаковые результаты (вывод на консоль предполагает успешное выполнение, но при использовании aplay звук из динамика не поступает).

Другие вещи (возможно, не относящиеся к делу, но в том числе и для полноты)

  • Пи-доступ через SSH (без головы)
  • при загрузке pi, sudo systemctl status blueto* показывает сообщение об ошибке в службе bluetooth: Failed to set privacy: Rejected (0x0b), по-видимому, проблема, связанная с загрузкой ( link ), которая устраняется путем ручного перезапуска службы bluetooth после загрузки использование systemctl (некрасиво, но пока неплохо)
  • нет подозрительных сообщений в dmesg, user.log или boot.log
  • но следующее было в daemon.log, оно коррелирует с выполнением команды aplay выше (но я пробовал эту команду несколько раз с одним и тем же выводом на консоль, он генерирует их только иногда):

.

Nov 10 21:02:16 rpi_3e5ccf bluealsa[789]: /usr/bin/bluealsa: Unsupported AT message: SET: command:+CLIP, value:1
Nov 10 21:02:16 rpi_3e5ccf bluealsa[789]: /usr/bin/bluealsa: Unsupported AT message: CMD: command:+CLCC, value:(null)
Nov 10 21:02:16 rpi_3e5ccf bluealsa[789]: /usr/bin/bluealsa: Unsupported AT message: SET: command:+CSRSF, value:0,0,0,1,0,0,0

1 Ответ

0 голосов
/ 11 ноября 2018

В итоге я не смог отладить это и потерял терпение, поэтому просто вытер SD и начал с нуля. Подробные шаги, которые я выполнил ниже, означают, что теперь я могу воспроизводить звук с помощью aplay без указания устройства, например ::100100

aplay /usr/share/sound/alsa/Front_Center.wav

1) Настройка изображения SD-карты

  • используйте etcher для записи 2018-10-09-raspbian-stretch.img
  • touch / boot / ssh
  • добавить подходящий файл /boot/wpa_supplicant.conf
  • edit / rootfs / etc / hostname

2) ssh-copy-id с хоста на пи, для удобного SSH

3) Настройка программного обеспечения на пи:

  • passwd
  • sudo apt update; sudo apt dist-upgrade
  • sudo apt install vim git screen htop rpi-update
  • sudo apt autoremove
  • sudo systemctl set-default multi-user.target # don't start X windows on boot
  • sudo BRANCH=next rpi-update
  • sudo reboot

4) Обновление bluez

  • sudo apt install libdbus-1-dev libglib2.0-dev libudev-dev libical-dev libreadline-dev
  • wget http://www.kernel.org/pub/linux/bluetooth/bluez-5.50.tar.xz tar -xf bluez-5.50.tar.xz`
  • cd bluez-5.50/
  • ./configure --prefix=/usr --mandir=/usr/share/man --sysconfdir=/etc --localstatedir=/var --enable-experimental
  • make -j4
  • sudo make install
  • sudo cp /etc/dbus-1/system.d/bluetooth.conf /etc/dbus-1/system.d/bluetooth.conf.bak, затем отредактируйте:
    • добавить к root: <allow send_interface="org.bluez.ThermometerWatcher1"/><allow send_interface="org.bluez.HeartRateWatcher1"/><allow send_interface="org.bluez.CyclingSpeedWatcher1"/>
    • добавить нового ребенка busconfig: <policy group="bluetooth"><allow send_destination="org.bluez"/></policy>

5) Получите работу Bluetooth

  • sudo adduser pi bluetooth
  • sudo reboot
  • bluetoothctl: scan on
  • bluetoothctl: trust 04:52:C7:5A:3B:A1
  • bluetoothctl: connect 04:52:C7:5A:3B:A1
  • aplay -D bluealsa:HCI=hci0,DEV=04:52:C7:5A:3B:A1,PROFILE=a2dp /usr/share/sounds/alsa/Front_Center.wav # test it works at all

6) Получите работу Bluetooth без указания устройства, создав следующий файл /etc/asound.conf:

pcm.bose {
 type plug
  slave {
    pcm {
      type bluealsa
      interface hci0
      device 04:52:C7:5A:3B:A1
      profile "a2dp"
    }
  }
  hint {
    show on
    description "Bose speaker"
  }
}
pcm.!default {
    type plug
    slave.pcm "bose"
}
ctl.!default {
    type hw
    card 0
}

Для справки и кредита, это основано на информации из следующих трех источников:

А в ответ на комментарий @Parthiban выше, вывод dbus-monitor из работающей системы:

signal time=1541964336.104905 sender=org.freedesktop.DBus -> destination=:1.1 serial=2 path=/org/freedesktop/DBus; interface=org.freedesktop.DBus; member=NameAcquired
   string ":1.1"
signal time=1541964336.105032 sender=org.freedesktop.DBus -> destination=:1.1 serial=4 path=/org/freedesktop/DBus; interface=org.freedesktop.DBus; member=NameLost
   string ":1.1"
method call time=1541964336.106756 sender=:1.0 -> destination=org.freedesktop.DBus serial=3 path=/org/freedesktop/DBus; interface=org.freedesktop.DBus; member=RequestName
   string "org.freedesktop.systemd1"
   uint32 7
signal time=1541964336.106880 sender=org.freedesktop.DBus -> destination=(null destination) serial=5 path=/org/freedesktop/DBus; interface=org.freedesktop.DBus; member=NameOwnerChanged
   string "org.freedesktop.systemd1"
   string ""
   string ":1.0"
signal time=1541964336.107024 sender=org.freedesktop.DBus -> destination=:1.0 serial=4 path=/org/freedesktop/DBus; interface=org.freedesktop.DBus; member=NameAcquired
   string "org.freedesktop.systemd1"
method return time=1541964336.107096 sender=org.freedesktop.DBus -> destination=:1.0 serial=5 reply_serial=3
   uint32 1
method call time=1541964336.108116 sender=:1.0 -> destination=org.freedesktop.DBus serial=4 path=/org/freedesktop/DBus; interface=org.freedesktop.DBus; member=ListNames
method return time=1541964336.108179 sender=org.freedesktop.DBus -> destination=:1.0 serial=6 reply_serial=4
   array [
      string "org.freedesktop.DBus"
      string "org.freedesktop.systemd1"
      string ":1.0"
   ]
...