Unity 使用VideoPlayer播放视频,实现播放,暂停,快进的效果

简介: 该UI搭建流程包括创建Render Texture和RawImage,添加Video Player组件并设置Target Texture与Video Clip。通过Event Trigger组件为滑动条添加拖拽事件,控制视频播放进度。代码实现中,`ShuiWenZhiShiButton`类管理视频播放、暂停、进度条更新及时间显示功能,并通过按钮切换不同视频。测试时可验证各功能是否正常运作。

搭建UI
1.首先先创建一个Render TexTure 在创建一个RawImage,
2.在创建Video Player组件 把Render Texture 挂上去(挂在Target Texture上面),Video Clip (可以直接把视频拖上去,也可以写脚本控制)
3.在给滑动条加上Event Trigger 组件,用一个开始拖拽的方法,一个结束拖拽的方法即可

两个方法在脚本里写的有,拖拽在上面即可
实现代码如下:

using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using UnityEngine.UI;
using UnityEngine.Video;

public class ShuiWenZhiShiButton : MonoBehaviour
{

    public GameObject  mv_obj;  
    public VideoClip shipin1,shipin2;
    public VideoPlayer videoPlayer;

    public Button play_button;   //播放按钮
    public Button pause_button;  //暂停按钮
    public Text mv_length_text;   //显示视频的长度
    public Slider slider_kuajin;
    private bool isDrag;
    private int hour, minute, second;  // 时  分  秒
    // Start is called before the first frame update
    void Start()
    {

        Debug.Log (shipin1.length);
        //按钮1
        button[0].onClick.AddListener(delegate
        {
            Photoenlable(0);
            if (mv_obj.activeSelf==false)
            {
                OnorOff_MVjiemian(true);
            }

            videoPlayer.clip = shipin1;

        });
        //按钮2
        button[1].onClick.AddListener(delegate
        {
            Photoenlable(1);
            if (mv_obj.activeSelf == false)
            {
                OnorOff_MVjiemian(true);
            }
            videoPlayer.clip = shipin2;

        });
        //按钮3
        button[2].onClick.AddListener(delegate
        {
            Photoenlable(2);
        });

    }
   //打开或者关闭视频界面
    public void OnorOff_MVjiemian(bool tra)
    {
        mv_obj.SetActive(tra);
    }
    //视频播放
    public void  MV_Play()
    {
        play_button.gameObject.SetActive(false);
        pause_button.gameObject.SetActive(true);
        videoPlayer.Play();
    }
    //视频暂停
    public void MV_Pause()
    {
        play_button.gameObject.SetActive(true);
        pause_button.gameObject.SetActive(false);
        videoPlayer.Pause();
    }
    //显示视频的时间
    public void ShiPin_Length()
    {
        hour = (int)videoPlayer.time / 3600;
        minute = ((int)videoPlayer.time  - hour * 3600) / 60;
        second = (int)videoPlayer.time - hour * 3600 - minute * 60;
        mv_length_text.text = string.Format("{0:D2}:{1:D2}:{2:D2}", hour, minute, second);
    }
    /// 修改视频播放进度  
    private void ChangeVideoPlayTime()
    {
        if (isDrag == true)
        {
           videoPlayer.time = slider_kuajin.value*videoPlayer.clip.length;
        }
    }

    //修改进度条
    public void XiuGaiJinDuTiao()
    {
        if (!isDrag)
        {         
            slider_kuajin.value = (float)(videoPlayer.time / videoPlayer.clip.length);
        }
    }
    //开始拖拽
    public void OnDragdrop()
    {
        isDrag = true;
    }
    //结束拖拽
    public void OnEndDrag()
    {
        isDrag = false;
        videoPlayer .time = slider_kuajin.value* videoPlayer.clip.length;

    }
    // Update is called once per frame
    void Update()
    {
        if (videoPlayer.clip !=null)
        {
            ChangeVideoPlayTime();
            XiuGaiJinDuTiao();
            ShiPin_Length();
        }

    }
}

最后自行测试即可

相关文章
|
API 图形学
Unity设置播放模式下始终先执行指定的场景
通过我们使用Unity开发游戏,是在PC/Mac上。而一个游戏通常也会有很多的场景,比如A、B、C、D三个场景,正常流程下的执行顺序是 A –> B –> C –> D。在具体一点,比如 A —— 启动场景、B —— 资源加载场景、C —— 登录场景、D —— 战斗场景。
1826 0
|
6月前
|
编解码 图形学 Android开发
|
6月前
|
Linux 开发工具 图形学
Unity下实现跨平台的RTMP推流|轻量级RTSP服务|RTMP播放|RTSP播放低延迟解决方案
自2018年起,我们成功实现了Unity环境下的低延迟RTSP|RTMP播放,达到毫秒级延迟,获得业界广泛认可。现已覆盖Windows、Android、iOS与Linux平台的RTMP推送、轻量级RTSP服务及RTSP|RTMP播放。通过高效采集Unity窗口或摄像头数据,并利用原生SDK进行编码与推送,确保了数据传输的高速性。此外,播放器支持多路视频同时播放,适应不同分辨率,并保持长时间运行稳定。更多技术细节和技术博文,请参考相关链接。
310 1
|
编解码 数据处理 vr&ar
VR头显Unity下如何实现毫秒级延迟的RTMP或RTSP播放?
VR头显Unity下如何实现毫秒级延迟的RTMP或RTSP播放?
266 1
|
编解码 监控 图形学
Windows平台Unity下播放RTSP或RTMP如何开启硬解码?
我们在做Windows平台Unity播放RTMP或RTSP的时候,遇到这样的问题,比如展会、安防监控等场景下,需要同时播放多路RTMP或RTSP流,这样对设备性能,提出来更高的要求。
167 1
|
vr&ar 开发工具 图形学
Windows平台Unity3d下如何同时播放多路RTSP或RTMP流
好多开发者在做AR、VR或者教育类产品时,苦于如何在windows平台构建一个稳定且低延迟的RTSP或者RTMP播放器,如果基于Unity3d完全重新开发一个播放器,代价大、而且周期长,不适合快速出产品,我们认为当前最好的方式就是集成现有Native平台上成熟稳定播放器,回调rgb/yuv数据到上层,上层做绘制即可。
156 1
|
开发工具 图形学 Android开发
Windows/Android/IOS平台如何在Unity3d播放RTSP/RTMP流
如果基于Unity3d完全重新开发一个播放器,代价大,周期长,不适合快速出产品,最好的方式就是集成现有Native平台上成熟稳定播放器.
168 1
|
Linux 开发工具 图形学
Unity下如何实现RTMP或RTSP播放端录像?
Unity下如何实现RTMP或RTSP播放端录像?
284 0
|
编解码 开发工具 图形学
Unity环境下RTMP推流+RTMP播放低延迟解决方案
在本文之前,我们发布了Unity环境下的RTMP推流(Windows平台+Android平台)和RTMP|RTSP拉流(Windows平台+Android平台+iOS平台)低延迟的解决方案,今天做个整体汇总,权当抛砖引玉。
596 0
|
Linux 图形学 Android开发
Unity3D下如何实现跨平台低延迟的RTMP、RTSP播放
好多开发者,希望我们能探讨下Unity平台RTMP或RTSP直播流数据播放和录制相关的模块,实际上,这块流程我们已经聊过多次,无非就是通过原生的RTMP或者RTSP模块,先从协议层拉取到数据,并解包解码,回调YUV或RGB数据,然后,在Unity创建响应的shader,获取图像数据填充纹理即可,说起来流程很简单,但是每个环节,如果做到极致体验,都非常难。简单来说,多一次拷贝,都会增大性能瓶颈或延迟。
204 0