Pierre-Yves Gillier Asked: 2010-08-19 02:48:32 +0800 CST2010-08-19 02:48:32 +0800 CST 2010-08-19 02:48:32 +0800 CST 我可以将我的计算机用作 A2DP 接收器/蓝牙扬声器吗? 772 首先,问题是:我使用 Cowon MP3 播放器作为带有基本耳塞的主要音乐播放器。 它提供 A2DP,我想让我的上网本(运行 UNE 10.04)充当接收器。 网上有一些关于 a2dp 的资源,但大部分都已经过时了: http://fosswire.com/post/2008/10/better-bluetooth-audio/ http://jprvita.wordpress.com/2009/12/15/1-2-3-4-a2dp-stream/ http://dpillay.wordpress.com/2010/09/27/ubuntu-10-04-a2dp-awesome-headset-music/ bluetooth 6 个回答 Voted Best Answer slangasek 2012-03-03T14:22:24+08:002012-03-03T14:22:24+08:00 要将您的 Ubuntu 机器用作 a2dp 蓝牙设备,您必须首先将其配置为注册为“a2dp sink”端点。 Ubuntu(10.04 及更高版本)中的bluez包包含一个名为sdptool的实用程序,可用于检查蓝牙设备是否配置为 a2dp 接收器。这是 sdptool 针对我的蓝牙耳机运行的输出(地址来自 gnome-control-center 中的“蓝牙设置”对话框): $ sdptool search --bdaddr 00:18:16:3A:3B:D4 a2snk Searching for a2snk on 00:18:16:3A:3B:D4 ... Service RecHandle: 0x10002 Service Class ID List: "Audio Sink" (0x110b) Protocol Descriptor List: "L2CAP" (0x0100) PSM: 25 "AVDTP" (0x0019) uint16: 0x102 Profile Descriptor List: "Advanced Audio" (0x110d) Version: 0x0102 $ 这是在我的本地 Ubuntu 机器上运行时的输出: $ sdptool search --bdaddr local a2snk Searching for a2snk on FF:FF:FF:00:00:00 ... $ 这表明 Ubuntu 机器并未将自己宣传为 a2dp 接收器。然而,它将自己宣传为 a2dp 来源: $ sdptool search --bdaddr local a2src Searching for a2src on FF:FF:FF:00:00:00 ... Service Name: Audio Source Service RecHandle: 0x10003 Service Class ID List: "Audio Source" (0x110a) Protocol Descriptor List: "L2CAP" (0x0100) PSM: 25 "AVDTP" (0x0019) uint16: 0x102 Profile Descriptor List: "Advanced Audio" (0x110d) Version: 0x0102 这使 Ubuntu 机器能够与作为音频源的耳机正确配对,但不能将 Ubuntu 机器用作蓝牙音频的输出(接收器)。 如果您编辑/etc/bluetooth/audio.conf,您可以通过在该部分下方添加此行来启用 a2dp 接收器支持[General]: Enable=Source 这既违反直觉的命名——因为我们在这里添加的是蓝牙接收器支持,而不是源支持——并且与该文件中声称所有实现的服务默认启用的注释相矛盾。:( 进行此更改后,您需要通过运行重新启动 bluetoothd sudo service bluetooth restart。 如果您之前在尝试进行此工作时已将您的 Android 设备和 Ubuntu 计算机配对,则需要删除双方的配对并重新配对,以便让 Android 将 Ubuntu 识别为可用的音频设备。 完成此操作后,Android 设备应显示为 PulseAudio 下的输入设备。如果 PulseAudio 没有检测到新的蓝牙音频源,您可能需要从命令行安装和加载蓝牙模块: sudo apt-get install pulseaudio-module-bluetooth pactl load-module module-bluetooth-discover 然后,您需要告诉 PulseAudio 使用环回连接(从源到接收器的直线)将此音频输入路由到您的输出/接收器(例如您的扬声器或蓝牙耳机)。 更高版本的 PulseAudio 可能包含 module-bluetooth-policy 并且可能已经为您设置了环回设备,但这似乎不是最常见的情况。 设置环回连接的半自动方式(如果您还安装了 pavucontrol GUI 程序)是简单地加载环回模块并使用 pavucontrol 对其进行配置,因为 PulseAudio 会记住这些设置。使用 pactl 从命令加载模块: pactl load-module module-loopback 如果您还没有听到任何声音,或者如果您得到奇怪的反馈效果,请不要担心,我们需要告诉新创建的设备从哪个源获取输入以及首先将输出发送到哪个接收器。 打开 pavucontrol 并打开其配置选项卡。确保您的蓝牙设备显示在此处(在使用 blueman-manager 或其他蓝牙工具与其配对后)并且配置文件设置为 A2DP。切换到输入设备选项卡并确保您的设备也显示在此处并且未静音。现在切换到“录制”选项卡并使用静音按钮旁边的选择框使新创建的环回连接使用您的设备作为源。切换到播放选项卡以选择环回连接应以相同方式使用的接收器。如果选项卡中未显示环回设备,请确保使用每个选项卡底部的选择框显示所有流。 您现在应该可以从您的设备(如果它正在播放)、您的扬声器或您选择的任何输出接收器中听到音频。当您的设备断开连接时,环回设备将回退到可用的接收器和源,这可能是不可取的,因此请确保将环回设备静音,直到您需要它为止。由于 module-*-restore 模块,下一次连接相同的蓝牙设备时,环回连接将恢复相同的接收器/源。 如果这不起作用,或者您没有安装 pavucontrol,您可以使用以下方法设置环回: pactl load-module module-loopback source_dont_move=yes source=$BTSOURCE sink=$SINK (替换$BTSOURCE为 PulseAudio 看到的蓝牙设备的源名称,例如bluez_source.14_DA_E9_2A_D7_57;并替换$SINK为您要将音频流发送到的 PulseAudio 输出的名称,例如:alsa_output.pci-0000_00_1b.0.analog-stereo。您可以完全省略 sink 参数并使其回退到一个活动的接收器,稍后通过 pavucontrol 更改它。) 你可以找到$SINK,pactl list sinks它显示在后面Name: 同样,您可以看到$BTSOURCEwithpactl list sources 当蓝牙设备断开连接时,该source_dont_move参数可防止环回连接回退到另一个音频源。相反,它已被删除,您下次必须重新设置它。 下面是一个示例(请记住将蓝牙地址中的 替换为!)::_ pactl load-module module-loopback source_dont_move=yes source=bluez_source.14_DA_E9_2A_D7_57 sink=alsa_output.pci-0000_00_14.2.analog-stereo 如果加载后备模块失败,请尝试删除source_dont_move=yes参数,它首先在 1.0 版本中可用。但是,请注意在删除此音频之前删除此环回连接,或者如果您的笔记本电脑麦克风未静音,您可能会收到一些非常糟糕的反馈。要在完成后手动断开此环回连接,请运行: pactl unload-module $(pactl list short modules | grep "loopback.*$BTSOURCE" | cut -f1) 再次,替换$BTSOURCE为指向您的蓝牙设备的 PulseAudio 源的名称。您还可以使用 load-module 命令返回的 id 卸载模块: $ pactl load-module module-loopback source_dont_move=yes source=bluez_source.14_DA_E9_2A_D7_57 sink=alsa_output.pci-0000_00_14.2.analog-stereo 15 $ pactl unload-module 15 参考: 博客文章概述了有关如何在 Ubuntu 中修复此问题的一些详细信息。 user47059 2012-03-03T13:20:11+08:002012-03-03T13:20:11+08:00 我使用从 Ubuntu 软件中心安装的 blueman。右键单击blueman图标*->“本地服务”->音频->勾选“高级音频接收”。顺便说一句,我用它在我的 Ubuntu 11.10 笔记本电脑上听我在我的安卓手机上播放的内容。 * blueman 图标显示在 gnome shell + ubuntu 11.10 的右下角,这是我的情况。我希望这在某种程度上对你有用。 dghodgson 2012-08-30T07:09:34+08:002012-08-30T07:09:34+08:00 现在在 Ubuntu 12.04 中真的很简单 连接您的蓝牙设备 搜索您的蓝牙设备并记下它的源编号: pactl list sources 对蓝牙设备进行环回: pactl load-module module-loopback source=$SOURCE_NUMBER 其中 $SOURCE_NUMBER 是您之前记下的数字。 例如,我输入以下内容以使音频播放正常工作: $ pactl load-module module-loopback source=3 而已!我发现最佳答案中的解决方案有点复杂,所以我以这种方式简化了它(更少打字和复制/粘贴)。虽然如果您删除蓝牙设备之前列出的任何音频设备,我的解决方案可能会中断pactl list sources。 另外,在断开蓝牙设备之前不要忘记移除环回模块: 记下您创建的环回设备的模块号: pactl list short modules 移除环回设备: pactl unload-module $MODULE_NUMBER 之前的答案是在 12.04 发布之前编写的,所以我确信有一些变化。例如,我不必手动启用将蓝牙设备用作音频源(默认情况下已启用)。但是,我有时必须在手机的蓝牙设置中切换“媒体音频”配置文件(运行 CyanogenMod 9.1.0 的三星 Captivate)。 可能有一种利用 dbus-monitor 的方法,通过使用 shell 脚本来监视蓝牙 A2DP 设备连接并自动为其加载环回模块,但这有点超出我的想象。 希望我们在 Ubuntu 12.10 中不再需要手动执行此操作。 user184485 2013-08-16T16:14:40+08:002013-08-16T16:14:40+08:00 对于 13.04,将您的源设备与 ubuntu 笔记本电脑配对,它就可以工作了!很高兴发现现在这么容易。 mniess 2016-08-18T13:39:19+08:002016-08-18T13:39:19+08:00 在 Ubuntu 16.04 中,这是开箱即用的。 Adel - MageBinary 2014-12-24T20:52:52+08:002014-12-24T20:52:52+08:00 比答案更简单的解决方案。 你可以简单地去 sudo apt-get install pulseaudio* 然后重新启动。重新启动后,连接到蓝牙并在手机上播放音乐。一切都将传输到您的计算机并在计算机的扬声器上播放。 是的!别客气。
要将您的 Ubuntu 机器用作 a2dp 蓝牙设备,您必须首先将其配置为注册为“a2dp sink”端点。
Ubuntu(10.04 及更高版本)中的bluez包包含一个名为sdptool的实用程序,可用于检查蓝牙设备是否配置为 a2dp 接收器。这是 sdptool 针对我的蓝牙耳机运行的输出(地址来自 gnome-control-center 中的“蓝牙设置”对话框):
这是在我的本地 Ubuntu 机器上运行时的输出:
这表明 Ubuntu 机器并未将自己宣传为 a2dp 接收器。然而,它将自己宣传为 a2dp 来源:
这使 Ubuntu 机器能够与作为音频源的耳机正确配对,但不能将 Ubuntu 机器用作蓝牙音频的输出(接收器)。
如果您编辑
/etc/bluetooth/audio.conf
,您可以通过在该部分下方添加此行来启用 a2dp 接收器支持[General]
:这既违反直觉的命名——因为我们在这里添加的是蓝牙接收器支持,而不是源支持——并且与该文件中声称所有实现的服务默认启用的注释相矛盾。:(
进行此更改后,您需要通过运行重新启动 bluetoothd
sudo service bluetooth restart
。如果您之前在尝试进行此工作时已将您的 Android 设备和 Ubuntu 计算机配对,则需要删除双方的配对并重新配对,以便让 Android 将 Ubuntu 识别为可用的音频设备。
完成此操作后,Android 设备应显示为 PulseAudio 下的输入设备。如果 PulseAudio 没有检测到新的蓝牙音频源,您可能需要从命令行安装和加载蓝牙模块:
然后,您需要告诉 PulseAudio 使用环回连接(从源到接收器的直线)将此音频输入路由到您的输出/接收器(例如您的扬声器或蓝牙耳机)。
更高版本的 PulseAudio 可能包含 module-bluetooth-policy 并且可能已经为您设置了环回设备,但这似乎不是最常见的情况。
设置环回连接的半自动方式(如果您还安装了 pavucontrol GUI 程序)是简单地加载环回模块并使用 pavucontrol 对其进行配置,因为 PulseAudio 会记住这些设置。使用 pactl 从命令加载模块:
如果您还没有听到任何声音,或者如果您得到奇怪的反馈效果,请不要担心,我们需要告诉新创建的设备从哪个源获取输入以及首先将输出发送到哪个接收器。
打开 pavucontrol 并打开其配置选项卡。确保您的蓝牙设备显示在此处(在使用 blueman-manager 或其他蓝牙工具与其配对后)并且配置文件设置为 A2DP。切换到输入设备选项卡并确保您的设备也显示在此处并且未静音。现在切换到“录制”选项卡并使用静音按钮旁边的选择框使新创建的环回连接使用您的设备作为源。切换到播放选项卡以选择环回连接应以相同方式使用的接收器。如果选项卡中未显示环回设备,请确保使用每个选项卡底部的选择框显示所有流。
您现在应该可以从您的设备(如果它正在播放)、您的扬声器或您选择的任何输出接收器中听到音频。当您的设备断开连接时,环回设备将回退到可用的接收器和源,这可能是不可取的,因此请确保将环回设备静音,直到您需要它为止。由于 module-*-restore 模块,下一次连接相同的蓝牙设备时,环回连接将恢复相同的接收器/源。
如果这不起作用,或者您没有安装 pavucontrol,您可以使用以下方法设置环回:
(替换
$BTSOURCE
为 PulseAudio 看到的蓝牙设备的源名称,例如bluez_source.14_DA_E9_2A_D7_57
;并替换$SINK
为您要将音频流发送到的 PulseAudio 输出的名称,例如:alsa_output.pci-0000_00_1b.0.analog-stereo
。您可以完全省略 sink 参数并使其回退到一个活动的接收器,稍后通过 pavucontrol 更改它。)$SINK
,pactl list sinks
它显示在后面Name:
$BTSOURCE
withpactl list sources
source_dont_move
参数可防止环回连接回退到另一个音频源。相反,它已被删除,您下次必须重新设置它。下面是一个示例(请记住将蓝牙地址中的 替换为!)
:
:_
如果加载后备模块失败,请尝试删除
source_dont_move=yes
参数,它首先在 1.0 版本中可用。但是,请注意在删除此音频之前删除此环回连接,或者如果您的笔记本电脑麦克风未静音,您可能会收到一些非常糟糕的反馈。要在完成后手动断开此环回连接,请运行:再次,替换
$BTSOURCE
为指向您的蓝牙设备的 PulseAudio 源的名称。您还可以使用 load-module 命令返回的 id 卸载模块:参考:
我使用从 Ubuntu 软件中心安装的 blueman。右键单击blueman图标*->“本地服务”->音频->勾选“高级音频接收”。顺便说一句,我用它在我的 Ubuntu 11.10 笔记本电脑上听我在我的安卓手机上播放的内容。
* blueman 图标显示在 gnome shell + ubuntu 11.10 的右下角,这是我的情况。我希望这在某种程度上对你有用。
现在在 Ubuntu 12.04 中真的很简单
连接您的蓝牙设备
搜索您的蓝牙设备并记下它的源编号:
对蓝牙设备进行环回:
其中 $SOURCE_NUMBER 是您之前记下的数字。
例如,我输入以下内容以使音频播放正常工作:
而已!我发现最佳答案中的解决方案有点复杂,所以我以这种方式简化了它(更少打字和复制/粘贴)。虽然如果您删除蓝牙设备之前列出的任何音频设备,我的解决方案可能会中断
pactl list sources
。另外,在断开蓝牙设备之前不要忘记移除环回模块:
记下您创建的环回设备的模块号:
移除环回设备:
之前的答案是在 12.04 发布之前编写的,所以我确信有一些变化。例如,我不必手动启用将蓝牙设备用作音频源(默认情况下已启用)。但是,我有时必须在手机的蓝牙设置中切换“媒体音频”配置文件(运行 CyanogenMod 9.1.0 的三星 Captivate)。
可能有一种利用 dbus-monitor 的方法,通过使用 shell 脚本来监视蓝牙 A2DP 设备连接并自动为其加载环回模块,但这有点超出我的想象。
希望我们在 Ubuntu 12.10 中不再需要手动执行此操作。
对于 13.04,将您的源设备与 ubuntu 笔记本电脑配对,它就可以工作了!很高兴发现现在这么容易。
在 Ubuntu 16.04 中,这是开箱即用的。
比答案更简单的解决方案。
你可以简单地去
然后重新启动。重新启动后,连接到蓝牙并在手机上播放音乐。一切都将传输到您的计算机并在计算机的扬声器上播放。
是的!别客气。