
应用在有其它应用后台播放音乐时,如何正确选择音频流类型
问题背景
有其他应用在后台播放音乐时,开发者需要根据应用场景指定音频流的StreamUsage,如果配置了不正确的StreamUsage,可能带来一些不符合预期的行为。例如以下场景:
导航场景错误使用STREAM_USAGE_MUSIC类型,导航应用播报时候会导致正在播放的音乐停止播放,而导航场景通常期望正在播放的音乐仅仅降低音量播放。
实现方案
开发者需要了解音频流类型对音频焦点管理的影响,然后根据自身的业务场景和实际需求,为音频选择合适的流类型。
例如有其他应用在后台播放音乐时,可参考下表进行选择:
应用需要播放的音频场景 | 打断效果 | 推荐流类型 |
闹钟 | 打断暂停 | STREAM_USAGE_ALARM |
VoIP来电响铃 | STREAM_USAGE_RINGTONE | |
VoIP语音通话 | STREAM_USAGE_VOICE_COMMUNICATION | |
语音短消息 | STREAM_USAGE_VOICE_MESSAGE | |
音乐场景 | 打断停止 | STREAM_USAGE_MUSIC |
短视频、电影、电视剧 | STREAM_USAGE_MOVIE | |
有声读物、听新闻、播客 | STREAM_USAGE_AUDIOBOOK | |
导航 | 音量降低 | STREAM_USAGE_NAVIGATION |
通知音、提示音 | STREAM_USAGE_NOTIFICATION | |
语音播报 | STREAM_USAGE_VOICE_ASSISTANT | |
游戏 | 并发播放 | STREAM_USAGE_GAME |
使用SoundPool播放简短音效(点赞音、效果音等) | STREAM_USAGE_MUSIC |
设置音频流类型
AudioRenderer(ArkTS)
在调用createAudioRenderer接口时,传入对应的StreamUsage。
注:AudioRendererOptions中包含AudioRendererInfo,AudioRendererInfo中包含StreamUsage参数。
OHAudio(C/C++)
在调用OH_AudioStreamBuilder_SetRendererInfo接口时,传入对应的OH_AudioStream_Usage。
OH_AudioStreamBuilder_SetRendererInfo(builder, AUDIOSTREAM_USAGE_MUSIC)。
AVPlayer(ArkTS)
通过设置属性audioRendererInfo中的usage来设置音频播放流类型。
注:在设置AVPlayer的audioRendererInfo属性时,只允许在initialized状态下设置。若应用没有主动设置该属性,AVPlayer会根据媒体源是否包含视频,使用Music或Movie作为usage的默认值。
AVPlayer(C/C++)
在调用OH_AVPlayer_SetAudioRendererInfo接口时,传入对应的OH_AudioStream_Usage。
OH_AVPlayer_SetAudioRendererInfo(player, AUDIOSTREAM_USAGE_MUSIC)。
SoundPool(ArkTS)
在调用createSoundPool接口时,传入对应的StreamUsage。
