Bug #116609
【BSP】【EVT3】【ST】【Audio】副屏多媒体播放时,此时中控去播放,中控发送onAudioFocusChange为loss的通知到副屏,副屏会发送三次abandonAudioFocus到中控
Status: | CLOSED | Start date: | 2023-02-28 | |
---|---|---|---|---|
Priority: | High | Due date: | ||
Assignee: | CD Test赵飞 | % Done: | 100% | |
Category: | AUDIO-FW | |||
Target version: | - | |||
Need_Info: | -- | Found Version: | 0068 | |
Resolution: | FIXED | Degrated: | -- | |
Severity: | Major | Verified Version: | FlatBuild_HH_MCE_FSE.M.R.user.01.00.0084.C101(X101) | |
Reproducibility: | Every time | Fixed Version: | 2023-03-22 | |
Test Type: | ST | Root cause: | 该问题在最新版本不发生 |
Description
现象:
副屏多媒体播放时,此时中控去播放,中控发送onAudioFocusChange为loss的通知到副屏,副屏会发送三次abandonAudioFocus到中控
预期结果:
副屏只接收通知,一次abandonAudioFocus都不发送
History
#1 Updated by CD TPM-王祥林 over 2 years ago
- Category changed from BSP to AUDIO-FW
#2 Updated by CD TPM-王祥林 over 2 years ago
- Assignee changed from CD BSP何伟 to CD MM唐驭俊
#3 Updated by CD TPM-王祥林 over 2 years ago
- Assignee changed from CD MM唐驭俊 to Multimedia组-RD3_TSCD 梁卿山
#4 Updated by Multimedia组-RD3_TSCD 梁卿山 over 2 years ago
HI ALL,
■我的分析
6203:03-01 19:05:54.370 1067 1602 D AudioIDCMicroNegotiator: idcm_af:onAudioFocusStateChanged type=AudioFocus_Media, result = AUDIOFOCUS_LOSS timeout= false
第一次
6213:03-01 19:05:54.376 1884 3028 V PlayerBase: TS >>> baseStop() piid=295
6214:03-01 19:05:54.376 1884 3028 E PlayerBase: TS >>> playerEvent
...
6225:03-01 19:05:54.378 1067 1602 D AudioIDCMicroNegotiator: idcm_af:abandonIDCMicroAudioFocus: AudioFocus_Media
6226:03-01 19:05:54.378 1067 1602 D AudioIDCMicroNegotiator: idcm_common:requestResult method = abandonAudioFocus parameters = {"functionInfo":{"IDCM_AudioFocus":"AudioFocus_Media"}}
第二次
6238:03-01 19:05:54.391 3658 3674 V PlayerBase: TS >>> baseStop() piid=311
6239:03-01 19:05:54.391 3658 3674 E PlayerBase: TS >>> playerEvent
...
6617:03-01 19:05:55.001 1067 1602 D AudioIDCMicroNegotiator: idcm_af:abandonIDCMicroAudioFocus: AudioFocus_Media
6618:03-01 19:05:55.002 1067 1602 D AudioIDCMicroNegotiator: idcm_common:requestResult method = abandonAudioFocus parameters = {"functionInfo":{"IDCM_AudioFocus":"AudioFocus_Media"}}
第三次
6594:03-01 19:05:54.991 3658 3658 V PlayerBase: TS >>> baseStop() piid=311
6595:03-01 19:05:54.991 3658 3658 E PlayerBase: TS >>> playerEvent
...
6667:03-01 19:05:55.616 1067 1969 D AudioIDCMicroNegotiator: idcm_af:abandonIDCMicroAudioFocus: AudioFocus_Media
6669:03-01 19:05:55.616 1067 1969 D AudioIDCMicroNegotiator: idcm_common:requestResult method = abandonAudioFocus parameters = {"functionInfo":{"IDCM_AudioFocus":"AudioFocus_Media"}}
根据以上日志,我们判断到,当中控屏主动发送AUDIOFOCUS_LOSS后,副屏会释放焦点,并且停止所有播放器播放,
而当应用调用MediaPlayer、SoundPool的stop方法时会触发playerevent,
进而调用到PlaybackActivityMonitor.requestAudioFocusToIDCM中,
由于当前调用了stop三次,导致AudioIDCMicroNegotiator.abandonIDCMicroAudioFocus也被调用了三次。
■ 下一步
当前需要方案去优化这个问题,但是我们认为至少需要abandonIDCMicroAudioFocus被调用一次,否则中控无法知道副屏是否已经没有播放音频。
#5 Updated by Multimedia组-RD3_TSCD 梁卿山 over 2 years ago
Hi ALL,
■我的分析
当前已经找到了方案,可以只在该场景下副屏调用一次abandonAudioFocus,具体方案提交如下:
diff --git a/services/core/java/com/android/server/audio/AudioIDCMicroNegotiator.java b/services/core/java/com/android/server/audio/AudioIDCMicroNegotiator.java
index 58c70afea063..1b4319df4f17 100644
--- a/services/core/java/com/android/server/audio/AudioIDCMicroNegotiator.java
+++ b/services/core/java/com/android/server/audio/AudioIDCMicroNegotiator.java@ -480,6 +480,10
@ public class AudioIDCMicroNegotiator {
return mSource;
}
+ public int getIDCMicroAudioFocusState() {
+ return mFocusState;
+ }
+
}
public int requestIDCMicroAudioFocus(AudioAttributes aa, RequestInfosToIDCM info) {
@ -516,7 +520,8
@ public class AudioIDCMicroNegotiator {
}
public int abandonIDCMicroAudioFocus(String source) {
- if (source != null && source.equals(mAudioFocusHandler.getIDCMicroAudioFocus())){
+ if (source != null && source.equals(mAudioFocusHandler.getIDCMicroAudioFocus())
+ && mAudioFocusHandler.getIDCMicroAudioFocusState() != AudioManager.AUDIOFOCUS_REQUEST_FAILED){
return abandonIDCMicroAudioFocus();
}
return AudioManager.AUDIOFOCUS_REQUEST_FAILED;
■下一步
测试该方案其他影响,还有该方案是否中控可以接受。
#6 Updated by Multimedia组-RD3_TSCD 梁卿山 over 2 years ago
Hi All,
今天和中控沟通,以下场景也需要考虑,所以方案还需要完善。
1.副屏播放音乐结束后 → 此时需要通知主屏abandonaudiofocus
2.主屏打电话通知副屏焦点失去 → 此时不需要通知主屏abandonaudiofocus
3.主屏电话结束会告知副屏重新获得焦点 →不需要通知主屏requestaudiofocus
#7 Updated by Multimedia组-RD3_TSCD 梁卿山 over 2 years ago
- Status changed from New to NEED_INFO
- Assignee changed from Multimedia组-RD3_TSCD 梁卿山 to CD Test赵飞
Hi 赵飞
■ 现状
1.上面提到的别的场景,已经出了新的PRD,将在票116966 中对应
2.当前最新版本该问题已经被修复,不再发多次的abandonAudioFocus,请帮忙确认一下,谢谢!
确认方法:
前提,中控和副屏连接正常
1.副屏播放音乐
2.中控再去播放音乐
3.观察副屏日志输出,是否有多次的abandonAudioFocus的输出。
如下内容:
03-12 01:53:52.154 1049 1738 I MicroServiceManager: requestResult(abandonAudioFocus) parameters is{"functionInfo":{"IDCM_AudioFocus":"AudioFocus_Media"}}.
日志筛选命令
adb logcat |grep -Ei "abandonAudioFocus"
或
adb shell
logcat |grep -Ei "abandonAudioFocus"
#8 Updated by CD Test赵飞 over 2 years ago
- File logcat.txt
added
- Status changed from NEED_INFO to ASSIGNED
- Assignee changed from CD Test赵飞 to Multimedia组-RD3_TSCD 梁卿山
3/21号release版本验证,副屏音乐播放中,中控播放音乐,日志中没有abandonAudioFocus的输出
日志见附件
#9 Updated by Multimedia组-RD3_TSCD 梁卿山 over 2 years ago
- Status changed from ASSIGNED to RESOLVED
- Assignee changed from Multimedia组-RD3_TSCD 梁卿山 to CD Test赵飞
- Resolution changed from -- to FIXED
Hi 赵飞
该问题经过确认,不再发生,请关票,谢谢!
#10 Updated by CD Test赵飞 over 2 years ago
- Status changed from RESOLVED to VERIFIED
- % Done changed from 0 to 100
- Verified Version set to FlatBuild_HH_MCE_FSE.M.R.user.01.00.0084.C101(X101)
#11 Updated by CD Test赵飞 over 2 years ago
- Status changed from VERIFIED to CLOSED
#12 Updated by Multimedia组-RD3_TSCD 梁卿山 over 2 years ago
- Fixed Version set to 2023-03-22
- Root cause set to 该问题在最新版本不发生