PulseAudio与蓝牙音频
PulseAudio与蓝牙音频
背景
Linux下面是怎么使用蓝牙音频的呢? 今天我们一起来看看,通过命令行使用 PulseAudio 来联动蓝牙音频。
PulseAudio与Bluetooth音频
PulseAudio的所有蓝牙功能都依赖于BlueZ
,此外,HFP支持还需要oFono
。
PulseAudio 支持3个主要的和音频相关的蓝牙profiles:
- A2DP (Advanced Audio Distribution Profile)
- HSP (Headset Profile)
- HFP (Hands-Free Profile)
PulseAudio蓝牙后端
Bluetooth backend listens to BlueZ and oFono events on D-Bus and automatically creates PulseAudio cards, sources, and sinks for all discovered Bluetooth devices.
PulseAudio的蓝牙后端会监听D-Bus上的BlueZ和oFono事件,然后对于多有发现的蓝牙设备自动地创建PulseAudio声卡,sources和sinks。
现在比较新的版本,蓝牙连接后,使用aplay -l
或ls /proc/asound/
看不到PulseAudio
蓝牙虚拟的出来的声卡,需要使用PulseAudio
的命令pactl list cards
查看
蓝牙音频也可以不用PulseAudio
,使用 BlueALSA (bluez-alsa),这个我们后面再学习研究。
前提条件
蓝牙
蓝牙模块已通
确保bluez的守护进程已启动
$ bluetoothd&
确保已开启蓝牙设备
$ rfkill unblock bluetooth
确保已up蓝牙
$ hciconfig hci0 up
如果提示要找到用户,则还需要添加bluetooth用户
#添加bluetooth用户 $ sudo usermod -G bluetooth -a xxx
PulseAudio
安装
pulseaudio
及相关插件,可以通过编译安装或包的方式(带包管理)#包的方式 $ sudo apt-get install pulseaudio pulseaudio-module-bluetooth
保证
pulseaudio
已经起来,未启动则开启:$ pulseaudio --system
新建
pulse
用户`#新建pulseaudio用户 $ sudo addgroup -S pulse $ sudo adduser -S pulse -G pulse
蓝牙配对连接
使用蓝牙音频的前提是已配对连接蓝牙音频设备,这里使用bluetoothctl
工具进行蓝牙配对连接。
$ bluetoothctl
#上电
[bluetooth]# power on
[bluetooth]# agent on
[bluetooth]# default-agent
#扫描
[bluetooth]# scan on
#配对
[bluetooth]# pair xx:xx:xx:xx:xx:xx
#连接
[bluetooth]# connect xx:xx:xx:xx:xx:xx
#trust 自动重连
[YYY]# trust xx:xx:xx:xx:xx:xx
PulseAudio音频端
查看是否已经有虚拟的蓝牙音频声卡及相关的 sinks 和 sources:
$ pacmd list-cards
$ pactl list sinks
$ pactl list sources
A2DP模式
#设置card profile
$ pacmd set-card-profile bluez_card.xx_xx_xx_xx_xx_xx a2dp_sink
#设置默认sink
$ pacmd set-default-sink bluez_sink.xx_xx_xx_xx_xx_xx.a2dp_sink
#使用paplay播放音频
paplay -v xxx.wav
HSP模式
$ sudo hcitool cmd 0x3F 0x01C 0x01 0x02 0x00 0x01 0x01
#设置card profile
$ pacmd set-card-profile bluez_card.xx_xx_xx_xx_xx_xx headset_head_unit
#设置默认sink
$ pacmd set-default-sink bluez_sink.xx_xx_xx_xx_xx_xx.headset_head_unit
#设置默认source
$ pacmd set-default-source bluez_source.xx_xx_xx_xx_xx_xx.headset_head_unit
#使用paplay播放音频
paplay -v xxx.wav
#使用parecord录音
parecord -v yyy.wav
扩展–修改PulseAudio日志等级
pacmd set-log-level 4
pacmd set-log-meta 1
#之后查看syslog