|
14 | 14 | - [典型问题](#发现连接配对典型问题)
|
15 | 15 | - [问题: 经典蓝牙设备主动绑定对方设备失败](#问题-经典蓝牙设备主动绑定对方设备失败)
|
16 | 16 | - [音频传输问题](#音频传输问题)
|
17 |
| -- [音乐播放控制问题](#音乐播放控制问题) |
18 | 17 | - [分析方法](#分析方法)
|
| 18 | + - [方法:观察是否建立了AVDTP signaling连接](#方法观察是否建立了avdtp-signaling连接) |
| 19 | + - [方法:观察是否建立了AVDTP media连接](#方法观察是否建立了avdtp-media连接) |
| 20 | + - [方法:观察Media是否成功设置了codec](#方法观察media是否成功设置了codec) |
| 21 | +- [音乐播放控制问题](#音乐播放控制问题) |
| 22 | + - [分析方法](#分析方法-1) |
19 | 23 | - [方法:观察是否建立了AVRCP连接](#方法观察是否建立了avrcp连接)
|
20 | 24 | - [方法:观察设备是否支持AVRCP](#方法观察设备是否支持avrcp)
|
21 | 25 | - [方法:观察是否发送了播放、暂停请求](#方法观察是否发送了播放暂停请求)
|
|
246 | 250 |
|
247 | 251 | # 音频传输问题
|
248 | 252 |
|
| 253 | +本章介绍Advanced Audio Distribution Profile(A2DP)和Audio/Video Distribution Transport Protocol(AVDTP)相关问题常用的分析、定位方法。AVDTP负责控制音频/视频的传输过程,而A2DP定义了音频数据的编码和传输规范,通过这两个协议配合工作,可以实现在蓝牙设备之间高质量的音频传输。 |
| 254 | +A2DP是蓝牙音频分发配置协议,包含Sink(SNK)和Source(SRC)两个角色。通常,SRC是音频源,SNK是音频接收方。Vela蓝牙服务框架中,蓝牙音乐输出设备(例如音箱/耳机/车机)可以为A2DP-SNK,蓝牙音乐源设备(例如手机/手表)可以为A2DP-SRC。 |
| 255 | +AVDTP是蓝牙音频传输控制协议,协议中定义了Stream End Point Discovery过程、Get All Capabilities/Get Capabilities过程、Stream Configuration过程、Get All Capabilities/Get Capabilities过程、Stream Configuration过程、Stream Establishment、 Stream Start等AVDTP信令过程。AVDTP信令过程的发起方称为Initiator(INT),信令过程的接收方称为Acceptor (ACP)。 |
| 256 | +蓝牙设备传输音频时需要建立两条AVDTP连接。首先建立AVDTP signaling连接,用于编解码参数的协商和media连接的控制,协商完成(AVDTP open)后,再建立AVDTP media连接,用于传输音频数据。 |
| 257 | +蓝牙和Media之间有两条transport channel,分别为control channel和data channel,其中,control channel用于传输控制信息,data channel用于传输音频数据。 |
| 258 | + |
| 259 | +## 分析方法 |
| 260 | + |
| 261 | +<a id="方法:观察是否打开了蓝牙和之间的transport"></a> |
| 262 | + |
| 263 | +通常,可以通过syslog观察蓝牙和Media之间的control channel和data channel是否打开。 |
| 264 | + |
| 265 | +典型的log如下: |
| 266 | + |
| 267 | +* A2DP SRC的transport成功打开 |
| 268 | +``` |
| 269 | +[a2dp_control]: a2dp_ctrl_cb, path:[a2dp_source_ctrl], event:TRANSPORT_OPEN_EVT |
| 270 | +[a2dp_control]: a2dp_data_cb, path:[a2dp_source_data], event:TRANSPORT_OPEN_EVT |
| 271 | +``` |
| 272 | +* A2DP SNK的transport成功打开 |
| 273 | +``` |
| 274 | +[a2dp_control]: a2dp_ctrl_cb, path:[a2dp_sink_ctrl], event:TRANSPORT_OPEN_EVT |
| 275 | +[a2dp_control]: a2dp_data_cb, path:[a2dp_sink_data], event:TRANSPORT_OPEN_EVT |
| 276 | +``` |
| 277 | + |
| 278 | +<a id="方法:观察是否建立了AVDTP signaling连接"></a> |
| 279 | + |
| 280 | +### 方法:观察是否建立了AVDTP signaling连接 |
| 281 | + |
| 282 | +通常,可以通过snoop log或者air log观察是否建立了AVDTP signaling连接。 |
| 283 | + |
| 284 | +#### 1 通过snoop log观察是否建立了AVDTP signaling连接,以及观察可能的失败原因 |
| 285 | + |
| 286 | +AVDTP signaling连接成功的典型log如下,其中两个设备间建立的第一条AVDTP连接为AVDTP signaling连接。 |
| 287 | + |
| 288 | +<img src="img/how_to_analyze_bluetooth_issues/a2dp/snoop_avdtp_signaling_establishment.png" alt="snoop:AVDTP signaling连接" width="50%"> |
| 289 | + |
| 290 | +<a id="方法:观察是否建立了AVDTP media连接"></a> |
| 291 | + |
| 292 | +### 方法:观察是否建立了AVDTP media连接 |
| 293 | + |
| 294 | +建立AVDTP media连接之前,可能会进行Discovery、Get(ALL)Capabilities、set/get Configuration、Stream Establishment等过程,其中,Set Configuration和Stream Establishment过程是必须的。通常,可以通过syslog、snoop log或者air log观察是否建立了AVDTP media连接 |
| 295 | + |
| 296 | +#### 1 通过snoop log观察是否建立了AVDTP media连接,以及观察可能的失败原因 |
| 297 | + |
| 298 | +下面log中,Command是AVDTP Int,回复Accept的是AVDTP Acp。 |
| 299 | + |
| 300 | +##### 1.1 AVDTP Discovery |
| 301 | + |
| 302 | +可选的,在建立AVDTP media连接之前,可以发起AVDTP Discovery过程,用于发现对方设备可用的Stream End Point(SEP)。通常,发起AVDTP signaling连接的设备会发起这一过程。典型log如下: |
| 303 | + |
| 304 | +<img src="img/how_to_analyze_bluetooth_issues/a2dp/snoop_avdtp_discovery.png" alt="snoop:AVDTP discovery" width="50%"> |
| 305 | + |
| 306 | +log有显示Acp的序号从1到6,说明对方设备的SEP一共有6个。 |
| 307 | + |
| 308 | +##### 1.2 AVDTP Get Capabilities |
| 309 | + |
| 310 | +可选的,在建立AVDTP media连接之前,可以通过Get Capabilities或者Get All Capabilities获取对方SEP的具体信息。通常,发起AVDTP signaling连接的设备会发起这一流程。典型log如下: |
| 311 | + |
| 312 | +<img src="img/how_to_analyze_bluetooth_issues/a2dp/snoop_avdtp_get_capabilities.png" alt="snoop:AVDTP get capabilities" width="50%"> |
| 313 | + |
| 314 | +log显示本地设备获取对方设备的1号SEP的Capabilities。 |
| 315 | + |
| 316 | +##### 1.3 AVDTP Set Configuration |
| 317 | + |
| 318 | +在建立AVDTP media连接之前,需要通过Set Configuration过程选定双方的SEP,以及编解码参数。通常,发起AVDTP signaling连接的设备应当发起这一流程。典型log如下: |
| 319 | + |
| 320 | +<img src="img/how_to_analyze_bluetooth_issues/a2dp/snoop_avdtp_set_configuration.png" alt="snoop:AVDTP set configuration" width="50%"> |
| 321 | + |
| 322 | +log中显示使用本地的1号SEP和对方设备的1号SEP进行音频传输。 |
| 323 | + |
| 324 | +##### 1.4 AVDTP Stream Establishment |
| 325 | + |
| 326 | +在建立AVDTP media连接之前,需要通过Open打开双方的SEP。通常,发起AVDTP signaling连接的设备应当发起这一流程。典型log如下: |
| 327 | + |
| 328 | +<img src="img/how_to_analyze_bluetooth_issues/a2dp/snoop_avdtp_stream_establishment.png" alt="snoop:AVDTP stream establishment" width="50%"> |
| 329 | + |
| 330 | +##### 1.5 AVDTP media连接成功 |
| 331 | + |
| 332 | +完成Set Configuration和Stream Establish流程后,需要建立第二条AVDTP连接,也就是AVDTP media连接。通常,发起AVDTP signaling连接的设备应当发起这一流程。典型log如下: |
| 333 | + |
| 334 | +<img src="img/how_to_analyze_bluetooth_issues/a2dp/snoop_avdtp_media_establishment.png" alt="snoop:AVDTP media连接" width="50%"> |
| 335 | + |
| 336 | +通常,AVDTP Open过程后面的L2CAP(PSM=AVDTP)是AVDTP media连接。 |
| 337 | + |
| 338 | +#### 2 通过syslog观察是否建立了AVDTP media连接,以及观察可能的失败原因 |
| 339 | + |
| 340 | +典型log如下: |
| 341 | + |
| 342 | +* 本地设备被连接 |
| 343 | +``` |
| 344 | +[a2dp_stm]: ProcessEvent, State=Idle, Peer=[11:22:33:44:55:66], Event=CONNECTED_EVT |
| 345 | +[a2dp_stm]: Enter State=Opened, Peer=[11:22:33:44:55:66] |
| 346 | +``` |
| 347 | +* 本地设备主动连接对端设备 |
| 348 | +``` |
| 349 | +[a2dp_stm]: ProcessEvent, State=Opening, Peer=[11:22:33:44:55:66], Event=CONNECTED_EVT |
| 350 | +[a2dp_stm]: Enter State=Opened, Peer=[11:22:33:44:55:66] |
| 351 | +``` |
| 352 | + |
| 353 | +<a id="方法:观察Media是否成功设置了codec"></a> |
| 354 | + |
| 355 | +### 方法:观察Media是否成功设置了codec |
| 356 | + |
| 357 | +传输或播放音乐前,需要在Media子系统设置编解码参数。可以通过syslog观察Media是否成功设置了编解码参数。 |
| 358 | + |
| 359 | +典型log如下: |
| 360 | + |
| 361 | +``` |
| 362 | +[a2dp_control]: a2dp_recv_ctrl_data: a2dp-ctrl-cmd : A2DP_CTRL_CMD_CONFIG_DONE |
| 363 | +``` |
| 364 | + |
249 | 365 | # 音乐播放控制问题
|
250 | 366 |
|
251 |
| -本章介绍Audio/Vedio Remote Control Profile(AVRCP)相关问题常用的分析、定位方法。 |
| 367 | +本章介绍Audio/Vedio Remote Control Profile(AVRCP)相关问题常用的分析、定位方法。 |
252 | 368 | AVRCP是蓝牙音视频遥控协议,包含Controller(CT)和Target(TG)两个角色。通常,CT是控制方,TG是受控方。Vela蓝牙服务框架中,蓝牙音乐输出设备(例如音箱/耳机/车机)可以为AVRCP-CT,蓝牙音乐源设备(例如手机/手表/手环)可以为AVRCP-TG。
|
253 | 369 |
|
254 | 370 | ## 分析方法
|
|
0 commit comments