Leohearts

拥有一颗坚强而又温柔的心 *version 1.1

cover

踩坑日记:Android 手机 LDAC 声音卡顿的解决方式

最近入手了水月雨的某款蓝牙耳机,到手后发现它用 LDAC 编码和手机连接时,声音有卡顿的问题,无论是默认的 LDAC Adaptive 还是固定 990kbps 都是有一半的时间卡顿,根本没法用。

一个简单的方式是,去开发者选项把 LDAC 的码率固定到 660kbps , 就可以在牺牲一点点音质(其实对于流媒体是没差)的情况下正常使用了。但是,这样的话每次重新连接耳机都需要重新去开发者选项调整一次,非常麻烦。

一开始我还以为是水月雨的问题,然而换了 Sony Linkbuds S 也是一样的问题,才知道是手机的问题。
Linux 蓝牙连接时默认也是 Adaptive, 是稳定可用的,虽然 wireshark 抓包显示码率在 300 ~ 660 kbps 之间自适应,并没有达到 990kbps.

Screenshot_20240919-190923.webp

解决方案 1 :使用额外的第三方软件

使用 Bluetooth Codec Changer 可以在耳机连接的时候自动切换到我们预先在应用内保存好的设置。我在 Android 14 中测试的结果非常好,只需在 App 内设置其码率为 660kbps, 之后耳机连接时都会自动切换到正确的固定码率,问题就解决了。

这个应用需要 $2 ~ $5 的专业版费用,不过你也可以通过 root 权限编辑其在 /data/ 下的私有配置文件来破解它。
使用非常稳定,此外,如果你是不信任 Adaptive 的码率,而非遇到声音卡顿的问题,这个应用也可以方便地把码率固定到 990 kbps ,也可以更改编码设置。

解决方案 2 :关闭蓝牙 A2DP 硬件加速

我们反过来再思考一下问题的起因:有些手机可以用 990 kbps,有些则不行,这是为什么呢?蓝牙的带宽并不只如此,那么是不是编码器出了问题呢?

在调整了各个选项后,我发现只要去开发者选项禁用蓝牙 A2DP 硬件加速就可以解决这个问题了。A2DP 是 LDAC 数据包传输时的上层协议,大概是硬件加速时这里的带宽不足,导致的 LDAC 码率受限吧。

这样更加方便一点,而且似乎解决了根本问题。只需要设置一次并重启手机,之后的蓝牙连接都不需要额外设置了。它在我的手机上解决了问题,我已经把 Bluetooth Codec Changer 卸载了。现在,不管是 990kbps 还是 Adaptive 的码率都不会卡顿了~

Screenshot_20240919-192743.webp

题外话

在退货水月雨后(其实当时退货最大的原因是它的设计问题,缺乏佩戴检测,盒子的设计也怪怪的,感觉到处都缺乏打磨),我在 1000XM4, 新款红米耳机 Pro 和 LinkBuds S 中纠结了很久,最后还是选了 LinkBuds S, 然后才发现原来蓝牙耳机和原生系统是可以有这么多交互的,原来没有魔改的 Android 本身就是支持很多耳机调整功能的,原来空间音频之类的技术也不需要必须是手机厂商的耳机配自家手机才能用。

下次应该不会再考虑国产品牌了,还是老老实实买 Sony/Pixel Buds 吧。

Screenshot_20240919-193403.webp

参考链接:

已有 3 条评论

  1. 我这边测试了你所说的关闭蓝牙 A2DP 硬件加速,然后连上耳机了但播放没有声音了

    1. 事实上我这里是可以的 红米K70 pro+cfm buds pro,虽然不能完全解决卡顿但出现的频率是卡顿程度都大大降低了,不清楚你的情况是什么,你也没有提供你的设备型号之类之类的信息

      1. 索尼xperia 1 iii+索尼wf1000xm5,从开发者选项里面改了设置之后过一段时间会自动恢复默认设置的…不知道是不是索尼锁死了开发者的设置

添加新评论