• 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();
    	}
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23

    2.解决方案

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

    ~ 小尾巴 ~
    文章内容有错误、理解不到位以及有更优方案,欢迎指正 补充 讨论!!! 
    
    • 1
    • 2
  • 相关阅读:
    2021年Javascript最常见的面试题以及答案
    【Java八股文总结】之Redis数据库
    计算机的层次与编程语言
    网络爬虫——urllib(4)文末好书推荐
    Turbo译码部分的迭代停止准则
    Docker下载Elasticsearch镜像并运行Elasticsearch容器
    CF思维训练,2020长春CCPC(A,D)
    大数据测试用例分析
    用Python实现的这五个小游戏,你真的学会了嘛?
    k3s+traefik+cert-manager+letsencrypt实现web服务全https
  • 原文地址:https://blog.csdn.net/boonti/article/details/125460030