必学音频干货调试技巧:命令dumpsys audio相关信息剖析

Android-音频配置文件详解 前言:   Android P 引入了一种新的音频政策配置文件格式 (XML),用于描述音频拓扑。新的 XML 文件支持定义输出输入流配置文件、可用于播放和捕获的设备以及音频属性的数量和类型。但是每个项目的代码里面都有很多音频配置文件,具体使用的是哪个文件呢?本文将详细讲述。 1. 查看运行时具体使用的xml adb shell dumpsys media.audio_policy | grep -iE "Config source:" 结果如下: Config source: /vendor 阅读详情

背景:

前面一些文章我们大部分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实战开发干货,请关注下面“千里马学框架”

【Android Audio】深入解析dumpsys audio日志中的关键状态与调试技巧 本文深入解析Android系统中dumpsys audio命令的使用技巧,帮助开发者快速定位音频问题。从音量异常、设备路由到音频焦点冲突,详细解读日志中的关键状态信息,并提供蓝牙音频调试等实战案例,是Android音频开发的必备指南。 阅读详情

相关推荐

Android11以上 Audio音频调试方法

本文将介绍一些常用的音频调试方法,可以帮助发现和解决音频系统的问题,提高音频质量和性能。音频调试的方法有很多,不同的方法适用于不同的场景和目的。以及它们的优缺点和使用场景。这些方法都是基于命令行工具的,可以在adb shell中执行。这些工具可以让我们获取或修改音频系统的状态、设置、参数和功能,方便我们分析和诊断音频问题。

我其实什么都不会 6944

android adb 查看音频,adb shell dumpsys audio使用

前言工作中也常用到至于这个命令能做啥,接下来我们简单的讲解一下PS : 本文在Android 9.0上测试的,4.2时dumpsys audio不一定有这么多信息。正文dumpsys audio出来的信息有很多,比如查看各类型的音量值,当前焦点的持有者,以及焦点申请记录等等。一、查看各类型的音量值dumpsys后包含如下信息(节选,各种类型的值都有)下面我们以STREAM_MUSIC类型说明Str...

weixin_30769455的博客 6932

基于虚拟阻抗重塑的构网型VSG变流器SISO序阻抗建模与宽频振荡抑制策略分析(面向高比例新能源并网场景)

本文深入探讨了基于虚拟阻抗控制的构网型VSG变流器SISO序阻抗建模技术及其在高比例新能源并网场景中的宽频振荡抑制策略。通过虚拟阻抗重塑,有效改善了变流器的阻抗特性,解决了次/超同步频段的振荡问题,并提供了参数设计、阻抗扫频验证等实用技巧,为新能源并网系统的稳定性提供了可靠解决方案。

weixin_29268385的博客 251

【Android Audio】dumpsys audio分析

dumpsys audio显示当前所有stream type的音量状态显示AudioDeviceBroker状态 命令: dumpsys audio Message handler (watch for unhandled messages): Handler (com.android.server.audio.AudioService$AudioHandler) {4adb93d} @ 5038924 Looper (AudioService, tid 87) {e96a532}

... 4373

一文解释电路中常用电子元器件应用和选型01

电容和二极管是电路中最常用的两个电子元器件,种类和系列众多,这里简单总结一下应用场景和选型方式 电容(Capacitor) 电容的种类(20种以上)和应用非常广泛,但是我经常遇到的无非就是下面这几种: 应用 1.隔直流。 2.旁路(去耦) 3.耦合 4.滤波 5.温度补偿 6.计时 7.调谐 8.整流 9.储能 种类 1. 陶瓷电容 2. 云母电容 3. 铝电解电容 4. 钽

weixin_43904073的博客 2237

Innovus 安装全过程

【代码】Innovus 安装全过程。

lmyynlbcy的博客 5537

【Android Audio】dumpsys media.audio_policy分析

命令: dumpsys media.audio_policy AudioPolicyManager: 0xf1e5a000 Command Thread: 0xf1ff3300 Supported System Usages: AudioCommandThread 0xf1ff3300 Dump - Commands: Command Time Wait pParam Last Command 01 014581.648 0 0xf19e5440 Aud.

... 5810

用Python实现一个简单的远程桌面服务端和客户端

本文介绍了一个基于Python的轻量级远程桌面解决方案,针对商业软件在嵌入式系统上的兼容性问题、性能问题和成本问题。系统采用客户端-服务端架构,包含两个通信通道:5000端口传输压缩视频流,5001端口传输控制事件。通过多线程设计、图像压缩(JPEG+zlib)和网络优化(禁用Nagle算法)等技术手段提高性能。服务端实现了高效的屏幕捕获(使用mss库)、图像处理流水线和事件处理逻辑。客户端采用PyQt5构建UI界面,包含视频接收线程以减少主线程负担。该方案具有跨平台、开源免费、轻量级(核心代码不到500行

Hi20240217的博客 1661

Android dumpsys命令总结

dumpsys

大迪deblog 448

【中兴交换机MC-LAG配置】

​ 中兴mc-lag配置 主设备配置如下: Keepalive链路 interface smartgroup1023 //用作MC-LAG的Keepalive链路接口 switch attribute disable yes description For_Keepalived exit interface xgei-0/1/1/47 switch attribute disable yes description For_Keepalived exit interface

qq_31440733的博客 1万+

从“能跑”到“好用”:一名 Python 开发者的工程化进阶之路【Python心得篇】

Python 早已不只是写脚本、跑数据的工具。后端服务AI Agent 编排层自动化平台核心语言数据与业务之间的“中枢层”区别只在于:你是用脚本方式,还是工程方式在写。如果你已经能写“能跑的 Python”,下一步,就是让它长期可跑、稳定可演进。Python 的真正价值不在于“写得快”,而在于能否支撑持续演进的工程实践。当代码从一次性脚本走向长期运行的系统,开发者必须从结构设计、职责拆分、性能意识和类型约束等方面进行系统性思考。

博客 1546

android audio相关dumpsys信息

其中 Muted为是否静音,Min为最小值,Max为最大值Current为各输出设备的当前音量,Devices为当前输出设备。mSafeMediaVolumeState:安全音量开关状态,其中SAFE_MEDIA_VOLUME_DISABLED关闭对话框,SAFE_MEDIA_VOLUME_ACTIVE打开对话框。其中path为库路径,UUID为库的uuid。Chn mask:track数据通道,类型为audio_channel_mask_t。:显示thread的方向,地址,名字,tid,类型等。

yufei645的博客 2259

6、探索音乐结构中的统一性:贝多芬《英雄交响曲》第一乐章的深度剖析

本文深入剖析了贝多芬《英雄交响曲》第一乐章的音乐结构,探讨其统一性的来源及表现形式。通过主题与动机、和声与调性、旋律与节奏、织体与动态等多方面的分析,揭示了这部作品在技术层面和情感表达上的卓越成就。

b9c0d的博客 518

安卓音频之dumpsys audio

除了音频日志,当前的音频状态。音量,通话模式,可用音频设备,以及音频设置历史等都在AudioService中。而混音状态是在AudioFlinger中。在音频问题定位中,这些信息是很有必要的。

事后不诸葛的博客 1922

第一节:从Chat_Bot 到 AI_Agent——一个范式转换

本文系统剖析了工业级AI代理系统ClaudeCode的设计原理与工程实践。通过对比ChatBot与Agent的三个本质差异:自主循环决策vs单轮应答、环境交互vs纯文本I/O、持久状态管理vs无状态对话,揭示了构建生产级Agent系统的关键挑战。文章详细解析了ClaudeCode的五层架构设计、1800+文件组成的运行时系统,包括工具调度、权限管理、状态持久化等核心机制,并阐述了从简单API调用到完整Agent系统的演进路径。

2201_75869398的博客 68

LinePhone3.2.7(android端最新版本) sip客户端

SIP客户端For android:LinePhone3.2.7(最新版本),官网地址:http://www.linphone.org/

Android Media - dumpsys

这里以HDMI OUT设备获取profile为例,HDMI OUT当前支持了compress offload,direct output,mmap_no_irq_out_dynamic 3种典型类别的profile。

Jimmy的专栏 1310

STM32F407中文手册

STM32f407中文手册 本参考手册面向应用开发人员,提供有关使用 STM32F405xx/07xx、STM32F415xx/17xx、 STM32F42xxx 和 STM32F43xxx 微控制器存储器与外设的完整信息。STM32F405xx/07xx、STM32F415xx/17xx、STM32F42xxx 和 STM32F43xxx 构成一个微 控制器系列,各产品具有不同的存储器大小、封装和外设。有关订购信息以及器件的机械与电气特性,请参见数据手册。有关 ARM Cortex™-M4F 内核的信息,请参见《Cortex™-M4F 技术参考手册》。

Android adb shell dumpsys audio 信息查看分析详解

Android 如果要分析当前设备的声音通道相关日志,仅仅看AudioService的日志是看不到啥日志的,但是看整个audio关键字的日志又太多太乱了,所以可以看一下系统提供的一个调试指令dumpsys audio 返回的信息进行定位分析,里面主要包含了AudioService启动时间,当前设备的音频流指向,音频流的声音大小,音频外设的连接情况,音频播放记录,音频外设连接断开记录等等信息。不同的Android 系统使用 dumpsys audio 命令返回的日志信息可能会有差异,

wenzhi的博客 3412

OV9734 DATASHEET,完整规格书

OV9734完整规格书,包括电气参数,尺寸规格,寄存器配置表等

RU DOS版、EFI版32bit/64bit BIOS常用工具

DOS版、EFI版的RU工具,可用来查看IO、MEM、PCI、SMBIOS等资源。亲测在EFI SHELL下可用。

通过dumpsys audio查看当前系统音量状态

通过dumpsys audio查看当前系统音量状态 adb shell dumpsys audio MediaFocusControl dump time: 上午6:20:53 Audio Focus stack entries (last is top of stack): No external focus policy Notify on duck: true In ri...

wangjicong_215的博客 5138

查看Android系统的音频设备

查看音频设备

TinyHorse的博客 4912

AudioFlinger音频dump方法

Android AudioFlinger音频截取方法

yx811421582的专栏 4139

Android 性能分析工具dumpsys的使用

Android 性能分析工具dumpsys的使用

audio usb 2017

adb shell dumpsys的使用

该命令用于打印出当前系统信息,默认打印出设备中所有service的信息,可以在命令后面加指定的service name. 有两种方法可以查看service list: adb shell dumpsys 输出信息的开始部分就是所有运行的service,如下: Currently running services: SurfaceFlinger: accessibility: account: ...

AiHH的博客 893

Android 通过ADB方式获取&设置音量

Android 通过ADB方式获取&设置音量

qq_44844314的博客 6040

如何查看当前音频的输出路径

前文分析了音频输出设备是如何决定的本文目的是确认音频的当前输出路径 1.首先前文我们通过解析audio_policy_configuration.xml文件得到了众多的音频输出路径,正如前文分析并非所有的音频路径都能够被之后的音频输出流使用,真正被系统认可并加入的音频路径其实并不多,我们同样可以通过dump下media.audio_policy服务来获取 adb shell dumpsys me...

zhuyong006的博客 3815

android 路由 策略,Android 8.1 Audio框架(二)AudioPolicy路由策略实例分析

概述这里以蓝牙耳机连接手机这一场景为例分析Audio路由策略是如何进行设备切换和管理输出的。蓝牙耳机连接上Android系统后,AudioService的handleDeviceConnection会被调用,然后调用到AudioPolicyManager的核心函数setDeviceConnectionState。时序图说明:连接过程的setDeviceConnectionState可以拆分为以下几...

weixin_32459883的博客 1153
上一篇: aosp15版本InputReader事件如何通知到InputDispatcher的?
下一篇: windows系统上aosp15上winscope离线html如何使用?
千里马学框架
博客等级 码龄6年 1万+粉丝 650原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

千里马学框架

帮助你了,就请我喝杯咖啡

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值