bluez端点不适用于音频源

时间:2018-11-06 22:00:05

标签: bluetooth raspbian bluez speaker

我正在尝试使用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作为音频源的预期方式是什么?

1 个答案:

答案 0 :(得分:0)

我通过在调试模式下运行bluetoothd来解决了问题,发现在先前注册的端点上使用路径SetConfiguration调用了SetConfiguration / /A2DP/SBC/Source/1 。在线搜索该路径使我发现它与bluealsa关联,后者正在系统启动时注册端点,然后接收到媒体端点回调,而不是我的端点。杀死bluealsa之后,我的音频源端点便能够按预期接收媒体端点回调。