为什么 A2DP 发送的音频在 Ubuntu 16.04 上可能听不到?

为什么 A2DP 发送的音频在 Ubuntu 16.04 上可能听不到?

我尝试使用 Ubuntu 16.04 使蓝牙 A2DP 音频在汽车多媒体系统(W53850,丰田品牌,2011 年)上运行。

音频在 Windows 或 Ubuntu 14.04 上都可以正常工作,因此问题一定是 Ubuntu 16.04 特有的。这不是硬件问题,因为当我双启动到 Windows 10 时,蓝牙音频在同一台 Ubuntu 16.04 笔记本电脑上正常工作。

整个安装过程在 Ubuntu 14.04 和 Ubuntu 16.04 中看起来和感觉完全相同,唯一明显的区别是,当我最终在 16.04 上播放声音时,我听不到汽车扬声器的任何声音。

这是我详细使用的程序:

  1. 从车辆的多媒体系统中删除旧配对
  2. 从 Ubuntu 中删除旧配对

  3. 开始汽车多媒体系统的配对程序。

  4. 在 Ubuntu 上的“蓝牙设置”下单击“+”以获取“设备搜索”
  5. 几秒钟后,出现设备“CAR M_MMEDIA”,单击它。
  6. 在 Ping 选项下选择正确的 PIN(无论如何它都是“0000”,但是为了安全起见)。好的。
  7. 接下来。一秒钟后,我收到确认信息“已成功设置新设备‘CAR M_MEDIA’。退出。
  8. 在汽车系统中退出“设置”菜单(否则声音将被阻止)。
  9. 在声音设置中,我在“播放声音”列表中选择“Handsfree CAR M_MEDIA”。声音设置
  10. 播放一些音乐。
  11. 音乐播放器显示播放时间的进展 - 这表明播放器正在有效地将数据推送到脉冲音频接收器中。
  12. 没有听到声音。

我目前能够做的诊断

在 Ubuntu 14.04 上,我能够从命令行发现服务:

$ bt-device -s "CAR M_MEDIA"
Discovering services...

[RECORD:65537]
SrvClassIDList: "AudioSink"
ProtocolDescList:
    "L2CAP", 0x19
    "AVDTP", 0x100
BTProfileDescList:
    "AdvAudio", 0x100
SrvName: "Audio Sink"
ProviderName: ""

[RECORD:65538]
SrvClassIDList: "AVRemote"
ProtocolDescList:
    "L2CAP", 0x17
    "AVCTP", 0x102
BTProfileDescList:
    "AVRemote", 0x103
SrvName: "A/V RemoteControl"
ProviderName: ""

Done

我无法在 16.04 上执行相同的操作,因为我的所有两台 16.04 计算机都显示错误

$ bt-device -s "CAR M_MEDIA"
Discovering services...
Failed to start SDP discovery. Please make sure you have bluez-utils installed on your system.

即使我bluetoothd在该--compat模式下运行。

也许 Ubuntu 14.04 以不同的采样频率发送声音(48 kHz 而不是 44.1 kHz)?但我不知道如何测试它。


这是序列中的 hcidump:a) 连接到音频接收器(汽车音响)b) 播放音乐,c) 停止音乐和 d) 断开连接。

Ubuntu 14.04 hcidump(音频作品)

Ubuntu 16.04 hcidump(音频不起作用)

答案1

bluez-utils目前被列为 trusty (14.04) 的过渡包,目前不适用于 Xenial (16.04)。研究表明,您需要的 Xenial 包是bluez-工具。

一个问题是,bluez-tools v0.2 后版本使用 bluez-5.20 API。由于 BlueZ 5 设备 API 中已删除 DiscoverServices,因此bt-device需要“sdptool”(包含在 14.04 版 bluez-utils 中)进行服务发现。

快速搜索表明sdptool现在可以在bluez 包。sdptool根据错误消息,此包似乎是必需的:

无法启动 SDP 发现。请确保您的系统上已安装 bluez-utils。

我的方法如下:

1)启用 Universe 存储库

2)安装必要的软件包

sudo apt install bluez bluez-tools

注意:如果我没记错的话,bluez是默认安装的,所以你可能需要

sudo apt-get install--重新安装 bluez

3)你也可能需要用于 OBEX 客户端和服务器端功能的 D-Bus 服务

sudo apt 安装 obex 数据服务器

资料来源:

您的问题中的错误信息

https://packages.ubuntu.com/

https://github.com/khvzak/bluez-tools

https://www.synopsys.com/software-integrity/security-testing/fuzz-testing/defensics/protocols/bt-obexs.html

https://en.wikipedia.org/wiki/OBject_EXchange

相关内容