在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.host991ms才发送下一个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 卡音,杂音问题的一般处理方法相关推荐

  1. 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 ...

  2. linux蓝牙麦克风,Linux下蓝牙立体声配置(A2DP profile)

    Linux下蓝牙立体声配置(A2DP profile) 发布时间:2008-03-04 00:33:06来源:红联作者:Distance 本人系统配置:Linux debian 2.6.22.6 #7 ...

  3. Android Bluetooth A2DP

    本篇blog继续以结合日志的形式来分析A2DP,以手机连接上耳机后,播放音乐为例,来分析A2DP的过程, 后续还有blog,通过耳机控制音乐播放的暂停.播放来分析AVRCP的过程,可以阅读https: ...

  4. Android 8.1开启Bluetooth A2DP sink

    ** Android 8.1开启Bluetooth A2DP sink功能 ** Android O源码已经支持A2DP sink,只需要开启就可以了 一个是BTA_AV_SINK_INCLUDED设 ...

  5. Android蓝牙A2dp profile的使用

    A2dp profile是android支持的一种蓝牙情景模式,一般用于蓝牙立体声耳机,即蓝牙音频的输出 在android的app层中,A2dp的使用并不是很开放,api只提供了非常少的操作接口,连基 ...

  6. 解决声卡爆音/杂音的四种方法

       内容提要:解决声卡爆音/杂音的四种方法,放MP3和电影的时候,总是会出现"噼噼啪啪"的声音,电脑播放任何音频时都会有爆音的情况出现.电脑采用了英特尔酷睿II E4500的处理 ...

  7. Css弦乐弱音器奏键位,小提琴弱音器的种类及使用方法

    弱音器是每个小提琴者在演奏时,需要的一项配件,小提琴弱音器的主要功用是调节音色改变与减弱琴声音量大小,利用弱音器本身的重量,牵制琴桥的震动方式与传导.今天学习啦小编为大家带来小提琴弱音器的种类及使用方 ...

  8. 抖音涨粉丝最快的方法

    抖音涨粉丝最快的方法/抖音涨粉/抖音赚钱/抖音运营/抖音代运营 当你认真做好了视频后,抖粑会给你一定的流量,500以内的播放量卡住了很大一部分人,如果视频不错可能播放量会卡几千,但是涨的粉丝屈指可数, ...

  9. Visual Studio 2013运行时卡顿 CPU占用超高的解决方法

    文章原始连接: http://feotech.com/?p=116 Visual Studio 2013运行时卡顿 CPU占用超高的解决方法 使用Visual C++ 编写程序时发现输入代码时特别卡顿 ...

最新文章

  1. windows建立PPPoE服务器
  2. python笔记基础-python笔记(二)基础二
  3. 以太网,IP,TCP,UDP数据包分析【转】
  4. 程序员30岁后,9分钟跑完1600米
  5. Mach 微内核的命名趣闻
  6. *【HDU - 5711】Ingress(tsp旅行商问题,优先队列贪心,状压dp,floyd最短路,图论)
  7. MySQL高级特性之分区表
  8. SqlHelper操纵数据库工具类
  9. 2019支付宝集五福高阶玩法 助你快速集齐五福
  10. Java高级工程师技能要求参考
  11. 企业综合能耗管理系统、企业能效管理平台智能网关介绍
  12. 斯皮尔 皮尔森 肯德尔_pearson(皮尔逊), kendall(肯德尔)和spearman(斯伯曼斯皮尔曼)三种相关分析方法...
  13. 如何在CSDN博客中上传图片
  14. python快速下载模块——豆瓣镜像
  15. 《互联网信贷风险与大数据》读书笔记(二)
  16. 非上海户籍人员在上海买房需要啥条件?
  17. Apache APISIX 扩展指南
  18. 魔兽地图编辑器插件YDWE的使用与基本设置5 触发编辑器2 时间事件
  19. GooglePlay 发布问题汇总
  20. Android时间同步流程

热门文章

  1. [go]空nil与interface中的空指针
  2. 更新 | gnomAD人群频率库的下载与处理
  3. linux下查找系统镜像,LINUX系统镜像下载总汇
  4. (8)uboot之DDR SDRAM理解 五
  5. 【Flink】Flink CDC介绍和原理概述
  6. Metropolis-Hasting算法Matlab源码学习
  7. gprMax3.0极速离线安装教程
  8. 手机设备与电脑设备多种设备互通
  9. javaweb 新闻发布系统
  10. 卡牌手机游戏基于HTTP协议的服务端设计方案