unity webGL AVPro Video 1.11.4

 播放视频   视频资源放在:StreamingAssets  文件下

using RenderHeads.Media.AVProVideo;
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using UnityEngine.UI;
/// <summary>
/// 控制 视频播放 类
/// </summary>
public class UIVideo : MonoSingleton_<UIVideo>
{
    public GameObject MaskGo;
    /// <summary>
    /// 姓名
    /// </summary>
    public Text Title;

    public Button Play;
    public Button Pause;
    public MediaPlayer mediaPlayer;
    [HideInInspector]
    public string videoname;
    [HideInInspector]
    public bool isplay;
    public Slider m_processSlider;
    public Text m_videoTimeTex;
    /// <summary>
    /// 返回按钮
    /// </summary>
    public Button ReturnBtn;
    public virtual void Awake()
    {
        Test
        //videoname = "AVProVideoSamples/AlphaLeftRight";
        //GetVideoUrl();
    }
    void Start()
    {
        ReturnBtn.onClick.AddListener(OnReturnBtn);
        Play.onClick.AddListener(OnPlayVideo);
        Pause.onClick.AddListener(OnPauseVideo);
        //注册视频播放触发事件
        mediaPlayer.Events.AddListener(MediaEventHandler);
        //注册视频播放进度条值改变触发事件
        m_processSlider.onValueChanged.AddListener(OnProcessSliderChange);
    }
    void Update()
    {
        if (isplay)
        {
            //时刻更新播放进度方法
           // DoUpdateVideoProcess();
            //时刻更新播放时间显示方法
            UpdateTimeText();
        }
    }
    /// <summary>
    /// 返回上一级
    /// </summary>
    public void OnReturnBtn()
    {
        UIBackManage.Instance.OnBack();
    }
    /// <summary>
    /// 获取视频资源(可更改参数进行切换视频操作)
    /// </summary>
    public virtual void GetVideoUrl()
    {
        //通过插件中的方法加载(参数为:1.加载路径格式(与面板上相对应)2.加载的文件名 3.默认是否开始播放)
        mediaPlayer.OpenVideoFromFile(MediaPlayer.FileLocation.RelativeToStreamingAssetsFolder, videoname + ".mp4", true);
        mediaPlayer.Play();
        isplay = true;
    }
    /// <summary>
    /// 视频播放时间触发
    /// </summary>
    /// <param name="arg0"></param>
    /// <param name="arg1"></param>
    /// <param name="arg2"></param>
    private void MediaEventHandler(MediaPlayer arg0, MediaPlayerEvent.EventType arg1, ErrorCode arg2)
    {
        switch (arg1)
        {
            case MediaPlayerEvent.EventType.Closing:
                Debug.Log("关闭播放器触发");
                break;
            case MediaPlayerEvent.EventType.Error:
                Debug.Log("报错误时触发");
                break;
            case MediaPlayerEvent.EventType.FinishedPlaying://注意:如果视频设置为循环播放模式,则不触发此项
                Debug.Log("播放完成触发");
                isplay = false;
                Pause.gameObject.SetActive(false);//暂停播放
                Play.gameObject.SetActive(true);//播放
                break;
            case MediaPlayerEvent.EventType.FirstFrameReady:
                Debug.Log("准备完触发");
                break;
            case MediaPlayerEvent.EventType.MetaDataReady:
                Debug.Log("媒体数据准备准备中触发");
                break;
            case MediaPlayerEvent.EventType.ReadyToPlay:
                Debug.Log("准备去播放触发");
                break;
            case MediaPlayerEvent.EventType.Started://注意:每暂停之后的开始播放都会触发一次
                Debug.Log("开始播放触发");
                isplay = true;
                Pause.gameObject.SetActive(true);//暂停播放
                Play.gameObject.SetActive(false);//播放
                break;
            default:
                // Debug.Assert(false);
                break;
        }
    }
    /// <summary>
    /// 播放
    /// </summary>
    public virtual void OnPlayVideo()
    {
        isplay = true;
        mediaPlayer.Control.Play();
    }
    /// <summary>
    /// 暂停
    /// </summary>
    public virtual void OnPauseVideo()
    {
        isplay = false;
        mediaPlayer.Control.Pause();
    }

    /// <summary>
    /// 时刻更新视频进度到滑动条上
    /// </summary>
    void DoUpdateVideoProcess()
    {
        //获取当前播放时长
        float tCurrentTime = mediaPlayer.Control.GetCurrentTimeMs();
        //获取视频总长度
        float tVideoTime = mediaPlayer.Info.GetDurationMs();
        //计算出对应的播放进度赋值给显示播放进度的进度条
        m_processSlider.value = tCurrentTime / tVideoTime;
    }

    /// <summary>
    /// 更新播放进度的时间显示
    /// </summary>
    void UpdateTimeText()
    {
        //对当前播放时间转换时间格式
        //转化为 秒
        int tCurrentSeconds = (int)mediaPlayer.Control.GetCurrentTimeMs() / 1000;
        //获取当前分数
        int tCurrentMin = tCurrentSeconds / 60;
        //重新赋值剩余多少秒
        tCurrentSeconds = tCurrentSeconds % 60;
        string tCurrentSecondStr = tCurrentSeconds < 10 ? "0" + tCurrentSeconds : tCurrentSeconds.ToString();

        //对总时间转化时间格式
        //转化为秒
        int tVideoTimeSeconds = (int)mediaPlayer.Info.GetDurationMs() / 1000;
        //获取总的分数
        int tVideoTimeMin = tVideoTimeSeconds / 60;
        //重新复制剩余多少秒
        tVideoTimeSeconds = tVideoTimeSeconds % 60;
        string tVideoTimeSecondStr = tVideoTimeSeconds < 10 ? "0" + tVideoTimeSeconds : tVideoTimeSeconds.ToString();

        //拼接一下时间显示字符串
        string tTime = string.Format("{0}:{1}/{2}:{3}", tCurrentMin, tCurrentSecondStr, tVideoTimeMin, tVideoTimeSecondStr);
        //string tTime = string.Format("<b>{0}:{1}/{2}:{3}</b>", tCurrentMin, tCurrentSeconds, tVideoTimeMin, tVideoTimeSeconds);
        //string tTime = string.Format("<i>{0}:{1}/{2}:{3}</i>", tCurrentMin, tCurrentSeconds, tVideoTimeMin, tVideoTimeSeconds);

        m_videoTimeTex.text = tTime; ;
    }
    /// <summary>
    /// 视频播放进度条值改变触发
    /// </summary>
    /// <param name="value"></param>
    void OnProcessSliderChange(float value)
    {
        //获取视频总长度
        float tVideoTime = mediaPlayer.Info.GetDurationMs();
        //当前视频的时间
        float tCurrentTime = m_processSlider.value * tVideoTime;
        //将视频时间调到对应的节点
        mediaPlayer.Control.Seek(tCurrentTime);
    }


    /// <summary>
    /// 设置状态
    /// </summary>
    public void SetSteat(bool bo, string videoName_= "AVProVideoSamples/纯度假型酒店")
    {
        if (bo)
        {
            MaskGo.SetActive(bo);
            videoname = videoName_;
            GetVideoUrl();
        }
        else
        {
            OnPauseVideo();
            MaskGo.SetActive(bo);
        }
    }
}


猜你喜欢

转载自blog.csdn.net/qq_37524903/article/details/127239152