首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >脉冲音频不检测蓝牙耳机

脉冲音频不检测蓝牙耳机
EN

Stack Overflow用户
提问于 2014-07-04 19:51:29
回答 2查看 19.3K关注 0票数 4

我正在尝试将蓝牙耳机连接到我的RPI上。我的设置如下:

  • archlinux-arm,内核: linux-raspberrypi 3.12.23-1
  • bluez4 4.101-4来自奥尔,构建和安装
  • 蓝光-工具0.1.38-3
  • 蓝军- 5.20-1
  • 脉冲音频5.0-1
  • 脉冲音频-阿尔萨2-3

我扫描该设备,成功地配对它,添加作为受信任的,并连接它:

代码语言:javascript
复制
hcitool scan
bluez-simple-agent hci0 <MAC>
bt-device --set <MAC> Trusted 1
bt-audio -c <MAC>

之后,设备状态如下(bt-device -i <MAC>输出):

代码语言:javascript
复制
[00:23:7F:2A:3B:24]
Name: PLT 510
Alias: PLT 510 [rw]
Address: 00:23:7F:2A:3B:24
Icon: audio-card
Class: 0x200404
Paired: 1
Trusted: 1 [rw]
Blocked: 0 [rw]
Connected: 1
UUIDs: [Headset, Handsfree]

所以,一切看起来都很好,对吧?嗯,不完全是。

问题是当我尝试播放音频时,因为PulseAudio似乎没有识别它,也没有注册sourcesink条目:

代码语言:javascript
复制
[root@alarmpi bluetooth]# pactl list sources short
0   alsa_output.platform-bcm2835_AUD0.0.analog-stereo.monitor   module-alsa-card.c  s16le 2ch 44100Hz   IDLE
[root@alarmpi bluetooth]# pactl list sinks short
0   alsa_output.platform-bcm2835_AUD0.0.analog-stereo   module-alsa-card.c  s16le 2ch 44100Hz   SUSPENDED

我已经检查了module-bluetooth-policymodule-bluetooth-discover模块是否已加载。甚至试图再次卸载和加载:

代码语言:javascript
复制
pactl unload-module module-bluetooth-discover
pactl load-module module-bluetooth-discover

已成功加载模块,但仍未显示在sourcessinks列表中。

我还尝试配置/etc/bluetooth/audio.conf以启用不同的选项,如:

代码语言:javascript
复制
Enable=Source,Sink,Media,Socket
Enable=Source,Sink,Headset,Gateway,Control,Media,Socket
Enable=Source,Sink,Media
...

但这并没有改变什么。

我完全没有想法了..。为什么PulseAudio不认识它?我错过了什么吗?我需要一些特殊的方式configureI PulseAudio吗?

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2014-12-15 10:32:32

在此期间,我设法解决了这个问题,下面是对我起作用的步骤。

所讨论的操作系统是archlinux-arm.

安装

安装下列软件包:

  • bluez4-4.101-4
  • bluez-tools-0.1.38-3
  • 蓝军- 5.21-2
  • libpulse-4.0-6
  • pulseaudio-4.0-6
  • 脉冲音频-阿尔萨-2-2
  • alsa-utils

注: 我设法让PulseAudio使用这里列出的特定包版本来检测我的蓝牙耳机。其他一些版本也起作用,但我尝试过的大多数组合都有我无法解决的问题。 大多数软件包可以在8月构建和安装(bluez4,bluez tools,.),而其他软件包则可以很容易地用pacman安装。

附加准备

在我们安装了这些包版本之后,我们不希望pacman稍后在进行系统升级时更新它们。为了防止这种情况,我们将下面一行添加到我们的/etc/pacman.conf

代码语言:javascript
复制
IgnorePkg = libpulse pulseaudio pulseaudio-alsa bluez bluez-tools

PulseAudio无法使用bluez4存在问题,特别是在使用bluez4 Version4.1及更高版本和pulseaudio 3.0或更高版本时未能切换到A2DP配置文件。可以通过从Socket中启用的列表中删除/etc/bluetooth/audio.conf参数来解决这一问题。

代码语言:javascript
复制
# Enable=Headset,Sink,Source,Socket
Enable=Headset,Sink,Source

如果这还不够,请尝试添加一个额外的行:

代码语言:javascript
复制
Disable=Socket

正在运行

现在是启用和启动bluetooth服务的时候了:

代码语言:javascript
复制
systemctl enable bluetooth
systemctl start bluetooth

我们可以通过hcitoolbt-adapterbt-device来发现我们的设备,并连接到它。例如,使用后一种方法:

代码语言:javascript
复制
bt-device -d
bt-device -c <MAC>
bt-device --set <MAC> Trusted 1
bt-audio -c <MAC>

第一个命令发现设备,秒通过它的MAC地址连接到它。第三个将其设置为可信,以便以后在范围内自动连接到它。最后一个命令将其作为音频设备连接。在此之后,它应该可以在pulseaudio中使用。

与PulseAudio一起使用

通过pulseaudio --start启动PA。

检查源和汇是否正确识别:

代码语言:javascript
复制
pactl list sources short
pactl list sinks short

您应该看到您的BT接收器和源列出,这意味着PA已经检测到他们。注意汇和源旁边的ID值。使用它们将BT设置为默认接收器/源:

代码语言:javascript
复制
pacmd set-default-source <BT_SOURCE_ID>
pacmd set-default-sink <BT_SINK_ID>

您可以通过pacmd list-cards找到BT卡id及其支持的配置文件。您可能至少会看到其中列出的A2DPHSP配置文件。你可以像这样在他们之间切换:

代码语言:javascript
复制
# pacmd set-card-profile <card_id> <profile_name>
pacmd set-card-profile 1 a2dp
pacmd set-card-profile 1 hsp

自动连接

包bluez-tools包含一个名为bt-monitor的工具,它捕获来自bluetoothd守护进程的D-总线信号,并为检测到的设备启动连接,这些设备是成对的(和受信任的)。运行bt-monitor和测试通过关闭和在您的BT耳机。

票数 4
EN

Stack Overflow用户

发布于 2014-11-18 07:49:57

老掉牙的问题,但我在寻找解决上述问题的方法时遇到了这个问题,所以我想我会来到这里,在我的设置中发布我是如何解决这个问题的。

事实证明,Pulse音频实际上没有打包或配置为作为系统守护进程运行,默认配置假定您将在会话中运行,理想情况是在X下运行。这对访问系统总线有直接影响:Pulse音频期望可以使用会话DBus,而蓝牙发现模块依赖于此来动态加载模块-buetooth设备并设置相应的接收器/源。

因此,您需要在DBus规则中添加一个异常。本指南这里建议在/etc/dbus-1/system.d/pulse.conf中添加以下内容:

代码语言:javascript
复制
<!DOCTYPE busconfig PUBLIC
"-//freedesktop//DTD D-BUS Bus Configuration 1.0//EN"
"http://www.freedesktop.org/standards/dbus/1.0/busconfig.dtd">
<busconfig>
  <policy user="root">
    <allow own="org.pulseaudio.Server"/>
    <allow send_destination="org.bluez"/>
    <allow send_interface="org.bluez.Manager"/>
  </policy>
  <policy user="pulse">
    <allow own="org.pulseaudio.Server"/>
    <allow send_destination="org.bluez"/>
    <allow send_interface="org.bluez.Manager"/>
  </policy>
  <policy context="default">
    <deny own="org.pulseaudio.Server"/>
    <deny send_destination="org.bluez"/>
    <deny send_interface="org.bluez.Manager"/>
  </policy>
</busconfig>

但是在我的例子中(Raspbian ),这个文件不是空的,所以YMMV。请注意,最后一部分(上下文默认,所有拒绝)都是关键的,如果缺少,PA将不会从Dbus获得通知。

加上规则,然后:

代码语言:javascript
复制
 service dbus restart
 service bluetooth restart
 service pulseaudio restart

当设备连接时,pactl应该列出一个蓝光源。祝好运!

ps:对不起,我没有一个确切的解决方案,但我很确定上述适用(最初的指南是为软呢帽.)

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/24580155

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档