Skip to content

Bluetooth: Guide to investigate AVRCP playback issues. #124

New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Merged
merged 1 commit into from
Mar 27, 2025
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Original file line number Diff line number Diff line change
Expand Up @@ -37,6 +37,8 @@
- [方法:观察是否建立了AVRCP连接](#方法观察是否建立了avrcp连接)
- [方法:观察设备是否支持AVRCP](#方法观察设备是否支持avrcp)
- [方法:观察是否发送了播放、暂停请求](#方法观察是否发送了播放暂停请求)
- [方法:观察是否注册了Notification](#方法观察是否注册了notification)
- [方法:观察是否正确反馈播放状态](#方法观察是否正确反馈播放状态)
- [方法:观察播放状态变化是否由蓝牙引起](#方法观察播放状态变化是否由蓝牙引起)
- [方法:观察是否使用了绝对音量](#方法观察是否使用了绝对音量)
- [方法:观察音乐源设备(手机)是否设置了绝对音量](#方法观察音乐源设备手机是否设置了绝对音量)
Expand All @@ -46,10 +48,11 @@
- [方法:观察音量变化是否由蓝牙引起](#方法观察音量变化是否由蓝牙引起)
- [方法:观察音量变化由AVRCP或是HFP控制](#方法观察音量变化由avrcp或是hfp控制)
- [典型问题](#典型问题-2)
- [问题: 不能控制播放、暂停](#问题-不能控制播放暂停)
- [问题:不能控制播放、暂停](#问题不能控制播放暂停)
- [问题:不能受控播放、暂停](#问题不能受控播放暂停)
- [问题:意外的播放、暂停](#问题意外的播放暂停)
- [问题: 不能受音乐源设备(手机)控制调节音量](#问题-不能受音乐源设备手机控制调节音量)
- [问题: 音量异常变化](#问题-音量异常变化)
- [问题不能受音乐源设备(手机)控制调节音量](#问题不能受音乐源设备手机控制调节音量)
- [问题音量异常变化](#问题音量异常变化)
- [通话问题](#通话问题)
- [分析方法](#分析方法-3)
- [方法:观察是否建立了HFP连接](#方法观察是否建立了hfp连接)
Expand Down Expand Up @@ -774,6 +777,56 @@ AVRCP是蓝牙音视频遥控协议,包含Controller(CT)和Target(TG)

<img src="img/how_to_analyze_bluetooth_issues/avrcp/snoop_passthrough_pause_play.png" alt="snoop:AVRCP播放暂停请求" width="50%">

<a id="方法:观察是否注册了Notification"></a>

### 方法:观察是否注册了Notification

通过syslog,snoop log,或者air log可以观察是否注册了Notification。

#### 1 通过syslog观察是否注册了Notification

典型log如下:
* 本地设备注册了notification,观察对端设备播放状态
```
[avrcp_controller]: capability support event: 1
```
* 对端设备注册了Notification,观察本地设备播放状态
```
[avrcp_target]: register notification event: 1
```
相似的,不同event数值代表不同的notification事件,syslog内容解析方法相同。

#### 2 通过snoop log或air log观察是否注册了Notification

以播放状态Notification为例,典型log如下:

<img src="img/how_to_analyze_bluetooth_issues/avrcp/sniffer_avrcp_register_notification_playback_status.png" alt="sniffer:AVRCP注册播放状态变化" width="50%">

<a id="方法:观察是否正确反馈播放状态"></a>

### 方法:观察是否正确反馈播放状态

在CT向TG注册播放状态变化后,TG可以向CT反馈播放状态变化。通过syslog,snoop log,或者air log可以观察TG是否正确向CT反馈播放状态变化。

#### 1 通过syslog观察是否正确反馈播放状态

典型log如下:
* 本地设备向对端设备反馈播放状态变化
```
[avrcp_target]: send playstatus notification --> STOPPED
```
* 对端设备向本地设备反馈播放状态变化
```
[avrcp_controller]: register_notification evt: 1
[avrcp_controller]: playback status changed: PAUSED, get status now...
```

#### 2 通过snoop log或air log观察是否注册了Notification

以播放状态Notification为例,典型log如下:

<img src="img/how_to_analyze_bluetooth_issues/avrcp/sniffer_avrcp_register_notification_playback_status.png" alt="sniffer:AVRCP注册播放状态变化" width="50%">

<a id="方法:观察播放状态变化是否由蓝牙引起"></a>

### 方法:观察播放状态变化是否由蓝牙引起
Expand Down Expand Up @@ -901,7 +954,7 @@ HFP HF(耳机)设备可以主动设置通话音量,典型log如下:

## 典型问题

### 问题: 不能控制播放、暂停
### 问题不能控制播放、暂停

本地设备不能控制对端设备上的播放器进行播放、暂停,可能有多种原因导致,可考虑的定位方法包括:

Expand All @@ -927,6 +980,42 @@ HFP HF(耳机)设备可以主动设置通话音量,典型log如下:

* 若本地设备发送了播放、暂停请求,建议观察手机侧行为异常的原因。

### 问题:不能受控播放、暂停

本地设备不能被对端设备控制播放、暂停,可能有多种原因导致,可考虑的定位方法包括:

* [观察是否建立了AVRCP连接](#方法:观察是否建立了AVRCP连接)

* 若双方设备中,至少一方发起了连接,但连接失败,建议对比典型log,分析连接失败的原因。

* 若双方设备均未能发起上述连接,建议[观察双方设备是否支持AVRCP](#方法:观察设备是否支持AVRCP)。

* 若AVRCP连接成功,建议[观察是否发送了播放、暂停请求](#方法:观察是否发送了播放、暂停请求)。

* [观察设备是否支持AVRCP](#方法:观察设备是否支持AVRCP)

* 若音乐源设备(A2DP-SRC)不支持AVRCP-TG,或音乐播放设备(A2DP-SNK)不支持AVRCP-CT,则建议[观察是否打开了相应配置](#方法:观察是否打开了AVRCP配置)。

* 若音乐源设备(A2DP-SRC)未能正确的注册或开启AVRCP-TG服务,或者音乐播放设备(A2DP-SNK)未能正确的注册或开启AVRCP-CT服务,则建议根据syslog观察失败原因。

* 若音乐源设备(A2DP-SRC)支持AVRCP-TG,且音乐播放设备(A2DP-SNK)支持AVRCP-CT,则双方应当至少有一方主动发起连接。若双方均未发起连接,则建议首先观察音乐播放设备(A2DP-SNK)为什么没有发起AVRCP连接。

* [观察是否发送了播放、暂停请求](#方法:观察是否发送了播放、暂停请求)

* 若对端设备未能发送播放、暂停请求,建议[观察是否注册了Notification](#方法:观察是否注册了Notification)。

* 若对端设备发送了错误的播放、暂停请求,例如:应当请求播放,却发送了暂停,建议[观察是否正确反馈播放状态](#方法:观察是否正确反馈播放状态)。

* 若对端设备正确发送了播放、暂停请求,本地设备正确接收,建议在Vela Media或App侧观察未能正确执行的原因。

* [观察是否注册了Notification](#方法:观察是否注册了Notification)

* 若对端设备未能注册Notification,建议对比典型log,分析对端设备行为异常的原因。

* [观察是否正确反馈播放状态](#方法:观察是否正确反馈播放状态)

* 若本地设备未能正确反馈播放状态,建议在Vela Media或App侧观察未能正确反馈的原因。

### 问题:意外的播放、暂停

当音乐播放器意外的播放、暂停时,通常有以下方法可以逐步缩小范围并定位问题。
Expand All @@ -943,7 +1032,7 @@ HFP HF(耳机)设备可以主动设置通话音量,典型log如下:

* 若CT设备发送了播放、暂停请求,建议在CT设备App侧观察播放状态变化的原因。

### 问题: 不能受音乐源设备(手机)控制调节音量
### 问题不能受音乐源设备(手机)控制调节音量

AVRCP音量调节问题,分为绝对音量和相对音量两种。首先需要判断当前产品使用了哪一种调节方式。可考虑的定位方法包括:

Expand Down Expand Up @@ -971,7 +1060,7 @@ AVRCP音量调节问题,分为绝对音量和相对音量两种。首先需要

* 若使用相对音量时,手机正确改变了音频幅值,建议Vela Media侧观察音量变化未能体现的原因。

### 问题: 音量异常变化
### 问题音量异常变化

当遇到蓝牙设备音量异常变化时,通常有以下方法可以逐步缩小范围并定位问题。

Expand Down
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.