Featured image of post 通过偷共享库的方式让 Debian 在使用 pipewire-pulse 连接蓝牙听歌时使用 AAC 编码传输音频流

通过偷共享库的方式让 Debian 在使用 pipewire-pulse 连接蓝牙听歌时使用 AAC 编码传输音频流

在阅读本文前请确保自己拥有使用Linux的一些基本知识,否则你可能看不懂这篇文章。

0x00 前言

前阵子笔者上了 Linux Desktop 的车,在大部分场景下换掉了越来越创的 Windows 作为主力桌面环境。
而居家办公肯定少不了音乐,身为一个万年蓝牙党,笔者在给 Debian 12 安装蓝牙服务和 Cider 后戴上蓝牙耳机点击播放,响起的音乐音质却仿佛在炸厕所。
经过一番谷歌,笔者得知音质差的原因是由于 KDE 预装的 pipewire-pulse 的蓝牙音频默认没有启用除 SBC 以外的音频流编码。但是笔者接连换了好几副支持 AAC 编码的蓝牙耳机,却都只有 SBC 编码提供支持。
经过了三个小时惊险的折腾,笔者终究是找到了问题的解决方案。

0x01 为什么没有 AAC 编码器

众所周知,Debian 是一个自由的操作系统,因此其软件包仓库里面也仅包含自由软件。
而 AAC 编码器,按照 🔗Debian Wiki 上的说法,是不自由的,所以没有包含在 Debian 的软件仓库当中。
在偷共享库之前笔者咨询了若干使用其他发行版的朋友,包括 Arch Linux 在内的发行版在内,都是拥有预先编译好的 AAC 编码器支持的。
既然正经安装拿不到东西,那就偷呗!

如图所示,文件清单里没有 libspa-codec-bluez5-aac.so 文件,这就是 AAC 编码器的共享库文件

0x02 准备工作

最坏的情况下,这个共享库文件是需要自己编译的。
源代码请参考 🔗这里
但幸运的是我找到了一个 🔗仓库 ,里面放着一些现成的 libspa-codec-bluez5-aac.so 文件可以直接使用。
不过如果你真的在使用不符合要求的平台那就只能自己想办法了。

打开终端,输入命令 sudo apt search libspa-0.2 ,然后根据输出判断包版本。

如图所示,笔者的 libspa-0.2 相关软件包的版本均为 0.3.65 ,所以需要在上述仓库里下载版本号为 0.3.65 的共享库文件。如果你在使用 sid 版本的话,可能需要使用更新版本的共享库文件。

0x03 安装

将下载好的压缩包放在一个文件夹里,依次执行如下命令。

1
2
3
tar -xzvf <你的原生库压缩包名称>
sudo cp libspa-codec-bluez5-aac.so /usr/lib/x86_64-linux-gnu/spa-0.2/bluez5/libspa-codec-bluez5-aac.so
sudo systemctl reboot

执行前请注意保存好你的文件。
如果一切顺利的话,重新启动后应该就可以切换蓝牙耳机的配置文件了。

0x04 错误示范

可能这才是笔者写这篇文章的真正目的

错误姿势 1 :从 Void Linux 偷 xbps 包的时候偷成了 32 位的,结果把共享库复制进去没有任何效果

错误姿势 2 :给 0.3.65 的模块装 0.3.79 的插件,然后试图手动升级整个 libspa-0.2 软件包,结果把依赖搞炸了差点连自己的 KDE 都一块儿送走

最后拿 dpkg 手动覆盖安装了一遍旧版的软件包才勉强把依赖救回来。

0x05 结语

看来笔者的 Linux 之旅还有很多的东西要学啊。

Licensed under CC BY-NC-SA 4.0
萌ICP备20228848号

鸣谢:🔗Hugo 🔗Stack 🔗Jimmy 🔗real186526