1 关键字

蓝牙;音乐;

2 问题描述

设备型号:黄鹂

系统版本:OpenHarmony 5.0 Release

代码版本:OpenHarmony-5.1-Release

问题现象:播放器的进度条在继续,但是耳机没有音乐声出来。

3 问题原因

3.1 正常机制

蓝牙耳机连接之后,打开音乐软件,点击播放,音乐hap界面的进度条在移动,蓝牙耳机有对应的音乐声出来。

3.2 异常机制

蓝牙耳机连接之后,打开音乐软件,点击播放,音乐hap界面的进度条在移动,蓝牙耳机没有对应的音乐声出来。

4 解决方案

Audio_framework层在向蓝牙HDF通讯时start流程中去掉时间撮的校验

修改文件路径

foundation/multimedia/audio_framework/frameworks/native/hdiadapter/sink/bluetooth/bluetooth_renderer_sink.cpp

 

5 定位过程

5.1 蓝牙侧定位

通过抓取的snoop 发现没有 sbc数据流的发送。

 

通过查看点击播放时刻的snoop 发现,在080538368到时间080538556,蓝牙a2dp 发送了avdtp start cmd 之后有快速发送了 avdtp stop cmd,导致a2dp 状态机在open状态而不是streaming 状态,无法推流。

查看对应时刻的hilog 日志

 

可以发现蓝牙host 协议栈在080538553 准备开始发送suspend

openharmony中,能发送avdtp 相关指令的。有2种:

  1. audio 调用 hdf,调用driver 外围中BTAudioBluetoothManager,再调用bluetooth_server.
  2. bluetooth_server 中蓝牙a2dp profile 自身逻辑调用。

看上图hilog 可以明显看到这个avdtp stop cmd 经过了

01-01 08:05:38.552  2520  2523 I C00105/HDF_LOG_TAG: AudioRenderStop, StopPlaying

01-01 08:05:38.552  2520  2523 I C00105/BTAudioBluetoothManager: StopPlaying

Bt结论:

该问题由于audio 播放状态停止状态的快速反转导致。需要audio 模块继续分析。

 

5.2 音频侧定位

分析hilog日志

 

 

从日志中

440489: 01-01 08:05:38.360   408  2524 I C02b12/BluetoothRendererSinkInner: [Start]Start.

441295: 01-01 08:05:38.551   408  2524 E C02b12/BluetoothRendererSinkInner: [Start]CheckPositionTime failed!

看到start执行了,但是执行失败了。

 

查看源码

 

在校验时间戳时返回了失败,检查时间戳校验规则发现不合理,故将校验规则去掉,让流程继续执行,经验证蓝牙耳机有声音了

结论:

start流程中的时间戳校验规则不正确,去掉时间戳的校验

Logo

社区规范:仅讨论OpenHarmony相关问题。

更多推荐