- A2DP发送间隔
目前Android源生设定,每20ms发送一包音频数据。
如果收到controller上报的completed evt上报后,也会主动去发送已缓存的音频数据 A2DP数据缓存
Android M(Android 6.0) 允许缓存11个buffer
对比Android N 允许缓存21个buffera2dp_list不限长度
l2cap发送允许缓存5个buffer。A2DP发送流程
- A2DP数据卡顿
TxAaQ达到最大存储时,如果再有数据放入,Android M就会自动丢弃缓存的第一包,Andorid N默认丢弃所有缓存数据包, 这将导致一旦触发,就会出现严重声音丢包问题。
问题原因,link_xmit_data_q只能发送5个L2CAP包,超出5个部分,将缓存到a2d_list中,如果a2d_list存在数据,那么就不会发送TxAaQ里面的数据,然后就出现数据包丢失和卡顿。 - A2DP卡顿log分析
- A2DP数据卡顿
06-20 16:44:26.475 2165 2202 D bt_btif : [media task tx timer] ts 1420105270, diff : 00019989, queue sz 4
// 20ms timer触发, 当前TxAaQ长度为4
06-20 16:44:26.475 2165 2192 I bt_btif : BTA got event 0x122f // data ready触发发送命令
06-20 16:44:26.475 2165 2192 I bt_l2cap: L2CA_FlushChannel (QUERY) CID: 0x0044
06-20 1