5.0 蓝牙音乐无法播放问题
1 关键字 蓝牙;音乐; 2 问题描述 设备型号:黄鹂 系统版本:OpenHarmony 5.0Release 代码版本:OpenHarmony-5.1-Release 问题现象:播放器的进度条在继续,但是耳机没有音乐声出来。 3 问题原因 3.1 正常机制 蓝牙耳机连接之后,打开音乐软
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 发现,在08:05:38:368到时间08:05:38:556,蓝牙a2dp 发送了avdtp start cmd 之后有快速发送了 avdtp stop cmd,导致a2dp 状态机在open状态而不是streaming 状态,无法推流。
查看对应时刻的hilog 日志
可以发现蓝牙host 协议栈在08:05:38:553 准备开始发送suspend。
在openharmony中,能发送avdtp 相关指令的。有2种:
- audio 调用 hdf,调用driver 外围中BTAudioBluetoothManager,再调用bluetooth_server.
- 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流程中的时间戳校验规则不正确,去掉时间戳的校验
更多推荐
所有评论(0)