Bug #116609

【BSP】【EVT3】【ST】【Audio】副屏多媒体播放时,此时中控去播放,中控发送onAudioFocusChange为loss的通知到副屏,副屏会发送三次abandonAudioFocus到中控

Added by 移动测试一组_CDTS 刘强 over 2 years ago. Updated over 2 years ago.

Status:CLOSEDStart date:2023-02-28
Priority:HighDue 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都不发送

logcat.txt Magnifier (4.17 MB) CD Test赵飞, 2023-03-21 14:14

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.txtMagnifier 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 该问题在最新版本不发生

Also available in: Atom PDF