1

更新:尚未解决,但解决方案的一部分。见下文。

我正在尝试通过蓝牙将我的 iPod 或其他智能设备连接到我的笔记本电脑(Kubuntu 13.10),并将 a2dp 编码的音乐流式传输到蓝牙扬声器。别介意我为什么不直接连接它们。我在让设备实际配对然后同时连接时遇到了很多麻烦,但现在我能够做到这一点。有一百万篇文章描述了通过更改 .asoundrc、/etc/bluetooth/audio.conf 以及通过 PulseAudio 的控制器加载环回模块来连接 BT 耳机的不同方法。但是,我永远无法让 PulseAudio 始终加载源和接收器,所以我放弃了这个想法并开始关注 James B 的这篇精彩文章:http: //jamesbond3142.no-ip.org/blog/ ?viewCat=Bluetooth

我得到了编译的代码。它使用(更新的?)用于 BlueZ 的 DBus API。按照他的指示,我能够将音乐导入或导出 a2dp“服务器”,但没有声音。在代码中,他等待两个 DBUS 方法调用 SelectConfiguration 和 SetConfiguration 以获得“传输”,我认为这是一个句柄或文件描述符,描述了音频应该去往/来自哪里。但是,这些事件的处理程序永远不会被调用。我使用本指南设置 dbus-monitor 在系统总线上监听这些调用:https ://wiki.ubuntu.com/DebuggingDBus 。但是,方法调用不显示。再一次,我尝试在系统总线上收听任何方法调用,并且有一些在我知道正在调用的 dbus-monitor 中没有显示。(即注册端点)

我看到来自 org.bluez 的信号,但没有方法调用。在详细模式下运行 bluetoothd 时,当我连接设备时,我会得到类似的结果:

bluetoothd[12118]: 音频/a2dp.c:setup_ref() 0x7f9e8ffbdac0: ref=2 bluetoothd[12118]: audio/avdtp.c:avdtp_set_configuration() 0x7f9e8ffd03f0: int_seid=1, acp_seid=1 bluetoothd[12118]: 音频/a2dp .c:setup_unref() 0x7f9e8ffbdac0: ref=1 bluetoothd[12118]: audio/avdtp.c:session_cb() bluetoothd[12118]: audio/avdtp.c:avdtp_parse_resp() SET_CONFIGURATION 请求成功 bluetoothd[12118]: audio/a2dp .c:setconf_cfm() 源 0x7f9e8ffa4600: Set_Configuration_Cfm bluetoothd[12118]: audio/avdtp.c:avdtp_sep_set_state() 流状态已更改:IDLE -> CONFIGURED bluetoothd[12118]: audio/avdtp.c:session_cb() bluetoothd[12118] : audio/avdtp.c:avdtp_parse_resp() OPEN 请求成功

但在另一篇文章中,我看到有人有这个:

bluetoothd[8315]: 音频/a2dp.c:setup_ref() 0x7f1f8300b000: ref=2 bluetoothd[8315]: audio/avdtp.c:avdtp_set_configuration() 0x7f1f83012250: int_seid=2, acp_seid=1 bluetoothd[8315]: 音频/a2dp .c:setup_unref() 0x7f1f8300b000: ref=1 bluetoothd[8315]: audio/avdtp.c:session_cb() bluetoothd[8315]: audio/avdtp.c:avdtp_parse_resp() SET_CONFIGURATION 请求成功 bluetoothd[8315]: audio/a2dp .c:setconf_cfm() Sink 0x7f1f82fc3210: Set_Configuration_Cfm bluetoothd[8315]: audio/media.c:media_endpoint_async_call() 调用 SetConfiguration: name = :1.65 path = /MediaEndpoint/A2DPSink

bluetoothd[8315]: audio/avdtp.c:avdtp_sep_set_state() 流状态改变:IDLE -> CONFIGURED bluetoothd[8315]: audio/avdtp.c:session_cb() bluetoothd[8315]: audio/avdtp.c:avdtp_parse_resp() OPEN 请求成功

此时我有两个理论:1)当我的设备连接时,BlueZ 没有将它发送到我正在观看的总线 2)我没有正确观看(是否还需要使用 dbus_bus_add_match () 添加 method_calls ?)

我很难相信第二个,因为 James B 的代码为他工作,而我没有修改它。我正在使用 bluez 4.101 版。(我认为和他一样)很难找到 BlueZ 调用这些方法的确切条件。

当我启动程序时,我的 syslog 会这样说:

bluetoothd[8519]:端点注册:发送方=:1.166 path=/MediaEndpoint/A2DPSource

并在程序退出时取消注册。

目前我想不出要添加的其他细节,但如果我没有提供足够的信息,我很高兴。提前致谢。

更新 有点尴​​尬,但我今天绞尽脑汁想为什么 LINUX 系统不会获得文件句柄......嗯......所以我将sudo附加到程序调用(James B 的 a2dp-alsa 程序)并且它起作用了。至少对于输入设备。输出(BT 扬声器)仍然没有任何结果,但我会尽快弄清楚并在此处发布结果。

我在哪里收集我的菜鸟徽章?:(

4

1 回答 1

1

我没有继续使用 BlueZ 4。我升级到了 BlueZ 5 和 PulseAudio 5,它们比以前的版本更好地协同工作。之后,我终于可以使用 pactl loopback 模块了。(有关更多详细信息,请参阅此帖子。)

于 2014-04-08T13:21:22.930 回答