Androidでメディア再生の問題を調べる

xperia5v(Android 13)でYoutubeやYoutube music,Spotifyなど音楽・動画などアプリを問わずメディアの再生が突然一時停止する問題が起きたので状況を調べてみる

メモリ不足によるタスクキルという線も考えていたんですけど発生条件がランダムでフォアグラウンドやバックグラウンド関係なく、ロック中であろうがなかろうが状況を問わず発生するため少し違う感じ。

原因もわからずちまちま聞いてる音楽や動画を止められるのはストレスがたまるのでじっくり調べたところAndroidでは[音声フォーカス](https://source.android.com/docs/devices/automotive/audio/audio-focus)という仕組みで音声の操作を行っている様子。

今回はadbでコマンドでこの音声フォーカスの状況を調べてみて、原因となる情報を探る話です。

# 調査方法
USBデバッグなどで問題の端末にadbを実行できるようにして、以下のコマンドでオーディオ周りのダンプデータを取得します。
```bash
adb shell dumpsys audio
```

# 確認箇所
たくさん出力されますが参考になったのは先頭にある以下の2箇所。


### Audio Focus stack entries
ここには今音声フォーカスを取っているアプリが出力されるようです。
問題発生直後にどのアプリが音声フォーカスを取っているかで問題のアプリを特定できるはず。
```bash
Audio Focus stack entries (last is top of stack):
  source:android.os.BinderProxy@80b74b5 -- pack: jp.co.sony.mc.usbextoutaudio -- client: android.media.AudioManager@f4b0207x1.a@5f82f34 -- gain: GAIN -- flags: DELAY_OK|PAUSES_ON_DUCKABLE_LOSS -- loss: none -- notified: true -- limbofalse -- uid: 1210231 -- attr: AudioAttributes: usage=USAGE_MEDIA content=CONTENT_TYPE_UNKNOWN flags=0x800 tags= bundle=null -- sdk:33
```
なんだか知らないシステムアプリの`jp.co.sony.mc.usbextoutaudio`が音声フォーカスを取ってますね。USB音声出力に関するアプリのようですが、私は今回Bluetoothで再生しています...

### Audio event log: focus commands as seen by MediaFocusControl
ここには直近の音声フォーカスを取ったアプリのログが出ます。以下の操作はYoutube musicが一時停止したので再生を再開した際のログです。
`com.google.android.apps.youtube.music`は自分が再生開始したものですが、直後`jp.co.sony.mc.usbextoutaudio`が音声フォーカスを取って再生が停止している様子が伺えます。

```bash
Audio event log: focus commands as seen by MediaFocusControl
12-04 00:16:34:445 requestAudioFocus() from uid/pid 1210231/31919 AA=USAGE_MEDIA/CONTENT_TYPE_UNKNOWN clientId=android.media.AudioManager@f4b0207x1.a@5f82f34 callingPack=jp.co.sony.mc.usbextoutaudio req=1 flags=0x3 sdk=33
12-04 00:16:35:181 focus requester:android.media.AudioManager@f4b0207x1.a@5f82f34 in uid:1210231 pack:jp.co.sony.mc.usbextoutaudio died
12-04 00:16:35:417 requestAudioFocus() from uid/pid 1210231/32363 AA=USAGE_MEDIA/CONTENT_TYPE_UNKNOWN clientId=android.media.AudioManager@f4b0207x1.a@5f82f34 callingPack=jp.co.sony.mc.usbextoutaudio req=1 flags=0x3 sdk=33
12-04 00:16:35:694 focus requester:android.media.AudioManager@f4b0207x1.a@5f82f34 in uid:1210231 pack:jp.co.sony.mc.usbextoutaudio died
12-04 00:16:35:884 requestAudioFocus() from uid/pid 1210231/32673 AA=USAGE_MEDIA/CONTENT_TYPE_UNKNOWN clientId=android.media.AudioManager@f4b0207x1.a@5f82f34 callingPack=jp.co.sony.mc.usbextoutaudio req=1 flags=0x3 sdk=33
12-04 00:21:59:499 requestAudioFocus() from uid/pid 10580/30447 AA=USAGE_MEDIA/CONTENT_TYPE_MUSIC clientId=android.media.AudioManager@faabdc3amje@9566640 callingPack=com.google.android.apps.youtube.music req=1 flags=0x0 sdk=34
12-04 00:22:05:388 requestAudioFocus() from uid/pid 1210231/6361 AA=USAGE_MEDIA/CONTENT_TYPE_UNKNOWN clientId=android.media.AudioManager@f4b0207x1.a@5f82f34 callingPack=jp.co.sony.mc.usbextoutaudio req=1 flags=0x3 sdk=33
12-04 00:22:06:230 focus requester:android.media.AudioManager@f4b0207x1.a@5f82f34 in uid:1210231 pack:jp.co.sony.mc.usbextoutaudio died
12-04 00:22:06:350 requestAudioFocus() from uid/pid 1210231/7129 AA=USAGE_MEDIA/CONTENT_TYPE_UNKNOWN clientId=android.media.AudioManager@f4b0207x1.a@5f82f34 callingPack=jp.co.sony.mc.usbextoutaudio req=1 flags=0x3 sdk=33
12-04 00:29:31:389 focus requester:android.media.AudioManager@f4b0207x1.a@5f82f34 in uid:1210231 pack:jp.co.sony.mc.usbextoutaudio died
12-04 00:29:39:307 requestAudioFocus() from uid/pid 10580/13744 AA=USAGE_MEDIA/CONTENT_TYPE_MUSIC clientId=android.media.AudioManager@2f18572amje@faabdc3 callingPack=com.google.android.apps.youtube.music req=1 flags=0x0 sdk=34
Multi Audio Focus enabled :false
```
## 対処
ここではMediaFocusControlのログからなぜ音声フォーカスを取っているのか不明な`jp.co.sony.mc.usbextoutaudio`のストレージを削除したら問題が解消しました。
上記以外にもその他にも参考になる情報がたくさん出るため、問題解決のヒントになる情報が得られると思います。ご参考までに。