商务服务
android 指定设备输出音频 手机选择音频输出设备手机av「android 指定设备输出音频 手机选择音频输出设备」
2025-01-11 23:45


1. 既然是分析音频输出设备,我们首先需要知道当前手机支持的音频输出设备有哪些

adb shell dumpsys media.audio_policy > /home/jon/audio_policy.txt

我们关注如下字段:

从中我们得到当前终端支持的音频输出方式有:Earpiece(听筒),Speaker(外放),Telephony Tx(用于传输路由到手机无线装置的音频)
同时,我们看下这个输出参数是怎么得到的:

frameworksavmediaaudioservermain_audioserver.cpp

frameworksavservicesaudiopolicyserviceaudioPolicyService.cpp

frameworksavservicesaudiopolicymanagerdefaultaudioPolicyManager.cpp

如上通过解析AUDIO_POLICY_XML_CONFIG_FILE()配置文件而来

android 指定设备输出音频 手机选择音频输出设备_音频播放


2. 输出设备类型的选择(例如Speak(usb接口,或者primary),耳机(usb接口,或者primary))

我们知道无论是哪种类型的音频播放(音乐,铃声,电话等),最终我们都会在Native的AudioTrack创建一个实例。这里我们以Music为例来说明:参考我的native播放例子

我们分析下这个方法:

ok,我们回到本文的主旋律中,看看是如何选中output设备的,分析

frameworksavmedialibmediaaudioSystem.cpp

frameworksavservicesaudiopolicyserviceaudioPolicyInterfaceImpl.cpp

frameworksavservicesaudiopolicymanagerdefaultaudioPolicyManager.cpp

那么,我们当前需要进一步分析的就是如下2个函数了getStrategyForAttr,getDeviceForStrategy。
首先根据,上文得到的音频属性获取音频策略,再根据音频策略选中输出设备的类型

如上返回的音频策略是STRATEGY_MEDIA,之后我们再根据这个音频策略选中输出设备

frameworksavservicesaudiopolicyenginedefaultsrcEngine.cpp

继续:

这里需要说明的是availableOutputDevicesType 来自于哪儿?在本函数开头处有

uint32_t availableOutputDevicesType = availableOutputDevices.types();

因此,我们追踪availableOutputDevices,在getDeviceForStrategy函数中

这里的getAvailableOutputDevices来自于

而mAvailableOutputDevices正是来自于本文第一步。
3. 决定到底是选择哪种类型(usb,primary,蓝牙,usb)接口的哪种具体设备

a. 首先我们确定当前终端都支持哪些类型的音频接口

和之前选择设备类型一致,也是通过AUDIO_POLICY_XML_CONFIG_FILE()配置文件解析而来,需要注意的是这个xml文件会同时include:以及和这三个xml文件,因此总共会加入三个hardware module

另外我们还可以通过dump下media.audio_policy服务来看当前系统支持的module

adb shell dumpsys media.audio_policy > /home/jon/audio_policy.txt

关注如下字段:

如上,里面会有关于对应module以及device的具体配置。对于每个HW Module我们对于dump数据做下初步分析

如上,每种硬件接口类型,会根据stream的应用场景区分多个output,最后我们需要在这些output 中选择满足我们要求的output ,再从output 中选择最终的device。
b. 其次对于audio相关的音频路径是如何被加载到系统,同时对于每个音频路径是如何设置其默认输出设备的

我们从代码中分析下,系统是如何将众多的output保存下来的

frameworksavservicesaudiopolicymanagerdefaultaudioPolicyManager.cpp

先分析关注2个字段和是怎么赋值的

frameworksavservicesaudiopolicyserviceaudioPolicyClientImpl.cpp

frameworksavservicesaudioflingerAudioFlinger.cpp

这里的openOutputStream会调用到hardware了,我们以primary为例说明如下:

hardwarelibhardwaremodulesaudioaudio_hw.c

会设置相关对音频硬件操作的函数指针

c. 上面的b中对每路音频路径都设置了一个默认的输出设备,之前在track的创建中有一步是getOutputForAttr,我们讲了音频策略的获取,音频设备的选择,最后还有一个 函数没讲getOutputForDevice,这个函数是根据我们下发的device,format,以及请求的audio policy从系统保存的众多音频路径中选择符合要求的路径

对于音频路径的选择我们可以得出如下结论了:
1. 优先选择最满足请求Policy Flags(例如:deep buffer | fast | direct | primary)的音频路径;
2. 退一步选择最匹配请求Format(例如:AUDIO_FORMAT_PCM_16_BIT)的音频路径;
3. 再退一步选择主输出的音频(例如支持铃声类)路径;
4. 如果都不满足,那没办法了选谁都是选,直接选第一个音频路径输出;

这里对于的第二个参数,flags有必要详细说一下,我们可以直接看这个变量的定义:

其代表的就是各种音频标识

最后我们还需要知道,系统众多的音频路径怎么查看其支持的输出音频标识呢

adb shell dumpsys media.audio_policy > /home/jon/audio_policy.txt

我们关注如下字段:

android 指定设备输出音频 手机选择音频输出设备_System_02

    以上就是本篇文章【android 指定设备输出音频 手机选择音频输出设备手机av「android 指定设备输出音频 手机选择音频输出设备」】的全部内容了,欢迎阅览 ! 文章地址:http://www78564.xrbh.cn/news/32410.html 
     文章      相关文章      动态      同类文章      热门文章      栏目首页      网站地图      返回首页 迅博思语移动站 http://www78564.xrbh.cn/mobile/ , 查看更多   
最新文章
4月10大Android手机排名 HTC One高居榜首android是什么手机「4月10大Android手机排名 HTC One高居榜首」
Android系统手机已经成了大家购机的首选,所以在数量众多的Android家族成员中,那些才是真正值得拥有的机型自然值得关注。假如你
2024挣钱的游戏排行榜前十名(真正一天挣10元到100元的游戏微信提现秒到账)手机游戏赚钱「2024挣钱的游戏排行榜前十名(真正一天挣10元到100元的游戏微信提现秒到账)」
2024挣钱的游戏排行榜前十名(真正一天挣10元到100元的游戏微信提现秒到账)在如今的网络世界中,寻找真正能稳定赚钱且提现便捷的
6.导航功能最强的手机导航手机「6.导航功能最强的手机」
导航功能最强的  图为京瓷A5502K 手机 最大的两个特点还是独特的“旋转”式设计和带有电子罗盘的步行者导航系统。其优点是在关
Android 1.X时代:个性确定android手机「Android 1.X时代:个性确定」
■Android1.X时代如我们在前面所说,Google现任董事长施密特先生在2008年初辞去在苹果董事会中的职位,同年10月Google就正式发布
DB2301T165-2024 电动自行车停放充电场所消防安全规范.pdf
ICS13.220.01CCSC802301黑龙江省哈尔滨市地方标准DB2301/T165—2024电动自行车停放充电场所消防安全规范2024-07-16发布2024-08-1
23款尊贵版逸动教你如何通过手机远程控制车辆解锁启动汽车手机「23款尊贵版逸动教你如何通过手机远程控制车辆解锁启动」
的手机端软件名字叫智慧云控,现在的最新版本是6.08,就像下图这样该版本不支持手机解锁闭锁和启动车辆这些功能,那么我们如果想
2035年全体老年人享有基本养老服务 养老服务体系成熟定型(3)
此次印发的《意见》除了鼓励社会力量进入养老行业外,还对国有资本和外资提出了具体的要求和支持政策。推动国有资本参与发展养老
ASV屏幕绝对出色夏普手机「ASV屏幕绝对出色」
屏幕·菜单: 说到,绝对不能忽略上的液晶屏。在液晶界具有35年的液晶研究及开发经验,被称为“液晶之父”。而在夏普手机上配备
@香港游客,欢迎来咸宁过大年
1月7日 多云到阴天 气温4~9℃新闻报料电话:0715—8128787新鲜事、稀奇事、开心事、麻烦事,欢迎拨打热线电话,我们愿意和您分
360安全卫士怎么样 360安全卫士功能详细介绍【详解】手机360安全卫士「360安全卫士怎么样 360安全卫士功能详细介绍【详解】」
  360安全卫士好用吗?360安全卫士是一款非常受欢迎的电脑软件,但是随着windows10系统杀毒能力的日益增强,有许多小伙伴们觉得