Конечные точки bluez не работают для аудиоисточника - PullRequest
0 голосов
/ 07 ноября 2018

Я пытаюсь воспроизвести звук с Raspbian на динамик Bluetooth через A2DP.

Если посмотреть на test/simple-endpoint в источнике bluez, то получается, что для его запуска без аргументов необходимо зарегистрировать конечную точку с A2DP_SOURCE_UUID из 0000110A-0000-1000-8000-00805F9B34FB. Однако я не вижу ни одного из методов обратного вызова конечной точки (SelectConfiguration / SetConfiguration) при использовании bluetoothctl для подключения к динамику Bluetooth. Я пробовал с двумя разными типами Bluetooth-колонок.

Если я вместо этого запускаю simple-endpoint в режиме "sbcsink", а затем подключаю к нему свой телефон, я вижу методы конечной точки, называемые (SelectConfiguration / SetConfiguration). Таким образом, кажется, что конечные точки работают для приемника A2DP, но не для исходного.

Я могу найти org.bluez.MediaTransport1, соответствующий громкоговорителю Bluetooth, перебирая управляемые объекты dbus:

import dbus

bus = dbus.SystemBus()
manager = dbus.Interface(bus.get_object('org.bluez', '/'), 'org.freedesktop.DBus.ObjectManager')
for path, ifaces in manager.GetManagedObjects().items():
    transport = ifaces.get('org.bluez.MediaTransport1')
    if transport is None:
        continue
    transport_obj = dbus.Interface(bus.get_object('org.bluez', path), 'org.bluez.MediaTransport1')
    (fd, read_mtu, write_mtu) = transport_obj.Acquire('w')
    taken_fd = fd.take()
    print(path, fd, taken_fd, read_mtu, write_mtu)

Я могу записать в дескриптор файла транспорта taken_fd, но я не могу управлять конфигурацией аудио, как я думаю, если бы транспорт был получен через org.bluez.MediaEndpoint1. Кроме того, это выглядит довольно странно, я не уверен, что этот транспорт предназначен для меня, чтобы получить доступ таким образом. Я ожидаю получить доступ к транспорту через MediaEndpoint1 SetConfiguration.

Я наблюдал такое поведение с bluez 5.43 на растяжке Расбиана. Я также попытался обновить до последней версии bluez 5.50 и увидел то же поведение.

Каков ожидаемый способ использования bluez в качестве источника звука?

1 Ответ

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

Я выяснил проблему, запустив bluetoothd в режиме отладки, и обнаружил, что SetConfiguration / SetConfiguration вызывается на ранее зарегистрированной конечной точке с путем /A2DP/SBC/Source/1. Поиск в Интернете этого пути привел меня к обнаружению, что он связан с bluealsa, который регистрировал конечную точку при запуске системы, а затем получал обратные вызовы конечной точки носителя вместо моей конечной точки. После убийства bluealsa моя конечная точка аудиоисточника смогла получить обратные вызовы конечной точки медиа, как и ожидалось.

...