A2DP Profile ,Bluetooth A2DP 卡音,杂音问题的一般处理方法
在A2DP解Bug之前,需do something
- 是使用user load+ 关闭所有的log测试吗?
- 开Wi-FI了吗?
- 单个耳机出现?
- 必现吗?
- 卡因严重吗?一首歌,几次?
- 卡因的时间点,卡一下,还是连续卡?
- 有特殊的操作手法吗?或者场景?
- 空旷的环境,屏蔽室测试是否ok?
- 对比机相同的环境,相同的耳机,相同的时间怎样?
- 硬件测试ok吗?
- FW版本什么时候更新的?最新版本什么时候,差距大吗?
A2DP 影响因素
1.确保没有遮挡物
覆盖物会影响数据的空中传输,导致数据包丢失并产生卡顿。
2.有没有开启WiFi,对结果是否有影响
由于WiFi和蓝示是使用同一个频段的无线信号,周围的WiFi在使用时,也会对蓝牙有影响。而手机同时打开WiFi和BT,WiFi在大量获取数据,由于WiFi和BT使用同一根线,因此他们共同工作时是分时隙的。也就是说一段时间给WiFi,一段时间给BT,这样问话,当WiFi有大量数据传输的时候就可能会导致蓝于因为分不到时隙,而丢包。因为a2dp是stream 流, 不可能等那么久时间才传输,丢包后也不能重传。
3.硬件射频有没有问题,
有手机的话,请测一下硬件的数据,硬件指标设备射频等参数,硬件有问题时,也会对性能造成影响。
4.与特定款耳机是否有关
有时候问题不仅局限于上面的原因,还有可能是单款耳机的问题,有时候测试时会发现,有的耳机听歌效果就很好,有的耳机就不行,会卡顿。这是因为耳机本身设计的不好,导致出现丢包,或者处理不及时的情况发生。从而产生卡顿。
5.干净环境是否也有问题
如果能找到干净的环境,比如屏蔽室也有问题,那就需要进一步查问题原因。
WiFI OFF,听音乐卡顿频繁一般check步骤
A2DP case1:Audio dump 声音不ok
- Audio dump 中的 af_mixer_write_pcm_XXX.wav , 这是 Audio 传给 A2DP 的源文件,如果这里有卡音,就是Audio的问题,可以转给Audio的同仁check。
- track 是 AudioTrack送到AudioFlinger的声音
- mixer_pcm是AudioFlinger处理过的声音
- mixer_write_pcm是AudioFlinger送到HAL的声音
可以在moble log中找到某个时间内的Audio dump是哪个。
10-21 11:11:20.112087 5683 5374 D AudioUtilmtk:new threadDump( )/sdcard/mtklog/audio_dump/af_mixer_write_pcm.pcm
- 转给Audio。
A2DP case2:Audio OK ,HCI Log解析出的A2DP声音不OK
- 如果这里有卡音,则check下有没有数据被flush掉的现象
- check btif_media_prep_2_send方法中打出的log Tx queue buffer count。这表明因buffer不够,系统flush了数据。
10-21 11:11:20.112087 8333 8357 W bt_btif_media_aa_prep_2_send( ) -TX queue buffer count 35/31
- 这里的35是要发的包,31是只能支持的包。也就是说现在flush掉了4包。
- 只要确认了以上信息,就可以把单子转给controller来分析
- 如果没有flush,说明是SBC Encode有问题,请A2DP Profile Owner分析
- 备注:Aptx需要CAPS 14.7版本解析
举个栗子:Audio OK,HCI 有问题
A2DP case3:HCI Log解析出声音OK 耳机不OK
Note:此时不能说明我们的手机没有问题,但是能说明我们的 Encode 没问题
查看HCI Log 中两个A2DP 数据包的间隔是否正常
(一般是100ms发4包,标准时间大于100ms肯定是有问题的)
A2DP case3.1
1.先看提出的时间点附近有没有TotalWin=0,Quota和Unack的值相等的log,Quota是指可以一次性有多少个data并不需要event上报,而unack是说有多少个data尚未收到event回复
10-27 11:22:31:682655 8333 8357 D bt_l2cap:TotalWin=0,Hndl=0x32,Quota=4,Unack=4,RRQuota=0,RRUnack=0
10-27 11:22:31:682729 8333 8357 D bt_l2cap:TotalWin=0,LinkUnack(0x32)=4,RRcheck=0,RRUnack=0
如果有这些 log,就表明 Controller Event 返回慢,没有buffer了。
2.看main log中有没有 “ num_left=5 ” 的log,这表明 l2cap有 pending(待下发)5包没有下去,如果连续出现类似的信息,就是 l2cap 的问题
10-27 11:18:49:301512 8333 8357 D bt_l2cap:L2CA_FlushChannel() flushed:0+0,num_left:5
A2DP case3.2 时间间隔大于100ms
查看我们发了package之后,Firmware有没有回 Number of completed packets 和 当时的 Credit 有几个
A:如果此时firmware没回,或者credit不够,firmware rd分析
B:如果credit够,host没有发A2DP data,则A2DP Profile rd Ower查看
A2DP Host Data 送的太慢log查看
- 查看AVDTP media,看delta 超过100ms的时间。
- 查看HCI,看此时的状况
分析:
1.Firmware 在869ms是已经回复Number Of Completed Packets
2.host 在991ms才发送下一个data,间隔130ms左右
因此可以看出是Host回复的太慢
Next action:
Host RD分析
Moblie log中分析每一个包传输的时间
当AVDTP Media delta值很高,但是Controller 返回的Event 非常快时,可以check下每一个data花费的时间
- 1.时间点1 bt_btif:[ media task tx timer ] ts 730362418, diff : 0060015,queue sz 4 看diff值,是否是60ms,一般都是60ms
- 2.时间点2 bt_btif :AV nsm event = 0x122f (CI_DATA_READY)
- 3.时间点3 bt_btif :bta_av_co_audio_src_data_patch
- 4.时间点4 bt_l2cap:L2CA_FlushChannel ( ) flushed :0 + 0 , num_left:0
- 5.时间点5 bt_l2cap:TotalWin = 7,Hndl = 0x32,Quota = 5,Unack = 1,RRQuota = 0, RRUnack = 0
toalwin等于剩余的channel数,quota表示可以下发多少包并不用等返回event,unack是说还有几个包没有返回event正在等待。
找到上述的point,check下那个步骤下花费时间很高。
08-08 18:28:06.666703 455 3642 D AudioTrack:write:userSize = 92160,blocking = 0
// Audiofinger 写数据
media task tx timer 这个 timer sbc codec的话,一般是60ms,AAC codec和 APTX codec 现在应该都是20ms了。
Timer 值 一般第一个可能会比较大,之后的都会在60ms左右。意思是每隔60ms 从Audio读一次data 。
01:39:38.495000 5875 5899 D bt_avp:avdt_msg_send label:8,msg:0,sig:8
// Avdt_msg_send 代表AVDT将从audio获取的数据写给L2CAP;
01:39:38.495051 5875 5899 I bt_l2cap:L2CA_DataWrite ( ) CID:0x0046 Len:3
// L2CA_DataWrite ( ) 代表L2CAP写给Firmware 的时间
A:A2DP 发包慢,可能是由于btif_media_task没有抢到CPU,导致数据无法发出;分析log发现这个时间段的CPU被其他进程占用,用于输出log,此时需要抓Ftrace log。
B:L2CAP 没有发送给HCI 导致FW没有收到数据,从HCI log上看也是A2DP发包慢。
Android A2DP 音频卡顿问题BT HOST策略总结
A2DP Profile ,Bluetooth A2DP 卡音,杂音问题的一般处理方法相关推荐
- linux 蓝牙 profile,Linux_Linux系统下蓝牙立体声配置A2DP profile,系统配置:Linux debian 2.6.22.6 #7 - phpStudy...
Linux系统下蓝牙立体声配置A2DP profile 系统配置:Linux debian 2.6.22.6 #7 Mon Sep 3 10:46:00 CST 2007 ppc GNU/Linux ...
- linux蓝牙麦克风,Linux下蓝牙立体声配置(A2DP profile)
Linux下蓝牙立体声配置(A2DP profile) 发布时间:2008-03-04 00:33:06来源:红联作者:Distance 本人系统配置:Linux debian 2.6.22.6 #7 ...
- Android Bluetooth A2DP
本篇blog继续以结合日志的形式来分析A2DP,以手机连接上耳机后,播放音乐为例,来分析A2DP的过程, 后续还有blog,通过耳机控制音乐播放的暂停.播放来分析AVRCP的过程,可以阅读https: ...
- Android 8.1开启Bluetooth A2DP sink
** Android 8.1开启Bluetooth A2DP sink功能 ** Android O源码已经支持A2DP sink,只需要开启就可以了 一个是BTA_AV_SINK_INCLUDED设 ...
- Android蓝牙A2dp profile的使用
A2dp profile是android支持的一种蓝牙情景模式,一般用于蓝牙立体声耳机,即蓝牙音频的输出 在android的app层中,A2dp的使用并不是很开放,api只提供了非常少的操作接口,连基 ...
- 解决声卡爆音/杂音的四种方法
内容提要:解决声卡爆音/杂音的四种方法,放MP3和电影的时候,总是会出现"噼噼啪啪"的声音,电脑播放任何音频时都会有爆音的情况出现.电脑采用了英特尔酷睿II E4500的处理 ...
- Css弦乐弱音器奏键位,小提琴弱音器的种类及使用方法
弱音器是每个小提琴者在演奏时,需要的一项配件,小提琴弱音器的主要功用是调节音色改变与减弱琴声音量大小,利用弱音器本身的重量,牵制琴桥的震动方式与传导.今天学习啦小编为大家带来小提琴弱音器的种类及使用方 ...
- 抖音涨粉丝最快的方法
抖音涨粉丝最快的方法/抖音涨粉/抖音赚钱/抖音运营/抖音代运营 当你认真做好了视频后,抖粑会给你一定的流量,500以内的播放量卡住了很大一部分人,如果视频不错可能播放量会卡几千,但是涨的粉丝屈指可数, ...
- Visual Studio 2013运行时卡顿 CPU占用超高的解决方法
文章原始连接: http://feotech.com/?p=116 Visual Studio 2013运行时卡顿 CPU占用超高的解决方法 使用Visual C++ 编写程序时发现输入代码时特别卡顿 ...
最新文章
- windows建立PPPoE服务器
- python笔记基础-python笔记(二)基础二
- 以太网,IP,TCP,UDP数据包分析【转】
- 程序员30岁后,9分钟跑完1600米
- Mach 微内核的命名趣闻
- *【HDU - 5711】Ingress(tsp旅行商问题,优先队列贪心,状压dp,floyd最短路,图论)
- MySQL高级特性之分区表
- SqlHelper操纵数据库工具类
- 2019支付宝集五福高阶玩法 助你快速集齐五福
- Java高级工程师技能要求参考
- 企业综合能耗管理系统、企业能效管理平台智能网关介绍
- 斯皮尔 皮尔森 肯德尔_pearson(皮尔逊), kendall(肯德尔)和spearman(斯伯曼斯皮尔曼)三种相关分析方法...
- 如何在CSDN博客中上传图片
- python快速下载模块——豆瓣镜像
- 《互联网信贷风险与大数据》读书笔记(二)
- 非上海户籍人员在上海买房需要啥条件?
- Apache APISIX 扩展指南
- 魔兽地图编辑器插件YDWE的使用与基本设置5 触发编辑器2 时间事件
- GooglePlay 发布问题汇总
- Android时间同步流程