美文网首页
VideoPlayer

VideoPlayer

作者: SmallFlydream | 来源:发表于2019-04-08 21:04 被阅读0次
  • 常用的几个属性
    //视频播放的时间(s)
    // Debug.Log(_videoPlayer.time);
    //当前视频的帧数
    //Debug.Log(_videoPlayer.frameCount);
    //视频播放d到第几帧
    // Debug.Log(_videoPlayer.frame);
    //原视频源的高度
    // Debug.Log(_videoPlayer.height);
    //Debug.Log(_videoPlayer.width);
    //原视视频的总长度(s)
    // Debug.Log(_videoPlayer.length);
  • 示例
/**
 *Copyright(C) 2019 by #PROJECTNAME#
 *All rights reserved.
 *FileName:     #SCRIPTFULLNAME#
 *Author:      Nxf 
 *Version:      #VERSION#
 *UnityVersion:#UNITYVERSION#
 *Date:        #DATE#
 *Description:   
 *History:  
*/
using System;
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using UnityEngine.UI;
using UnityEngine.Video;
using xxx;
using static UnityEngine.UI.Slider;

namespace Expm.VideoPalyer01
{
    public class VideoPlayerController : MonoBehaviour
    {

        #region Private Properties
        private int _clipHour, _clipMinute, _clipSecond;
        private int _currHour, _currMinute, _currSecond;
        private bool isPause = true;
        #endregion

        #region Public Properties
        public VideoPlayer _videoPlayer;
        public TextMesh _text;
        public Slider _slider;
        #endregion

        #region 拖拽事件
        private void ObjectTrigger_OnDragEndAction(Transform obj)
        {
            isPause = true;
        }

        private void ObjectTrigger_OnDragAction(Transform obj)
        {
            isPause = false;
            SkipToTrame(_slider.value);
        }
        #endregion

        /// <summary>
        /// 点击事件
        /// </summary>
        /// <param name="obj"></param>
        private void ObjectTrigger_OnClickAction(Transform obj)
        {

            if (obj == _slider.transform)
            {
                Debug.Log(obj.GetComponent<RectTransform>().rect.xMin);
                Debug.Log(obj.GetComponent<RectTransform>().rect.xMax);
                Vector2 localPoint;
                if (RectTransformUtility.ScreenPointToLocalPointInRectangle(obj.GetComponent<RectTransform>(), Input.mousePosition, null, out localPoint))
                {
                    Debug.LogWarning(localPoint.x);
                    float pct = Mathf.InverseLerp(obj.GetComponent<RectTransform>().rect.xMin, obj.GetComponent<RectTransform>().rect.xMax, localPoint.x);
                    SkipToTrame(pct);
                }
            }
        }

        #region Unity Life Cycle

        // Use this for initialization
        void Start()
        {
            GetVideoTime();
        }

        // Update is called once per frame
        void Update()
        {
            if (isPause)
            {
                _videoPlayer.Play();
                Debug.Log("ddddd");
                _currHour = GetTime(Time.Hour, (float)_videoPlayer.time);
                _currMinute = GetTime(Time.Minute, (float)_videoPlayer.time);
                _currSecond = GetTime(Time.Second, (float)_videoPlayer.time);
                _text.text = string.Format("{0:D2}:{1:D2}:{2:D2}/{3:D2}:{4:D2}:{5:D2}", _currHour, _currMinute, _currSecond, _clipHour, _clipMinute, _clipSecond);
                _slider.value = (float)(_videoPlayer.time / _videoPlayer.length);
            }
            else
            {
                _videoPlayer.Pause();
            }

        }

        #endregion

        #region Private Methods
        /// <summary>
        /// 初始化
        /// </summary>
        private void GetVideoTime()
        {
            _clipHour = GetTime(Time.Hour, (float)_videoPlayer.length);
            _clipMinute = GetTime(Time.Minute, (float)_videoPlayer.length);
            _clipSecond = GetTime(Time.Second, (float)_videoPlayer.length);
            ObjectTrigger.OnClickAction += ObjectTrigger_OnClickAction;
            ObjectTrigger.OnDragAction += ObjectTrigger_OnDragAction;
            ObjectTrigger.OnDragEndAction += ObjectTrigger_OnDragEndAction;
        }
        /// <summary>
        /// 点击的比例
        /// </summary>
        /// <param name="pct"></param>
        private void SkipToTrame(float pct)
        {
            var frame = _videoPlayer.frameCount * pct;
            _videoPlayer.frame = (long)frame;

        }
        /// <summary>
        /// 转换时间
        /// </summary>
        /// <param name="time"></param>
        /// <param name="timeLength"></param>
        /// <returns></returns>
        private int GetTime(Time time, float timeLength)
        {
            int getTime = 0;
            switch (time)
            {
                case Time.Hour:
                    getTime = (int)(timeLength / 3600);
                    break;
                case Time.Minute:
                    getTime = (int)(timeLength - ((int)(timeLength / 3600)) * 3600) / 60;
                    break;
                case Time.Second:
                    getTime = (int)(timeLength - ((int)(timeLength - ((int)(timeLength / 3600)) * 3600) / 60) * 60 - (int)(timeLength / 3600) * 3600);
                    break;
                default:
                    break;
            }
            return getTime;
        }

        #endregion
    }
    public enum Time
    {
        Hour,
        Minute,
        Second,
    }
}

20190409_152500.gif

相关文章

网友评论

      本文标题:VideoPlayer

      本文链接:https://www.haomeiwen.com/subject/tazyiqtx.html