UE4 Android端使用MediaPlayer注意事项


前言

UE4中播放音频通常使用AudioComponent、MediaSoundComponent(需要挂载MediaPlayer);
前者可播放本地音频资源(eg. cue、wave),后者可播放本地指定路径或在线音频资源等(eg. OpenFile、OpenUrl)。
本文主要介绍在安卓端使用MediaSound播放在线音频需要注意的问题。


一、音量设置无效?

MediaSound(MediaPlayer)组件设置音量接口有’SetVolumeMultiplier’和SetNativeVolume;
如果使用MediaSoundComp:SetVolumeMultiplier设置音量,则在Android下无效;
反之使用MediaPlayerComp:SetNativeVolume设置,则在Window下无效;
所以针对不同平台需要使用对应的接口设置。
设置音量蓝图示例

二、应用休眠恢复后播放中断

播放过程应用切换到后台后重新切回,之前播放的音频中断不会继续播放。

1.原因

当应用挂起的时候,会将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();
	}
}

2.解决方案

监测应用状态,当应用挂起又重新激活后,及进入OnResume时,再主动调用继续播放接口进行播放。UE4已经提供安卓端应用状态监听组件‘Application Lifecycle’,响应Actor添加改组件接口监听OnPause、OnResume等事件。
示例如下:
图片

~ 小尾巴 ~
文章内容有错误、理解不到位以及有更优方案,欢迎指正 补充 讨论!!! 

猜你喜欢

转载自blog.csdn.net/boonti/article/details/125460030