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軸時可以更改遮擋關係

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