清华主页 - 清华新闻 - 综合时讯 - 正文

车机中 Android Audio 音频常见问题分析方法实践总结总结

文章目录。

  • 前言。
  • 1. 无声。
  • 2. 断音。
  • 3. 杂音。
  • 4. 延迟播放。
  • 5. 焦点问题。
  • 6. 连接蓝牙后的无声问题。
  • 未完待续...

前言。

本文总结了 Android 在汽车开发中遇到的情况 Audio 相关问题,由于 Audio 有许多场景在模块中出现音频问题,每一个问题,主要做思路分析,细节上没有进一步的纠缠,#xff0c;后期慢慢完善󿀌首先做一个框架总结,供您参考。

1. 无声。

实例:现象:蓝牙通话时,汽车和手机都是无声的。

原因分析:

因为车端断开了 SCO(电话音频)xff0;连接,所以车端没有声音󿀌手机端的 SCO 也没有建立。

常见思路:

整机无声( BT 与手机一起播放声音时):通路策略错误;BT 状态错误󿄛data 往 BT 走,BT 断开不能播放;全局静音;音量为 0;往下写 data 时间中间出现了 mute ;

整机无声(只有手机):也许播放设备没有正确选择,输出设备策略的选择。

A2DP 无声:数据走正常情况 A2DP,实际上走了 SCO,但 SCO #xfff00不能接收c;所以没有声音。

SCO 无声:网络原因;没有打开 mic。

2. 断音。

例子󿄚车机连接蓝牙耳机󿀌断断续续地播放视频声音输出。

原因分析:

Framework端分析a;Android dump pcm 文件,播放声音正常。排除Framework 端的 问题,转耳机硬件分析。

耳机端分析:从 btsnoop 分析了车机发出的音频无卡顿,数据帧也饱和,如果耳机端断断续续地卡住了,耳机问题,试试另一个耳机。

在这里插入图片描述

常见思路:

在 其他平台如 MTK,audio dump 中 resample in 节点断音,可能是 underrun,原因是 APP 写数据太慢󿀌这种情况不能优化󿀌三方只能解决。

断音࿰在其他节点向下移动c;通过调整 buffer 大小解决方案(buffer一般不动󿼌减少 buffer 会有断音󿀌增大 buffer 会有延迟)。

数据写得很快,慢写可能会导致断音。(实际开发目前还没有遇到󿼌后期遇到补充案例)。

3. 杂音。

实例现象:连接蓝牙耳机,刚打开视频 App 播放时会有噪音。

原因思路:爆破声,杂音, 需要提供 audio dump, tcpdump 结合以太网等日志的分析。

Framework 分析:

  1. 连接耳机和不连接耳机都会有噪音,只是喇叭不容易听到,底层日志信息观看视频 App 中 AudioTrack 都有 underrun 提示。
  2. HAL 底层试图增加视频播放器 AudioTrack buffer 大小后,这个问题仍然存在࿰仍然存在c;已经说明是应用层写数据慢造成的。
  3. 从 audio dump 从数据来看,󿀌杂音处数据只有一两帧,但是连续出现多次󿀌导致“滋滋"”;的杂声。说明问题时󿀌在断流的临界点附件中写入数据。

分析结论:需视频 App端进一步分析部数据写入慢问题。

常见思路:

  • 通过 audio dump定位󿀌在节点 af_track 有杂音属于是 APP 写下的数据有噪音。 资源文件有杂音,无法优化。没有杂音的资源文件#xff0c;也许上层太忙了,太小的bufferc;出现了 underrun,造成数据损坏,通过调整这种情况 解决￾rbufferc;调整 frameCount,扩大延迟变长,request 太多,但是写的少,write 可能会丢失数据。中间的噪音,如effect,resample 等情况。

  • 分析 dump,确定出现问题的节点,杂音分析 buffer,断音一般为 underrun (上层app写数据太慢󿀌供不应求�会造成断音或杂音,一般来说,解决方案是调整 buffer 大小,buffer 调大)3秒一般是 standby。

4. 延迟播放。

实例现象:CarPlay 中间音乐歌曲切换延迟较高,可能较高 3秒。

原因分析:在网络连接下延迟 1~3 秒属于正常现象,不同的手机和不同的播放器在不同的网络下表现不同。 延迟由手机控制,机器端无法优化。

常见思路:看最开始 write 数据时间,也许一开始写的数据是空的。或者延迟写数据的时间。

5. 焦点问题。

这是一个相对较大的模块,涉及焦点策略,如混音、中断、禁止等策略。各 App 端需要与系统端策略达成一致,另外,由于 车辆上有许多第三方应用,有些提供方不方便维护󿀌要么问题保持现状,要么系统端 Audio 这里适合�进一步分析具体问题。稍后,我将分别总结一些常见的音频焦点问题。

常见思路:排查关键字: CarAudioFocus、MediaFocus 分析焦点栈,然后结合焦点策略,进一步分析焦点的申请和释放,以及消息的传递。 AudioManager #xfff0是否正确c;App 相关逻辑是否根据焦点变化处理。

6. 连接蓝牙后的无声问题。

实例现象:蓝牙电话无声。

思维分析:

Framework 确认通道是否打开,采样率是否正确设置,与底层传输的参数是否正确,需要与底层沟通具体参数。如关键字分析:

audio_hw_primary: adev_set_parameters: enter: open_source=0:2。

audio_hw_primary: adev_set_parameters: enter: hfp_set_sampling_rate=48000。

audio_hw_hfp: origin_audio_extn_hfp_set_parameters: hfp_enable=true。

蓝牙端分析:

结合 log 分析,蓝牙电话调用的原生 hfp 通道,启动初始化时 hfp 由于通路接口的初始化错误。

audio_hw_primary: adev_set_parameters: enter: hfp_enable=true。
audio_hw_hfp: origin_audio_extn_hfp_set_parameters: hfp_enable=true。

常见思路: 考虑是否写作 data,data有没有传下去࿰?c;data 是否为mute,上层 app 传递命令是否错误,BT 协议不匹配�track start 是不是马上就停了?BT控制是否有问题。

未完待续...

2025-06-24 12:23:54

相关新闻

清华大学新闻中心版权所有,清华大学新闻网编辑部维护,电子信箱: news@tsinghua.edu.cn
Copyright 2001-2020 news.tsinghua.edu.cn. All rights reserved.