当前位置: 首页 > news >正文

在i.MX8MP上如何使能BlueZ A2DP Source

1 软硬件环境

  • i.MX8MP EVK
  • QCC2076 Wi-Fi/BT Chipset
  • Linux Kernel Version: 6.6.x
  • Linux BlueZ version: 5.72

2 下载BT固件、配对、连接

gpioset --chip gpiochip5 7=0
gpioset --chip gpiochip5 7=1
hciattach /dev/ttymxc0 qca 115200 -t120 flow
bluetoothctl
[bluetooth]# power on
[bluetooth]# pairable on
[bluetooth]# scan on # 找到耳机 MAC
[bluetooth]# pair XX:XX...
[bluetooth]# trust XX:XX...
[bluetooth]# connect XX:XX...
...
[FreeBuds 3]# devices # 快速列出当前已连设备
Device D0:05:E4:17:0E:21 FreeBuds 3

3 检查 PipeWire/WirePlumber 是否在跑

loginctl enable-linger $(whoami) # 若 root 登录控制台可先启用 user-session
systemctl --user status pipewire.socket wireplumber.service
两条服务都应是 running,若未启动可手动拉起:
systemctl --user enable --now pipewire.socket wireplumber.service
WirePlumber 是 PipeWire 的会话守护,它负责把蓝牙 Transport fd 挂成可用 Sink。

4 把耳机切到 A2DP 高保真 Profile 并设为默认输出

4.1 列出卡 & Profile

wpctl status                        # 查看所有声卡与当前默认 Sink
wpctl inspect | grep profile # 找到蓝牙卡可用 profile
当前系统的 如下所示,名称为FreeBuds 3:
root@imx8mpevk:~# wpctl status
PipeWire 'pipewire-0' [1.0.5, root@imx8mpevk, cookie:1957396837]
...
├─ Devices:
│ 41. HD video [alsa]
│ 42. Built-in Audio [alsa]
│ 43. Built-in Audio [alsa]
│ 44. Built-in Audio [alsa]
│ 45. Built-in Audio [alsa]
│ 46. Built-in Audio [alsa]
│ 99. FreeBuds 3 [bluez5]

2.2 激活 A2DP Sink

wpctl set-profile a2dp-sink    # 切到高保真播放
wpctl set-default                   # 设为系统默认输出
当前系统的 如下所示,名称为FreeBuds 3:
root@imx8mpevk:~# wpctl status
PipeWire 'pipewire-0' [1.0.5, root@imx8mpevk, cookie:1957396837]
...
├─ Sinks:
│ 48. HD video Mono [vol: 0.40]
│ 50. Built-in Audio Mono [vol: 0.40]
│ 51. Built-in Audio Stereo [vol: 0.40]
│ 53. Built-in Audio Stereo [vol: 0.40]
│ 66. Built-in Audio Digital Stereo (IEC958) [vol: 0.40]
│ * 100. FreeBuds 3 [vol: 0.50]

3 播放本地音乐

播放器典型命令
mpvmpv song.flac (PipeWire 会自动把流送进默认 Sink)
gst-play-1.0gst-play-1.0 --audiosink=autoaudiosink track.mp3(autoaudiosink 路由到默认)
aplay(WAV 测试)aplay -D bluealsa:HCI=hci0,DEV=D0:05:E4:17:0E:21,PROFILE=a2dp test.wav(使用 bluez-alsa 时)
确认过程中可用:
wpctl status # 数据流出现于蓝牙 Sink 的 “CLIENTS” 栏
pw-top # 观察实时 PCM 量

4 常见问题速查

现象快速定位解决方案
wpctl status 找不到蓝牙卡WirePlumber 未启或蓝牙未 ServicesResolved#1 拉起服务,或在 bluetoothctl 中再次 connect
切到 a2dp-sink 秒断开耳机不接受 SBC—需 AAC/LDAC安装 libfdk-aac / libldacbt 并确保 WirePlumber bluez5.enable-msbcbluez5.enable-aac 打开
播放器仍走板载喇叭默认 Sink 未改再次 wpctl set-default <sink-ID> 或在 GUI (Helvum/QPWGraph) 拖拽

5 自动化:让耳机每次都走 A2DP

/usr/share/wireplumber/bluetooth.lua.d/50-bluez-config.lua 里加入:
bluez_monitor.properties["bluez5.auto-connect"] = {"a2dp-sink"}
bluez_monitor.properties["bluez5.profile-priority"] = {["a2dp-sink"] = 10}
WirePlumber 下次重启会自动首选高保真通道,无需手动切换。
http://www.dtcms.com/a/277506.html

相关文章:

  • 如何设计高并发架构?深入了解高并发架构设计的最佳实践
  • Nature子刊 |HERGAST:揭示超大规模空间转录组数据中的精细空间结构并放大基因表达信号
  • DETRs与协同混合作业训练之CO-DETR论文阅读
  • Pandas 的 Index 与 SQL Index 的对比
  • Flask中的路由尾随斜杠(/)
  • SQL140 未完成率top50%用户近三个月答卷情况
  • react中为啥使用剪头函数
  • (nice!!!)(LeetCode 面试经典 150 题 ) 30. 串联所有单词的子串 (哈希表+字符串+滑动窗口)
  • win10 离线安装wsl
  • 论文翻译:Falcon: A Remote Sensing Vision-Language Foundation Model
  • 26-计组-数据通路
  • 楼宇自动化:Modbus 在暖通空调(HVAC)中的节能控制(一)
  • Linux驱动开发1:设备驱动模块加载与卸载
  • java+vue+SpringBoo中小型制造企业质量管理系统(程序+数据库+报告+部署教程+答辩指导)
  • 查看Linux服务器显卡使用情况的详细教程
  • win11添加无线显示器(两个笔记本实现双屏)
  • 昇腾FAQ-A08-工具链相关
  • 小架构step系列13:测试用例的加载
  • 线性代数学习笔记
  • 求解线性规划模型最优解
  • Java行为型模式---观察者模式
  • AI基础设施展望
  • 《Mirage:首款基于实时世界模型的AI原生UGC游戏引擎,开启“边玩边生成”的游戏新时代》
  • Python实现小红书悬停框效果详解
  • 极矢量与轴矢量
  • 框架和库的区别
  • MCP4725 数据手册解读
  • 通信子网 V
  • cuda编程笔记(7)--多GPU上的CUDA
  • 黑马点评系类问题p63中ClassPathResource报错