Я пытаюсь воспроизвести звук с 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 в качестве источника звука?