背景:
前面一些文章我们大部分audio信息调试都是使用的如下两个命令:
dump media.audio_flinger
即输出AudioFlinger相关的信息,主要关注音频数据流和混合过程的细节
dump media.audio_policy
即输出AudioPolicyService相关的信息,音频策略的具体实施与设备路由
其实在audio的开发中另一个命令dumpsys audio 也是非常常见的的,特别是在音频焦点,音量调节部分的调试,音频设备连接等等,那么下面就重点聊一下dumpsys audio这个命令。
dumpsys audio命令代码部分
dumpsys audio命令其实就是让名字为“audio”服务进行相关的dump方法执行输出,这里名为“audio”的服务其实就是AudioService。
在system_server启动运行startOtherService方法时候,会启动AudioService

这里就会调用到AudioService的相关启动方法:
frameworks/base/services/core/java/com/android/server/audio/AudioService.java
就会发布这个“audio”的服务,实体就是AudioService对象。
所以AudioService其实是属于system_server的一个服务,而且是Java代码的实现,和两个AudioFlinger,AudioPolicyService两个在audioserver进程的不一样哈。
具体AudioService的相关的内容这里不过多介绍了,在audio子系统专题课程中也有详细讲解。
这里重点关注AudioService的dump方法相关信息:
对应方法如下:
可以看到dump输出的信息也是非常多的,dumpsys audio的输出结果部分截图:

因为输出的信息很多,我们只对重要的,常用的几个部分进行讲解,比如音频音量相关,音频焦点相关,其他部分大家也完全可以自己去AudioService的dump方法中追一些既可以。
dumpsys audio输出重要信息
1、查看音量相关信息
当前平台所有Stream类型的音量情况
这里拿出STREAM_SYSTEM为案例进行详细说明既可以
- STREAM_SYSTEM (aliased to: STREAM_RING):
// 当前stream名字,aliased表示自己没有独立音量,是和STREAM_RING一样
Muted: false
// mute状态
Muted Internally: false
// AudioService内部mute状态
Min: 0
Max: 7
//一般会有index来表音量大小,简单说就是进度,进度要有一个最大最小值,这里音量为0-7
streamVolume:5
//当前音量index的大小为5
Current: 2 (speaker): 4, 4 (headset): 5, 8000 (remote_submix): 3, 20000 (line): 5, 40000000 (default): 5
//Current这里会列出一个个的设备对应的音量,因为很可能不同设备音量值不一样
Devices: headset(4)
//当前的设备
Volume Group: AUDIO_STREAM_SYSTEM
//代表对应的音量组
音量组
VolumeGroupState一个实例就是一个volume group
显示所有的音量组,以及各个音量组当前被哪些stream使用
这里也以AUDIO_STREAM_SYSTEM为案例:
- VOLUME GROUP AUDIO_STREAM_SYSTEM:
Muted: false
Min: 0
Max: 7
Current: 2 (speaker): 4, 8000 (remote_submix): 3, 40000000 (default): 5
Devices: headset
Streams: STREAM_SYSTEM
基本上和上面的Stream类型的音量输出没啥差别,这里也就不重复解释了。
音量变化的相关Event log
Events log: volume changes (logged when command received by AudioService)
03-17 01:23:26:546 adjustSuggestedStreamVolume(sugg:USE_DEFAULT_STREAM_TYPE dir:ADJUST_RAISE flags:0x1011) from android/android uid:1000
03-17 01:23:26:594 adjustSuggestedStreamVolume(sugg:USE_DEFAULT_STREAM_TYPE dir:ADJUST_RAISE flags:0x1011) from android/android uid:1000
03-17 01:23:26:648 adjustSuggestedStreamVolume(sugg:USE_DEFAULT_STREAM_TYPE dir:ADJUST_RAISE flags:0x1011) from android/android uid:1000
03-17 01:23:26:695 adjustSuggestedStreamVolume(sugg:USE_DEFAULT_STREAM_TYPE dir:ADJUST_RAISE flags:0x1011) from android/android uid:1000
03-17 01:23:26:747 adjustSuggestedStreamVolume(sugg:USE_DEFAULT_STREAM_TYPE dir:ADJUST_RAISE flags:0x1011) from android/android uid:1000
Event日志详细记录了音量变化的操作记录,经常可以用于音量不知道被谁改变的一个依据,比如是音量键操作还是说设置的音量条滑动操作。
2、查看音频焦点相关信息
音频焦点当前持有者
Audio Focus stack entries (last is top of stack):
source:android.os.BinderProxy@a816261 -- pack: com.android.music
-- client: android.media.AudioManager@3cd6174com.android.music.AudioPreview$2@5dc069d
-- gain: GAIN_TRANSIENT
-- flags: -- loss: LOSS_TRANSIENT
-- notified: true -- limbofalse -- uid: 10107 -- attr: AudioAttributes: usage=USAGE_MEDIA content=CONTENT_TYPE_UNKNOWN flags=0x800 tags= bundle=null -- sdk:30
source:android.os.BinderProxy@d16a186 -- pack: com.example.android.translate
-- client: android.media.AudioManager@bfc14c5com.example.android.translate.PhrasesActivity$2@e070e1a
-- gain: GAIN_TRANSIENT -- flags:
-- loss: none -- notified: true -- limbofalse -- uid: 10156 -- attr: AudioAttributes: usage=USAGE_MEDIA content=CONTENT_TYPE_UNKNOWN flags=0x800 tags= bundle=null -- sdk:32
这底部top就是当前音频焦点,主要的核心信息有如下几个
– pack :代表具体哪个app包名获取的焦点
– gain :代表焦点申请的类型
– loss :如果丢失焦点,也会展示丢失类型
– attr :代表相关的音频播放的属性
查看音频焦点申请记录
主要展示音频焦点有哪些申请requestAudioFocus记录,和abandonAudioFocus记录,这样就可以清晰恢复出整个音频焦点的变化原因,方便调试相关音频焦点异常问题定位。
Events log:
focus commands as seen by MediaFocusControl
10-31 10:12:46:673 requestAudioFocus() from uid/pid 10107/2542 AA=USAGE_MEDIA/CONTENT_TYPE_UNKNOWN clientId=android.media.AudioManager@16de0b4com.android.music.AudioPreview$2@577b4dd callingPack=com.android.music req=2 flags=0x0 sdk=30
10-31 10:54:13:729 abandonAudioFocus() from uid/pid 10107/2542 clientId=android.media.AudioManager@16de0b4com.android.music.AudioPreview$2@577b4dd
10-31 10:54:48:215 requestAudioFocus() from uid/pid 10107/2542 AA=USAGE_MEDIA/CONTENT_TYPE_UNKNOWN clientId=android.media.AudioManager@3cd6174com.android.music.AudioPreview$2@5dc069d callingPack=com.android.music req=2 flags=0x0 sdk=30
10-31 10:54:53:248 requestAudioFocus() from uid/pid 10156/2811 AA=USAGE_MEDIA/CONTENT_TYPE_UNKNOWN clientId=android.media.AudioManager@bfc14c5com.example.android.translate.PhrasesActivity$2@e070e1a callingPack=com.example.android.translate req=2 flags=0x0 sdk=32
Multi Audio Focus enabled :false
3、当前链接的设备
比如耳机等设备插入后,会在Connected devices这里展示出相关的DeviceInfo。
AudioDeviceBroker:
Message handler (watch for unhandled messages):
Handler (com.android.server.audio.AudioDeviceBroker$BrokerHandler) {6fe10c1} @ 88143163
Looper (AudioDeviceBroker, tid 125) {cbaeac9}
(MessageQueue is using Legacy implementation)
(Total messages: 0, polling=true, quitting=false)
BECOMING_NOISY_INTENT_DEVICES_SET=
0x400 0x800 0x8000000 0x20000000 0x80 0x100 0x200 0x2000 0x4000 0x4000000 0x20000001 0x20000 0x20000002 0x4 0x8
Preferred devices for strategy:
Non-default devices for strategy:
Connected devices:
[DeviceInfo: type:0x4 (headset) name:h2w addr: identity addr: codec: 0 group:-1 peer addr: peer identity addr: disabled modes: {}]
[DeviceInfo: type:0x80000010 (headset) name:h2w addr: identity addr: codec: 0 group:-1 peer addr: peer identity addr: disabled modes: {}]
原文参考:
https://mp.weixin.qq.com/s/KNSyR1H9JmJoCFVoXrYURQ
更多framework实战开发干货,请关注下面“千里马学框架”
2183

被折叠的 条评论
为什么被折叠?



