分享蓝牙耳机A2DP音频卡顿原因及解决思路

news/2024/10/20 11:29:10/

背景

最近一直在更新博客,我觉得写博客有三个好处,一是很多东西时间久了就会忘,记下来方便自己以后回忆和总结,二是记下来可以加深自己对知识的理解,三是可以知识分享,方便他人。
言归正传,今天分享我曾经做过的某高端蓝牙耳机的A2DP音频卡顿原因分析和解决思路,A2DP音频卡顿从LOG方面看,一般都能从Audio DSP的错误log看出来:

问题及解决思路

audio dsp下溢

也就是underflow错误,意思是DSP那边拿不到数据帧造成的音频卡顿,这类错误有可能是耳机的BT HOST或者 controller的问题:

问题案例分析解决思路
耳机BTH问题比如我曾经碰到过的情况就是BTH在接受手机音乐的同时,又发生了其他调度,需要上行通过HFP协议上报电量等,由于耳机主CPU的mips不足,调度不及时,造成BTH没有及时读取BTC的audio数据。这种一般需要临时提高主CPU的mips。
耳机BTC问题BT Controller的问题就是由于某些原因,从手机收包不及时导致,比如耳机在接受A2DP音频流的同时,进行了BLE 扫描,过高的扫描占空比导致BTC收包不及时,也有可能是信号问题导致重传太多,收包不及时等等。这种需要BT Controller具体分析了,BLE占空比太高就要想办法消减或者打散,信号问题就要和硬件一起分析。
手机蓝牙问题比如我曾经碰到过在播放高清音频的时候,手机发过来的包就有丢包,后来发现手机在播放高清音频的同时,在做BLE SCAN造成的,过高的BLE占空比造成了音频发包有很大延迟需要把BLE SCAN的window打散,不能造成音频的丢包

audio dsp上溢

也就是overflow错误,意思是蓝牙这边送到DSP的数据帧太多,导致DSP解码播放不及时造成的卡顿,这类错误有可能是DSP本身的问题或者是蓝牙的问题:

问题案例分析解决思路
DSP本身问题DSP本身性能不足,由于某些导致播放速度太慢造成的问题需要DSP查看为啥cpu load太重
蓝牙的问题比如我曾经碰到过手机蓝牙的高清音频通过动态码率发送,一时大量数据发送过来,造成了audio DSP播放不及时可以通过加大DSP接收buffer解决问题

SN或者TS不连续

sn和ts是保证蓝牙数据包能被audio dsp解码播放的关键参数,如果发生了SN或者TS不连续错误,说明蓝牙存在丢包或者重复收包的可能:

问题案例分析解决思路
手机蓝牙问题手机发过来的数据就有SN或者TS不连续可以通过抓取手机蓝牙音频数据,然后dump出来,通过音频软件分析,比如adobe audition就是个很好的音频分析软件
耳机BTC问题耳机蓝牙芯片由于某些原因存在丢包的发生这个需要bt controller具体分析

DSP性能不足或者解码错误

这类错误一般都是DSP自身的错误,需要DSP去查看。

总结:

以上这四类蓝牙A2DP卡顿问题原因和解决思路是我在具体项目中碰到过的,实际中应还有其他的原因,我只能在此抛砖引玉。


http://www.ppmy.cn/news/1538477.html

相关文章

智能手机、平板和笔记本电脑出口俄罗斯认证解析

智能手机、笔记本电脑和平板电脑,它们的监管范围相似,需要获得EAC 合格证、FAC电信认证和FSS加密认证,才能进口、清关并在俄罗斯市场上销售。 一、海关联盟EAC 认证 是根据 EAC 要求强制批准的证书,并且受到所有国家海关和市场的…

docker k8s mysql 命令行 sql 不能输入中文

目录 目标现象原因解决 目标 在 docker 容器中,通过 mysql -u name -p 的方式登录命令行终端后,可能会出现,在执行 sql 语句时,可能会出现无法输入中文字符的情况。 现象 如 update table_name set column_name abc_姓名 whe…

Sentinel最全笔记,详细使用步骤教程清单

一、Sentinel的基本功能 1、流量控制 流量控制在网络传输中是一个常用的概念,它用于调整网络包的发送数据。然而,从系统稳定性角度考虑,在处理请求的速度上,也有非常多的讲究。任意时间到来的请求往往是随机不可控的,…

计算机视觉学习笔记--高斯金字塔,DoG金字塔和拉普拉斯金字塔附带代码

尺度空间和图像金字塔 尺度并非指图像的大小,而是指图像的模糊程度,从近距离到远距离图像越来越模糊的过程,也是图像的尺度越来越大的过程。尺度空间是图像在不同尺度下的连续表示。其中最常见的是使用高斯核对图像进行卷积。随着高斯滤波核…

【QT Quick】C++交互:暴露 C++ 对象到 QML

【QT Quick】C交互:暴露 C 对象到 QML 在 Qt Quick 开发中,使用 Context Property 将 C 对象暴露给 QML 是一种直观有效的方式。这种方法允许我们直接在 QML 中访问 C 对象的属性和方法,而无需使用信号和槽。这篇文章将详细展开如何通过 Con…

Excel重新踩坑1:加密保护工作簿、编辑保护工作簿、编辑保护工作表、允许编辑区域;填充柄;同时编辑多个单元格为同一个值

0、工作簿和工作表的概念: 一个Excel文件就是一个工作簿,工作簿当中有很多工作表,每个工作表中有很多单元格构成。 1、加密保护工作簿:全部保护起来 给工作簿设置密码,需要密码才能打开工作簿,看到其中的…

力扣面试150 最大正方形 二维DP 记忆化搜索 DFS

Problem: 221. 最大正方形 &#x1f468;‍&#x1f3eb; 参考题解 class Solution {public int maximalSquare(char[][] matrix) {// base condition: 如果矩阵为空&#xff0c;直接返回面积为 0if (matrix null || matrix.length < 1 || matrix[0].length < 1) {re…

阿里云的Qwen2.5-Coder 和 Qwen2.5-Math专有模型怎么样?

阿里云发布Qwen2.5 系列模型&#xff0c;最新发布的 Qwen2.5 系列中包括普通的大语言模型 (LLM) 以及针对编程和数学的专用模型&#xff1a;Qwen2.5-Coder 和 Qwen2.5-Math。 包括&#xff1a; Qwen2.5: 0.5B、1.5B、3B、7B、14B、32B 和 72BQwen2.5-Coder: 1.5B、7B 和 32B&…