UE4中播放音频通常使用AudioComponent、MediaSoundComponent(需要挂载MediaPlayer);
前者可播放本地音频资源(eg. cue、wave),后者可播放本地指定路径或在线音频资源等(eg. OpenFile、OpenUrl)。
本文主要介绍在安卓端使用MediaSound播放在线音频需要注意的问题。
MediaSound(MediaPlayer)组件设置音量接口有’SetVolumeMultiplier’和SetNativeVolume;
如果使用MediaSoundComp:SetVolumeMultiplier设置音量,则在Android下无效;
反之使用MediaPlayerComp:SetNativeVolume设置,则在Window下无效;
所以针对不同平台需要使用对应的接口设置。
播放过程应用切换到后台后重新切回,之前播放的音频中断不会继续播放。
当应用挂起的时候,会将MediaPlayer暂停。
引擎代码如下,HandleApplicationHasEnteredForeground可看作Android的OnResume, HandleApplicationWillEnterBackground看作OnPause;
但此处我有点不理解,它是在OnResume的时候将其暂停,OnPause时Start?总感觉这两个设定相反了,或者安卓的机制就是这样设定也可有可能。有了解的朋友欢迎指正!
// 代码文件路径 \UE_4.26\Engine\Plugins\Media\AndroidMedia\Source\AndroidMedia\Private\Player\AndroidMediaPlayer.cpp
/* FAndroidMediaPlasoundyer callbacks
*****************************************************************************/
void FAndroidMediaPlayer::HandleApplicationHasEnteredForeground()
{
// check state in case changed before ticked
if ((CurrentState == EMediaState::Playing) && JavaMediaPlayer.IsValid())
{
JavaMediaPlayer->Pause();
}
}
void FAndroidMediaPlayer::HandleApplicationWillEnterBackground()
{
// check state in case changed before ticked
if ((CurrentState == EMediaState::Playing) && JavaMediaPlayer.IsValid())
{
JavaMediaPlayer->Start();
}
}
监测应用状态,当应用挂起又重新激活后,及进入OnResume时,再主动调用继续播放接口进行播放。UE4已经提供安卓端应用状态监听组件‘Application Lifecycle’,响应Actor添加改组件接口监听OnPause、OnResume等事件。
示例如下:
~ 小尾巴 ~
文章内容有错误、理解不到位以及有更优方案,欢迎指正 补充 讨论!!!