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

诗林  金牌会员 | 2024-9-19 18:34:11 | 显示全部楼层 | 阅读模式
打印 上一主题 下一主题

主题 349|帖子 349|积分 1047

前言

   本文重要总结了一下车机开辟中碰到的 Audio 有关的题目,同时参考网上的一案例,由于Audio 模块出现音频题目标场景许多,对每一个出现的题目,重要做思绪上的分析,细节上不做进一步纠结,后期慢慢完善,先做一个框架性的总结。
  1. 无声

实例:现象:蓝牙通话时,车机和手机均无声。
原因分析:
   由于车机端断开了SCO(电话音频)的毗连,以是车机端没有声音,手机端的 SCO 也没有建立。
  常见思绪:
整机无声(bt和手机一起播放声音时):通路策略切错;BT状态不对;data往BT走,BT 断开无法播放;全局静音;音量为 0;往下写 data 时中间出现了 mute ;
整机无声(只有手机):可能是播放装备没有正确选择,输出装备策略选择题目
A2DP无声:正常环境数据走 A2DP,实际上走了 SCO,但 SCO 无法吸收,以是没有声音
SCO无声:网络原因;没有打开 mic
2. 断音

实例现象:车机毗连蓝牙耳机,播放视频声音输出断断续续。
原因分析:
   Framework端分析:Android dump pcm 文件,播放声音正常。排除Framework 端的 题目,转耳机硬件分析。
  耳机端分析:从 btsnoop 里解析出来车机发出的音频无卡顿,数据帧也是饱和的,耳机端如果听到是断断续续有卡顿的话,是耳机的题目,换个耳机试。
  

常见思绪:
在 其他平台如 MTK,audio dump 中 resample in 节点有断音,可能是 underrun,原因是 APP 写数据太慢,这种环境无法优化,只能三方解决。
在往下走的其他节点出现断音,通过调解 buffer 大小来解决(buffer一样平常环境不动,减少buffer会出现断音,增大buffer会出现延长)。
数据写快了,写慢了都可能造成断音。(实际开辟目前未碰到,后期碰到了再增补案例)。
3. 杂音

实例现象:毗连蓝牙耳机,刚打开视频 App 播放的时候会有杂音
原因思绪:爆破音,杂音, 须要提供 audio dump, tcpdump 以太网等日志结合分析。
   Framework 分析:
  

  • 毗连耳机和不毗连耳机都会有杂音的环境出现,只是喇叭不容易听出来,底层日志信息看视频App 中 AudioTrack 都有 underrun 提示。
  • HAL 底层尝试加大视频播放器 AudioTrack buffer 大小后,仍然存在此题目,已阐明是应用层写数据慢导致。
  • 从audio dump 数据来看,杂音处数据只漏掉一两帧,但连续出现多次,导致出现“滋滋"的杂声。阐明出题目时,写入数据处于断流的临界点附件。
  分析结论:需视频 App端进一步分析部数据写入慢题目。
  常见思绪:


  • 通过 audio dump定位,在节点 af_track 就有杂音属于是 APP 写下来的数据就有杂音。 资源文件就有杂音,无法优化。资源文件没有杂音,可能是在上层太忙,buffer太小,出现了underrun,造成了数据破坏,这种环境通过调解 buffer来解决,调解 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 是否正确,App 端是否根据焦点变化处理了相关逻辑等。
6. 无声题目(连上 BT )

实例现象:蓝牙电话无声音
思绪分析:
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传下来,data 是否为mute,上层 app 传递下令是否有错误,BT 协议不匹配,track start 后是不是马上停了。BT控制是否有题目。
其他完善中……


免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!更多信息从访问主页:qidao123.com:ToB企服之家,中国第一个企服评测及商务社交产业平台。

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?立即注册

x
回复

使用道具 举报

0 个回复

倒序浏览

快速回复

您需要登录后才可以回帖 登录 or 立即注册

本版积分规则

诗林

金牌会员
这个人很懒什么都没写!

标签云

快速回复 返回顶部 返回列表