我正在尝试使用A2DP将Raspbian的音频播放到蓝牙扬声器。
通过查看bluez源代码中的test/simple-endpoint
,看来在不带参数的情况下运行它应该向A2DP_SOURCE_UUID
的{{1}}注册一个端点。但是,使用0000110A-0000-1000-8000-00805F9B34FB
连接到蓝牙扬声器时,我看不到端点的任何回调方法都被称为(SelectConfiguration
/ SetConfiguration
)。我尝试了两种不同类型的蓝牙扬声器。
如果我改为在“ sbcsink”模式下运行bluetoothctl
,然后将手机连接到它,则会看到端点的方法(simple-endpoint
/ SelectConfiguration
)。因此,端点似乎适用于A2DP接收方uuid,而不适用于源1。
通过遍历dbus管理的对象,我可以找到与蓝牙扬声器相对应的SetConfiguration
:
org.bluez.MediaTransport1
我能够写入传输的文件描述符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
的{{1}}访问传输。
我在Rasbian Stretch上用bluez 5.43观察到了这种行为。我还尝试更新到最新的bluez 5.50,并看到了相同的行为。
使用bluez作为音频源的预期方式是什么?
答案 0 :(得分:0)
我通过在调试模式下运行bluetoothd
来解决了问题,发现在先前注册的端点上使用路径SetConfiguration
调用了SetConfiguration
/ /A2DP/SBC/Source/1
。在线搜索该路径使我发现它与bluealsa
关联,后者正在系统启动时注册端点,然后接收到媒体端点回调,而不是我的端点。杀死bluealsa
之后,我的音频源端点便能够按预期接收媒体端点回调。