unity移动(安卓端播放视频)使用插件EasyMovieTexture

使用插件:EasyMovieTexture

用于播放视频,可播放的格式为.mp4   .mov  不可播放的格式为.ogv格式

使用方式:

将Prefab中VideoManager预设体拖入场景中,去掉B Loop和B Auto Play(视频循环播放和视频自动播放)

编写代码:功能为 点击按钮播放视频

视频播放控制:

由于Load方法会花费一定的时间,当没有加载视频没有完成时,点击按钮视频不会播放,但是当在unity编辑模式失去焦点时,会重新播放(为制作时发现的一个插件BUG)

解决方案:加载完成时会调用委托OnReady方法,因此将LoadFinished作为回调,加载完成后即播放视频。

using UnityEngine;

/// <summary>
/// 视频播放插件控制脚本
/// </summary>
public class MobileVideoPlay : MonoBehaviour {

    public MediaPlayerCtrl m_MediaPlayerCtrl;

    public void PlayMobileVideo(string videoName)
    {
        if(m_MediaPlayerCtrl.GetCurrentState() == MediaPlayerCtrl.MEDIAPLAYER_STATE.PLAYING)
        {
            m_MediaPlayerCtrl.Stop();
        }
        m_MediaPlayerCtrl.UnLoad();


        m_MediaPlayerCtrl.Load(videoName);
        m_MediaPlayerCtrl.OnReady = LoadFinished;
    }

    public void LoadFinished()
    {
        m_MediaPlayerCtrl.Play();
    }
}

按钮控制:

using UnityEngine;
using UnityEngine.UI;

/// <summary>
/// 测试播放视频
/// </summary>
public class TestVideoPlay : MonoBehaviour {

    private void Start()
    {
        GetComponent<Button>().onClick.AddListener(() =>
        {
            OnPlayBtnClick();
        });
    }

    public void OnPlayBtnClick()
    {
        Canvas canvas = FindObjectOfType<Canvas>();
        canvas.GetComponent<MobileVideoPlay>().PlayMobileVideo("EasyMovieTexture.mp4");
    }
}

 

点击按钮播放下一个视频:


using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using UnityEngine.UI;
 
public class UIRawImageMoviePlayControl : MonoBehaviour
{
    private MediaPlayerCtrl mediaPlayerCtrl;
    private RawImage movieRawImage;
 
    private int currentPlayMovieIndex;
    private string[] needPlayMovieNameArr = new string[] { "EasyMovieTexture.mp4", "ed_1024_512kb.mp4", "TPJ_2_xianxiang.mov" };

 
    void Start()
    {
        mediaPlayerCtrl = GetComponent<MediaPlayerCtrl>();
        movieRawImage = GetComponent<RawImage>();
 
        Material movieMaterial = Instantiate(Resources.Load("MovieMaterial")) as Material;
        movieRawImage.material = movieMaterial;
 
        mediaPlayerCtrl.m_bAutoPlay = false;
 
        currentPlayMovieIndex = 0;
    }
 
    public void OnPlayBtnClick()
    {
        movieRawImage.gameObject.SetActive(true);
 
        mediaPlayerCtrl.Load(needPlayMovieNameArr[currentPlayMovieIndex]);
 
        mediaPlayerCtrl.Play();
    }
 
    public void OnNextBtnClick()
    {
        OnStopBtnClick();
 
        if (currentPlayMovieIndex < needPlayMovieNameArr.Length - 1) currentPlayMovieIndex++;
        else currentPlayMovieIndex = 0;
 
        OnPlayBtnClick();
    }
 
    public void OnPauseBtnClick()
    {
        mediaPlayerCtrl.Pause();
    }
 
    public void OnStopBtnClick()
    {
        mediaPlayerCtrl.Stop();
        movieRawImage.gameObject.SetActive(false);
    }
}

 

补充内容:

场景中有Canvas界面,如果希望将VideoManager显示在制定UI界面前,由于Canvas处于最前面,遮挡VideoManager

具体解决做法为:

将Canvas中Render Mode 更改为World Space,此时调整z轴时可以更改遮挡关系

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章