设为首页收藏本站
网站公告 | 这是第一条公告
     

 找回密码
 立即注册
缓存时间15 现在时间15 缓存数据 哪怕他只唱了几句,哪怕别人不仔细听都听不到他的声音,他还是要固执的在自己的名字后面写上他的名字,从他们两个名字写在一起的第一天起,就注定了一辈子不会分开[爱心]

哪怕他只唱了几句,哪怕别人不仔细听都听不到他的声音,他还是要固执的在自己的名字后面写上他的名字,从他们两个名字写在一起的第一天起,就注定了一辈子不会分开[爱心] -- 怎么了,没什么

查看: 822|回复: 0

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

[复制链接]

  离线 

TA的专栏

  • 打卡等级:无名新人
  • 打卡总天数:1
  • 打卡月天数:0
  • 打卡总奖励:14
  • 最近打卡:2024-01-24 22:53:59
等级头衔

等級:晓枫资讯-列兵

在线时间
0 小时

积分成就
威望
0
贡献
23
主题
21
精华
0
金钱
90
积分
46
注册时间
2023-10-2
最后登录
2025-5-31

发表于 2025-5-31 06:50:33 | 显示全部楼层 |阅读模式
Android adb shell dumpsys audio 信息查看分析详解


一、前言

Android 如果要分析当前设备的声音通道相关日志,
仅仅看AudioService的日志是看不到啥日志的,但是看整个audio关键字的日志又太多太乱了,
所以可以看一下系统提供的一个调试指令dumpsys audio 返回的信息进行定位分析,
里面主要包含了AudioService启动时间,当前设备的音频流指向,音频流的声音大小,音频外设的连接情况,音频播放记录,音频外设连接断开记录等等信息。
不同的Android 系统使用 dumpsys audio 命令返回的日志信息可能会有差异,
因为打印返回的信息就是AudioService.java里面打印显示的,
本文的示例讲解是以mtk方案的Android14日志信息进行讲解。
网上基本没有对dumpsys audio 日志信息进行分析的,有兴趣的可以收藏查看。

二、分析


1、简单示例和主要内容

本示例日志是设备连接蓝牙耳机后的dumpsys audio情况日志信息:
  1. # dumpsys audio
  2. [18:57:20]Events log: audio services lifecycle
  3. [18:57:20]11-22 18:54:07:681 AudioService() //(1)AudioService 启动时间,大概可以推测出开机时间
  4. [18:57:20]MediaFocusControl dump time: 6:57:22 PM //(2)执行dumpsys audio的时间
  5. //(3)dumpsys audio最重要的内容,设备支持声音流情况
  6. [18:57:20]Stream volumes (device: index)
  7. [18:57:20]- STREAM_VOICE_CALL (aliased to: STREAM_MUSIC):
  8. 。。。
  9. [18:57:20]- STREAM_SYSTEM (aliased to: STREAM_MUSIC):
  10. 。。。
  11. [18:57:20]- STREAM_RING (aliased to: STREAM_MUSIC):
  12. 。。
  13. //(4)基本是音频播放的情况,上面其他声音通道都是注释了以这个为标准
  14. [18:57:20]- STREAM_MUSIC:
  15. [18:57:20]   Muted: false
  16. [18:57:20]   Muted Internally: false
  17. [18:57:20]   Min: 0  //声音范围
  18. [18:57:20]   Max: 15
  19. [18:57:20]   streamVolume:7 //当前声音大小
  20. [18:57:20]   Current: 2 (speaker): 7, 80 (bt_a2dp): 7, 400 (hdmi): 7, 40000000 (default): 7
  21. [18:57:20]   Devices: bt_a2dp(80) //当前声音通道,蓝牙
  22. [18:57:20]   Volume Group: music
  23. [18:57:20]
  24. [18:57:20]- STREAM_ALARM (aliased to: STREAM_MUSIC):
  25. [18:57:20]   Muted: false
  26. [18:57:20]   Muted Internally: false
  27. [18:57:20]   Min: 1
  28. [18:57:20]   Max: 7
  29. [18:57:20]   streamVolume:4
  30. [18:57:20]   Current: 2 (speaker): 4, 80 (bt_a2dp): 4, 400 (hdmi): 4, 40000000 (default): 4
  31. [18:57:20]   Devices: speaker(2), bt_a2dp(80)
  32. [18:57:20]   Volume Group: alarm
  33. //其他声音通道比较少实用,比如铃声,通知等情况
  34. [18:57:20]- STREAM_NOTIFICATION (aliased to: STREAM_MUSIC):
  35. [18:57:20]- STREAM_BLUETOOTH_SCO:
  36. [18:57:20]- STREAM_SYSTEM_ENFORCED (aliased to: STREAM_MUSIC):
  37. [18:57:20]- STREAM_DTMF (aliased to: STREAM_MUSIC):
  38. [18:57:20]- STREAM_TTS (aliased to: STREAM_MUSIC):
  39. [18:57:20]- STREAM_ACCESSIBILITY (aliased to: STREAM_MUSIC):
  40. [18:57:20]- STREAM_ASSISTANT (aliased to: STREAM_MUSIC):
  41. 。。。
  42. //Volume Groups 不知道是干啥的,类型也是挺多的。
  43. [18:57:20]Volume Groups (device: index)
  44. [18:57:20]- VOLUME GROUP voice_call:
  45. [18:57:20]   Muted: false
  46. [18:57:20]   Min: 1
  47. [18:57:20]   Max: 7
  48. [18:57:20]   Current: 2 (speaker): 4, 80 (bt_a2dp): 7, 40000000 (default): 4
  49. [18:57:20]   Devices: bt_a2dp
  50. [18:57:20]   Streams: STREAM_VOICE_CALL
  51. [18:57:20]- VOLUME GROUP system:
  52. [18:57:20]   Muted: false
  53. [18:57:20]   Min: 0
  54. [18:57:20]   Max: 100
  55. [18:57:20]   Current: 2 (speaker): 47, 80 (bt_a2dp): 7, 40000000 (default): 47
  56. [18:57:20]   Devices: bt_a2dp
  57. [18:57:20]   Streams: STREAM_SYSTEM
  58. [18:57:20]- VOLUME GROUP ring:
  59. [18:57:20]- VOLUME GROUP music:
  60. [18:57:20]- VOLUME GROUP alarm:
  61. [18:57:20]- VOLUME GROUP alarm:
  62. [18:57:20]- VOLUME GROUP bluetooth_sco:
  63. [18:57:20]- VOLUME GROUP enforced_audible:
  64. [18:57:20]- VOLUME GROUP dtmf:
  65. [18:57:20]- VOLUME GROUP accessibility:
  66. [18:57:20]- VOLUME GROUP assistant:
  67. [18:57:20]- VOLUME GROUP AUDIO_STREAM_REROUTING:
  68. [18:57:20]- VOLUME GROUP AUDIO_STREAM_PATCH:
  69. VOLUME GROUP类型的 Streams属性值都是指向上面的Stream volumes类型的。
  70. [18:57:20]Audio routes:
  71. [18:57:20]  mMainType=0x0
  72. //(5)当前连接蓝牙的设备名称,如果未连接蓝牙为null
  73. [18:57:20]  mBluetoothName=Xiaodu Portable Speaker  
  74. //(6)音频播放情况日志
  75. [19:00:32]Events log: playback activity as reported through PlayerBase
  76. //开机铃声
  77. [19:00:32]11-22 18:54:09:789 new player piid:71 uid/pid:1000/745 type:android.media.SoundPool attr:AudioAttributes: usage=USAGE_ASSISTANCE_SONIFICATION content=CONTENT_TYPE_SONIFICATION flags=0x800 tags= bundle=null session:0
  78. [19:00:33]11-22 18:54:10:837 new player piid:79 uid/pid:1000/1069 type:android.media.SoundPool attr:AudioAttributes: usage=USAGE_MEDIA content=CONTENT_TYPE_UNKNOWN flags=0x800 tags= bundle=null session:0
  79. 。。。
  80. //音频文件播放+停止+播放+停止操作的日志
  81. [19:00:33]11-22 18:58:37:956 player piid:103 event:started
  82. [19:00:33]11-22 18:58:38:076 player piid:103 format update:FormatInfo{isSpatialized=false, channelMask=0x3, sampleRate=44100}
  83. [19:00:33]11-22 18:58:38:175 player piid:103 event:device updated deviceId:5
  84. [19:00:33]11-22 18:58:38:190 player piid:103 event:device updated deviceId:5
  85. [19:00:33]11-22 18:58:42:920 player piid:103 event:paused
  86. [19:00:33]11-22 19:00:24:155 player piid:103 event:started
  87. [19:00:33]11-22 19:00:24:169 player piid:103 format update:FormatInfo{isSpatialized=false, channelMask=0x3, sampleRate=44100}
  88. [19:00:33]11-22 19:00:24:204 player piid:103 event:device updated deviceId:5
  89. [19:00:33]11-22 19:00:29:492 player piid:103 event:paused
  90. //(7)当前连接的设备,这里是连接蓝牙耳机
  91. [18:57:21]  Connected devices:
  92. [18:57:21]    [DeviceInfo: type:0x80 (bt_a2dp) name:Xiaodu Portable Speaker  addr:48:F3:F3:ED:78:AD codec: 1f000000 sensorUuid: 00000000-0000-0000-4254-48f3f3ed78ad disabled modes: {}]
  93. [18:57:21]
  94. //(8)如果是连接的usb有线耳机,另外一份日志拼过来的
  95. [15:01:34]  Connected devices:
  96. [15:01:34]    [DeviceInfo: type:0x4000000 (usb_headset) name:USB-Audio - USB Speaker Phone addr:card=4;device=0 codec: 0 sensorUuid: null disabled modes: {}]
  97. //(9)连接蓝牙耳机、有线耳机等外设音箱的日志
  98. [18:57:21]Events log: wired/A2DP/hearing aid device connection
  99. 。。。
  100. [18:57:21]11-22 18:57:04:640 BT profile service: connecting HEARING_AID profile
  101. [18:57:21]11-22 18:57:04:666 BT profile service: connecting A2DP profile
  102. [18:57:21]11-22 18:57:09:875 msg: onBluetoothActiveDeviceChange  state=2 addr=48:F3:F3:ED:78:AD prof=2 supprNoisy=true src=AudioService
  103. [18:57:21]11-22 18:57:09:885 BT connected: addr=48:F3:F3:ED:78:AD profile=2 state=2 codec=AUDIO_FORMAT_SBC
  104. [18:57:21]11-22 18:57:10:074 A2DP device addr=48:F3:F3:ED:78:AD now available
  105. //上面可以看到蓝牙连接的时间记录
  106. //(10)声音通道占用的日志
  107. [18:57:21]Events log: force use (logged before setForceUse() is executed)
  108. [18:57:21]11-22 18:54:07:774 setForceUse(FOR_DOCK, FORCE_DIGITAL_DOCK) due to readDockAudioSettings
  109. 。。。
  110. [18:57:21]11-22 18:54:08:521 setForceUse(FOR_VIBRATE_RINGING, FORCE_NONE) due to muteRingerModeStreams() from u/pid:1000/745
  111. 。。。
  112. //从最后一行日志看,最后是设置为蓝牙通道的
  113. [18:57:21]11-22 18:57:09:897 setForceUse(FOR_MEDIA, FORCE_NONE) due to setBluetoothA2dpOn(true) from u/pid:1000/745 src:onSetBtActiveDevice
  114. //(11)声音变化和通道情况
  115. [18:57:21]Events log: volume changes (logged when command received by AudioService)
  116. [18:57:21]11-22 18:57:09:885 VolumeStreamState.muteInternally(stream:STREAM_MUSIC, muted)
  117. [18:57:21]11-22 18:57:10:053 setDeviceVolumeBehavior: dev:bt_a2dp addr:48:F3:F3:ED:78:AD behavior:DEVICE_VOLUME_BEHAVIOR_VARIABLE pack:com.android.bluetooth
  118. [18:57:21]11-22 18:57:10:156 avrcpSupportsAbsoluteVolume addr=48:F3:F3:ED:78:AD support=false
  119. [18:57:21]11-22 18:57:10:323 VolumeStreamState.muteInternally(stream:STREAM_MUSIC, unmuted)
  120. //从上面日志看是蓝牙声音通道,STREAM_MUSIC 流
  121. //(12)AudioSystemAdapter 不清楚是啥日志
  122. [18:57:21]AudioSystemAdapter:
  123. [18:57:21] last cache clear time: 11-22 18:57:10:110
  124. [18:57:21] mDevicesForAttrCache:
  125. [18:57:21]        AudioAttributes: usage=USAGE_ASSISTANCE_SONIFICATION content=CONTENT_TYPE_UNKNOWN flags=0x800 tags= bundle=null forVolume: true stream: STREAM_SYSTEM(1)
  126. [18:57:21]                AudioDeviceAttributes: role:output type:bt_a2dp addr:48:F3:F3:ED:78:AD name: profiles:[] descriptors:[]
  127. [18:57:21]        AudioAttributes: usage=USAGE_ASSISTANCE_ACCESSIBILITY content=CONTENT_TYPE_UNKNOWN flags=0x800 tags= bundle=null forVolume: true stream: STREAM_ACCESSIBILITY(10)
  128. [18:57:21]                AudioDeviceAttributes: role:output type:bt_a2dp addr:48:F3:F3:ED:78:AD name: profiles:[] descriptors:[]
  129. [18:57:21]        AudioAttributes: usage=USAGE_UNKNOWN content=CONTENT_TYPE_UNKNOWN flags=0x801 tags= bundle=null forVolume: true stream: STREAM_SYSTEM(1)
  130. [18:57:21]                AudioDeviceAttributes: role:output type:speaker addr: name: profiles:[] descriptors:[]
  131. [18:57:21]                AudioDeviceAttributes: role:output type:bt_a2dp addr:48:F3:F3:ED:78:AD name: profiles:[] descriptors:[]
  132. 。。。
  133. 百度查询到:AudioSystemAdapter可能会包含如下功能:
  134. 设备检测:检查设备是否支持特定音频特性(如蓝牙、耳机插孔等)。
  135. 音频路径管理:动态选择音频流的最佳路径,如扬声器、耳机或蓝牙设备。
  136. 音效处理:应用特定的音效效果,如均衡器设置或环绕声模式。
  137. 但是从上面日志看不出这些信息,可能信息比较隐蔽。
复制代码
从上面的示例的主要日志信息,可以看到dumpsys主要包含当前音频流和外设的信息。

2、dumpsys audio日志的主要格式内容
  1. # dumpsys audio //(1)执行命令
  2. [18:57:20]Events log: audio services lifecycle
  3. //(2)AudioService 启动时间,大概可以推测出开机时间
  4. [18:57:20]11-22 18:54:07:681 AudioService()
  5. //(3)dumpsys audio最重要的内容,设备支持声音流情况,正常看STREAM_MUSIC
  6. [18:57:20]Stream volumes (device: index)
  7. [18:57:20]- STREAM_MUSIC:
  8. [18:57:20]   Muted: false
  9. [18:57:20]   Muted Internally: false
  10. [18:57:20]   Min: 0  //声音范围
  11. [18:57:20]   Max: 15
  12. [18:57:20]   streamVolume:7 //当前声音大小
  13. [18:57:20]   Current: 2 (speaker): 7, 80 (bt_a2dp): 7, 400 (hdmi): 7, 40000000 (default): 7
  14. [18:57:20]   Devices: bt_a2dp(80) //当前声音通道,蓝牙
  15. [18:57:20]   Volume Group: music
  16. [18:57:20]
  17. //(4)音频播放情况日志
  18. [19:00:32]Events log: playback activity as reported through
  19. //(5)音频外设连接情况
  20. [18:57:21]  Connected devices:
  21. //(6)声音通道占用的日志
  22. [18:57:21]Events log: force use (logged before setForceUse() is executed)
  23. //(7)音频外设连接断开日志
  24. [18:57:21]Events log: wired/A2DP/hearing aid device connection
  25. //(8)声音变化和通道情况
  26. [18:57:21]Events log: volume changes (logged when command received by AudioService)
  27. //(9)AudioSystemAdapter 音频管理信息
复制代码
这里只是根据一个实际的示例日志进行的讲解,
上面的讲解不一定完全正确和全面,仅供参考吧。

三、其他


1、dumpsys audio小结

dumpsys audio 主要能看到
  1. 当前设备音频流的指向情况,Stream volumes (device: index)
  2. 当前系统音频外设连接情况,Connected devices
  3. 声音通道占用情况记录,Events log: force use
  4. 音频外设连接断开日志,Events log: wired/A2DP/hearing aid device connection
复制代码
dumpsys audio 最主要就是上面这几个声音相关信息。
更多的要看具体情况的日志了。

2、dumpsys audio 的源码

dumpsys audio 返回的打印信息,其实是Java代码上打印的,具体源码如下:
framework/base/services/core/java/com/android/server/audio/AudioService.java
  1.     @Override
  2.     protected void dump(FileDescriptor fd, PrintWriter pw, String[] args) {
  3.         if (!DumpUtils.checkDumpPermission(mContext, TAG, pw)) return;
  4.         sLifecycleLogger.dump(pw);
  5.         if (mAudioHandler != null) {
  6.             pw.println("\nMessage handler (watch for unhandled messages):");
  7.             mAudioHandler.dump(new PrintWriterPrinter(pw), "  ");
  8.         } else {
  9.             pw.println("\nMessage handler is null");
  10.         }
  11.         ...
  12.         pw.println("\nAudio routes:");
  13.         pw.print("  mMainType=0x"); pw.println(Integer.toHexString(
  14.                 mDeviceBroker.getCurAudioRoutes().mainType));
  15.         pw.print("  mBluetoothName="); pw.println(mDeviceBroker.getCurAudioRoutes().bluetoothName);
  16.         ...
  17.         pw.println("\n");
  18.         pw.println("\nSpatial audio:");
  19.         pw.println("mHasSpatializerEffect:" + mHasSpatializerEffect + " (effect present)");
  20.         pw.println("isSpatializerEnabled:" + isSpatializerEnabled() + " (routing dependent)");
  21.         mSpatializerHelper.dump(pw);
  22.         sSpatialLogger.dump(pw);
  23.         mAudioSystem.dump(pw);
  24.     }
复制代码
可以看到 dumpsys audio 命令返回的数据,都是在 AudioService.java 里面返回打印的;
Audio相关数据很多,有兴趣的可以自己分析研究看看;
如果想要自定义添加一下额外的打印,可以在源码里面添加。

3、使用谷歌文件管理器 GoogleFile 播放音频文件日志:
  1. logct | grep -E "AudioService|AudioTrack"
  2. //打开文件管理器后首次播放:
  3. 11-23 10:22:26.542   798  1614 I MediaSessionStack: addSession to bottom of stack | record: com.google.android.apps.nbu.files/AudioService (userId=0)
  4. 11-23 10:22:26.938   798  1614 I AudioService.FadeOutManager: unfadeOutUid() uid:10074
  5. 11-23 10:22:27.148   798   937 I MediaSessionStack: onPlaybackStateChanged - Pushing session to top | record: com.google.android.apps.nbu.files/AudioService (userId=0)
  6. 11-23 10:22:27.635   798  1457 I ActivityManager: Background started FGS: Allowed [callingPackage: com.google.android.apps.nbu.files; callingUid: 10074; uidState: TOP ; uidBFSL: [BFSL]; intent: Intent { cmp=com.google.android.apps.nbu.files/.mediaconsumption.audio.service.AudioService (has extras) }; code:PROC_STATE_TOP; tempAllowListReason:<null>; targetSdkVersion:34; callerTargetSdkVersion:34; startForegroundCount:0; bindFromPackage:null: isBindService:true]
  7. 11-23 10:22:27.666   798   798 D MediaSessionService: Media button session is changed to com.google.android.apps.nbu.files/AudioService (userId=0)
  8. //停止后,再次点击播放
  9. 11-23 10:22:58.294  7108  7259 D AudioTrack: getTimestamp_l(16): device stall time corrected using current time 2328289907108
  10. 11-23 10:22:58.339   798  1460 I MediaSessionStack: onPlaybackStateChanged - Pushing session to top | record: com.google.android.apps.nbu.files/AudioService (userId=0)
  11. 11-23 10:22:58.344  7108  7259 D AudioTrack: getTimestamp_l(16): stale timestamp time corrected, currentTimeNanos: 2318205649000 < limitNs: 2328189081941 < mStartNs: 2328287081941
  12. 11-23 10:22:58.344  7108  7259 W AudioTrack: getTimestamp_l(16): retrograde timestamp time corrected, 2328189081941 < 2328329633858
复制代码
能看到一点日志,比如AudioTrack播放时间,但是没有太多日志,比如用什么设备播放、播放音量等等信息。
所以dumpsys audio 还是可以看到当时比较有用的一些日志的。

4、Android 的声音通道类型

其中streamType定义如下:
  1. STREAM_ALARM:闹钟
  2. STREAM_DTMF:双音多频,拨号键的声音
  3. STREAM_MUSIC:音乐
  4. STREAM_NOTIFICATION:通知
  5. STREAM_RING:铃声
  6. STREAM_SYSTEM:系统
  7. STREAM_VOICE_CALL:通话
复制代码
Android大概支持上面的声音通道类型,主要使用的是外放的 STREAM_MUSIC。

5、Android–耳机插拔检测(framework篇)

上层到底层的一顿讲解
https://www.yzwlo.com/program/331402ilw.htm
到此这篇关于Android adb shell dumpsys audio 信息查看分析详解的文章就介绍到这了,更多相关Android adb shell dumpsys audio 信息查看内容请搜索晓枫资讯以前的文章或继续浏览下面的相关文章希望大家以后多多支持晓枫资讯!

免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!
晓枫资讯-科技资讯社区-免责声明
免责声明:以上内容为本网站转自其它媒体,相关信息仅为传递更多信息之目的,不代表本网观点,亦不代表本网站赞同其观点或证实其内容的真实性。
      1、注册用户在本社区发表、转载的任何作品仅代表其个人观点,不代表本社区认同其观点。
      2、管理员及版主有权在不事先通知或不经作者准许的情况下删除其在本社区所发表的文章。
      3、本社区的文章部分内容可能来源于网络,仅供大家学习与参考,如有侵权,举报反馈:点击这里给我发消息进行删除处理。
      4、本社区一切资源不代表本站立场,并不代表本站赞同其观点和对其真实性负责。
      5、以上声明内容的最终解释权归《晓枫资讯-科技资讯社区》所有。
http://bbs.yzwlo.com 晓枫资讯--游戏IT新闻资讯~~~
严禁发布广告,淫秽、色情、赌博、暴力、凶杀、恐怖、间谍及其他违反国家法律法规的内容。!晓枫资讯-社区
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

手机版|晓枫资讯--科技资讯社区 本站已运行

CopyRight © 2022-2025 晓枫资讯--科技资讯社区 ( BBS.yzwlo.com ) . All Rights Reserved .

晓枫资讯--科技资讯社区

本站内容由用户自主分享和转载自互联网,转载目的在于传递更多信息,并不代表本网赞同其观点和对其真实性负责。

如有侵权、违反国家法律政策行为,请联系我们,我们会第一时间及时清除和处理! 举报反馈邮箱:点击这里给我发消息

Powered by Discuz! X3.5

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