VideoPlayer 视频播放

videoPlayer 详解 

 using UnityEngine;
using UnityEngine.UI;
using UnityEngine.Video;
public class ToPlayVideo : MonoBehaviour
{
   
    public Text videoTimeText;          // 视频的当前时间 Text
    public Text videoNameText;          // 视频的总时长 Text
    public Slider videoTimeSlider;      // 视频的时间 Slider
    // 定义参数获取VideoPlayer组件和RawImage组件
    internal VideoPlayer videoPlayer;
    private RawImage rawImage;
    public Texture pingBao;             // 屏保图片
    // 当前视频的总时间值和当前播放时间值的参数
    private int currentHour;
    private int currentMinute;
    private int currentSecond;
    private int clipHour;
    private int clipMinute;
    private int clipSecond;

    public Sprite play;
    public Sprite pause;
    private bool isPlay = true;          //是否正在播放视频
    public Button playPauseButton;       //播放暂停按钮
    //[Header("停止播放按钮")]
    //public Button stopButton;            //停止播放按钮
    [Header("选择当前视频")]
    public Button button1;
    [Header("下一步")]
    public Button next;
    //获取视频时长
    public float video_url_length;
    void Init()
    {
        videoTimeText.gameObject.SetActive(false);
        videoNameText.gameObject.SetActive(false);
        videoTimeSlider.gameObject.SetActive(false);
        playPauseButton.gameObject.SetActive(false);
        next.gameObject.SetActive(false);
        if (next.name == "下一步")
        {
            videoPlayer.url = Application.streamingAssetsPath + "/基于机器视觉的焊缝识别与跟踪系统/2.mp4";

           
        }
        else if (next.name == "重置")
        {
            videoPlayer.url = Application.streamingAssetsPath + "/视频/视频.mp4";
        }
    }
    // Use this for initialization
    void Start()
    {
        //清空文本
        videoNameText.text = "";
        videoTimeText.text = "";

        //获取场景中对应的组件
        videoPlayer = this.GetComponent<VideoPlayer>();
        rawImage = this.GetComponent<RawImage>();
       
        videoPlayer.playOnAwake = false;
        videoPlayer.IsAudioTrackEnabled(0);

        Init();
        playPauseButton.onClick.AddListener(PlayOrPause);
      
        button1.onClick.AddListener(delegate { OnClick(); });
       
    }
    // Update is called once per frame
    void Update()
    {
        //如果videoPlayer没有对应的视频texture,则返回屏保
        if (videoPlayer.texture == null)
        {
            rawImage.texture = pingBao;
            return;
        }
        //把VideoPlayerd的视频渲染到UGUI的RawImage
        rawImage.texture = videoPlayer.texture;

        if (videoPlayer.isPlaying)
        {
            ShowVideoTime();
        }
       
    }

    /// <summary>
    /// 显示当前视频的时间
    /// </summary>
    private void ShowVideoTime()
    {
        //通过url 获取的视频 如果直接托可用 VideoPlayer.clip.length
        video_url_length = (videoPlayer.frameCount / videoPlayer.frameRate);

        // 当前的视频播放时间
        currentHour = (int)videoPlayer.time / 3600;
        currentMinute = (int)(videoPlayer.time - currentHour * 3600) / 60;
        currentSecond = (int)(videoPlayer.time - currentHour * 3600 - currentMinute * 60);
        // 把当前视频播放的时间显示在 Text 上
        videoTimeText.text = string.Format("当前视频播放的时长:{0:D2}:{1:D2}:{2:D2}",
            currentHour, currentMinute, currentSecond);


        // 把当前视频播放的时间比例赋值到 Slider 上
        // videoTimeSlider.value = (float)(videoPlayer.time / videoPlayer.clip.length);
        videoTimeSlider.value = (float)(videoPlayer.time / video_url_length);

    }
    /// <summary>
    /// 显示视频的总时长
    /// </summary>
    /// <param name="videos">当前视频</param>
    void ShowVideoLength()
    {
      

        videoPlayer.Play();
        videoPlayer.SetDirectAudioMute(0, false);

        videoTimeSlider.gameObject.SetActive(true);


        clipHour = 191 / 3600;
      
        clipMinute = (int)(191 - clipHour * 3600) / 60;
        clipSecond = (int)(191 - clipHour * 3600 - clipMinute * 60);



        videoNameText.text = string.Format("视频的总时长:{0:D2}:{1:D2}:{2:D2} ",
             clipHour, clipMinute, clipSecond);
    }

    private void OnClick()
    {
       
        ShowVideoLength();

        videoTimeText.gameObject.SetActive(true);
        videoNameText.gameObject.SetActive(true);
        videoTimeSlider.gameObject.SetActive(true);
        playPauseButton.gameObject.SetActive(true);
        next.gameObject.SetActive(true);
    }

    /// <summary>
    /// 视频播放暂停
    /// </summary>
    void PlayOrPause()
    {
        //如果视频片段不为空,并且视频画面没有播放完毕
        if ((ulong)videoPlayer.frame < videoPlayer.frameCount)
        {
            //如果视频正在播放
            if (isPlay)
            {
                playPauseButton.image.sprite = pause;
                videoPlayer.Pause();
                isPlay = false;
            }
            else
            {
                playPauseButton.image.sprite = play;
                videoPlayer.Play();
                isPlay = true;
            }
        }
    }

    void StopVideo()
    {
        videoPlayer.Stop();
        playPauseButton.image.sprite = play;
        videoTimeSlider.gameObject.SetActive(false);
        videoNameText.text = "";
        videoTimeText.text = "";
        isPlay = true;
    }
}
using UnityEngine;
using UnityEngine.EventSystems;
/// <summary>
/// 继承 拖拽接口
/// </summary>
public class SliderEvent : MonoBehaviour, IDragHandler, IEndDragHandler
{
    [SerializeField]
    public ToPlayVideo toPlayVideo;        // 视频播放的脚本

    // Use this for initialization
    void Start()
    {

    }

    // Update is called once per frame
    void Update()
    {

    }

    /// <summary>
    /// 给 Slider 添加开始拖拽事件
    /// </summary>
    /// <param name="eventData"></param>
    public void OnDrag(PointerEventData eventData)
    {
        toPlayVideo.videoPlayer.Pause();
        SetVideoTimeValueChange();
    }

    /// <summary>
    /// 当前的 Slider 比例值转换为当前的视频播放时间
    /// </summary>
    private void SetVideoTimeValueChange()
    {
       
            toPlayVideo.videoPlayer.time = toPlayVideo.videoTimeSlider.value * toPlayVideo.video_url_length;
          
    }

    /// <summary>
    /// 给 Slider 添加结束拖拽事件
    /// </summary>
    /// <param name="eventData"></param>
    public void OnEndDrag(PointerEventData eventData)
    {
        toPlayVideo.videoPlayer.Play();
    }
}

 

 

using UnityEngine;
using UnityEngine.UI;
using UnityEngine.Video;
public class ToPlayVideo : MonoBehaviour
{
    public static ToPlayVideo instance;
    [Header("当前时间")]
    public Text videoTimeText;          // 视频的当前时间 Text
    [Header("总时间")]
    public Text videoNameText;          // 视频的总时长 Text
    [Header("控制视频播放")]
    public Slider videoTimeSlider;      // 视频的时间 Slider
    // 定义参数获取VideoPlayer组件和RawImage组件
    public VideoPlayer videoPlayer;
    private RawImage rawImage;
    [Header("屏保图片")]
    public Texture pingBao;             // 屏保图片
    // 当前视频的总时间值和当前播放时间值的参数
    private int currentHour;
    private int currentMinute;
    private int currentSecond;
    private int clipHour;
    private int clipMinute;
    private int clipSecond;

    [Header("播放图标")]
    public Sprite play;
    [Header("暂停图标")]
    public Sprite pause;
    private bool isPlay = true;          //是否正在播放视频

    [Header("播放暂停按钮")]
    public Button playPauseButton;       //播放暂停按钮
    [Header("全屏与缩小")]
    public Button quan_ping;            //停止播放按钮  
    [Header("下一步")]
    public Button next;

    //------------------------
    //画布大小
    RectTransform rect_player;
    Vector2 v_start;
    private bool stop;


    //滑动条能否 动
    bool switch_bool = true;


    public void PointerDown()
    {

        switch_bool = false;

    }
    public void PointerUp()
    {

        switch_bool = true;

    }
    public void SliderEvent(float value)
    {

        videoPlayer.frame = long.Parse((value * videoPlayer.frameCount).ToString("0."));
        PointerDown();
    }

    private void Awake()
    {
        instance = this;
    }
  
    // Use this for initialization
    void Start()
    {

        //清空文本
        videoNameText.text = "";
        videoTimeText.text = "";

        //获取场景中对应的组件
        videoPlayer = transform.GetComponent<VideoPlayer>();


        if (videoPlayer != null)
        {
            videoPlayer.url = Application.streamingAssetsPath + "/视频/视频.mp4";
            videoPlayer.playOnAwake = false;
            videoPlayer.IsAudioTrackEnabled(0);
        }


        rawImage = this.GetComponent<RawImage>();
        rect_player = videoPlayer.GetComponent<RectTransform>();
        v_start = rect_player.sizeDelta;

        videoTimeText.gameObject.SetActive(false);
        videoNameText.gameObject.SetActive(false);
        videoTimeSlider.gameObject.SetActive(false);

        playPauseButton.gameObject.SetActive(true);

     
        playPauseButton.onClick.AddListener(PlayOrPause);
        quan_ping.onClick.AddListener(delegate () { Exture_but(quan_ping); });
        next.onClick.AddListener(delegate () { Exture_but(next); });

      
        videoTimeSlider.onValueChanged.AddListener((float value) => SliderEvent(value));

     
        OnClick();     
    }
   
    //全屏
    public void Exture_but(Button but)
    {
        switch (but.name)
        {
            case "跳过":
                break;
            case "全屏":
                if (stop == false)
                {
                    RectTransform demo = GameObject.Find("Canvas").GetComponent<RectTransform>();
                    rect_player.sizeDelta = demo.sizeDelta;
                    print("放大" + demo.sizeDelta);
                }
                else
                {
                    RectTransform demo = GameObject.Find("Canvas").GetComponent<RectTransform>();
                    rect_player.sizeDelta = v_start;
                    print("减小" + v_start);
                }
                stop = !stop;
                break;
            default:
                break;
        }
    }
    // Update is called once per frame
    void Update()
    {
        //如果videoPlayer没有对应的视频texture,则返回屏保
        if (videoPlayer.texture == null)
        {
            rawImage.texture = pingBao;
            return;
        }
        //把VideoPlayerd的视频渲染到UGUI的RawImage
        rawImage.texture = videoPlayer.texture;
        ShowVideoTime();
       
       
        //视频长度 秒
        print("length" + (int)videoPlayer.length);
        //视频长度 帧=秒*/24
        print("frameCount" + (int)videoPlayer.frameCount);

        if (isPlay)
        {
            //更新时长
            OnClick();
        }

       
       
    }
    private void LateUpdate()
    {
        if (switch_bool)
        {
            videoTimeSlider.value = (float.Parse(videoPlayer.frame.ToString()) / float.Parse(videoPlayer.frameCount.ToString()));
        }
    }
    /// <summary>
    /// 显示当前视频的时间
    /// </summary>
    private void ShowVideoTime()
    {
        // 当前的视频播放时间
        currentHour = (int)videoPlayer.time / 3600;
        currentMinute = (int)(videoPlayer.time - currentHour * 3600) / 60;
        currentSecond = (int)(videoPlayer.time - currentHour * 3600 - currentMinute * 60);
        // 把当前视频播放的时间显示在 Text 上
        videoTimeText.text = string.Format("当前视频播放的时长:{0:D2}:{1:D2}:{2:D2}",
            currentHour, currentMinute, currentSecond);
      
        
    }

    /// <summary>
    /// 显示视频的总时长
    /// </summary>
    /// <param name="videos">当前视频</param>
    void ShowVideoLength()
    {
       
        videoPlayer.Play();
        videoPlayer.SetDirectAudioMute(0, false);

    

        videoTimeSlider.gameObject.SetActive(true);
        clipHour = (int)videoPlayer.length / 3600;
        clipMinute = (int)((int)videoPlayer.length - clipHour * 3600) / 60;
        clipSecond = (int)((int)videoPlayer.length - clipHour * 3600 - clipMinute * 60);
        videoNameText.text = string.Format("视频的总时长:{0:D2}:{1:D2}:{2:D2} ",
             clipHour, clipMinute, clipSecond);
    }

    private void OnClick()
    {
        videoTimeText.gameObject.SetActive(true);
        videoNameText.gameObject.SetActive(true);
        videoTimeSlider.gameObject.SetActive(true);
        playPauseButton.gameObject.SetActive(true);
        next.gameObject.SetActive(true);

        ShowVideoLength();
        
    }
    /// <summary>
    /// 视频播放暂停
    /// </summary>
    void PlayOrPause()
    {
        if (isPlay == true)
        {
          
            videoPlayer.Pause();
            playPauseButton.image.sprite = play;
        }
        else
        {
          
            videoPlayer.Play();
            playPauseButton.image.sprite = pause;
        }
        isPlay = !isPlay;
    }

}

 

  • 2
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 2
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值