unity导入视频并实现播放及进度条滑动

这篇具有很好参考价值的文章主要介绍了unity导入视频并实现播放及进度条滑动。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

一、创建界面

1.创建如下所示unity界面
unity添加视频,unity,音视频,游戏引擎
button1:上一个视频
button2:播放/暂停
button3:下一个视频
vidotime:是一个text,显示视频时间
videoname:视频名称

2.具体界面如下所示


二、导入脚本
1.在RawImage中导入脚本,实现对视频播放/暂停,及切换视频功能

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

public class Video_Controller : MonoBehaviour
{
    private VideoPlayer videoplayer;
    private RawImage rawImage;
    private int currentClipIndex;

    public Text text_playorpause;
    public Button button_playorpause;
    public Button button_pre;
    public Button button_next;
    public VideoClip[] videoClips;
                                  
    void Start()
    {
        videoplayer = this.GetComponent<VideoPlayer>();
        rawImage = this.GetComponent<RawImage>();
        currentClipIndex = 0;
        button_playorpause.onClick.AddListener(OnplayorpauseVideo);
        button_pre.onClick.AddListener(OnpreVideo);
        button_next.onClick.AddListener(OnnextVideo);
    }

    // Update is called once per frame
    void Update()
    {
        if (videoplayer.texture == null)
        {
            return;
        }
        rawImage.texture = videoplayer.texture;

    }
    private void OnplayorpauseVideo()
    {
        if (videoplayer.enabled == true)
        {
            if (videoplayer.isPlaying)
            {
                videoplayer.Pause();
                text_playorpause.text = "播放";
       
            }
            else if (!videoplayer.isPlaying)
            {
                videoplayer.Play();
          
                text_playorpause.text = "暂停";
            }
        }
    }
    private void OnpreVideo()
    {
        currentClipIndex -= 1;
        if (currentClipIndex < 0)
        {
            currentClipIndex = videoClips.Length - 1;
        }
        videoplayer.clip = videoClips[currentClipIndex];
        text_playorpause.text = "暂停";
    }
    private void OnnextVideo()
    {
        currentClipIndex += 1;
        currentClipIndex = currentClipIndex % videoClips.Length;
        videoplayer.clip = videoClips[currentClipIndex];
        text_playorpause.text = "暂停";
    }
}


2.针对不同的函数,选定对应的button

3.添加video player组件,选择要播放的视频

4.添加脚本,实现对视频的进度条及播放时长显示

using UnityEngine;

using UnityEngine.UI;

using UnityEngine.Video;

public class ToPlayVideo : MonoBehaviour
{

    public VideoClip videoClip;         // 视频的文件 参数

    public Text videoTimeText;          // 视频的时间 Text

    public Text videoNameText;          // 视频的名字 Text

    public Slider videoTimeSlider;      // 视频的时间 Slider

    //定义参数获取VideoPlayer组件和RawImage组件

    internal VideoPlayer videoPlayer;

    private RawImage rawImage;

    // Use this for initialization

    void Start()

    {

        //获取场景中对应的组件

        videoPlayer = this.GetComponent<VideoPlayer>();

        rawImage = this.GetComponent<RawImage>();

        videoPlayer.clip = videoClip;

        videoNameText.text = videoClip.name;

        clipHour = (int)videoPlayer.clip.length / 3600;

        clipMinute = (int)(videoPlayer.clip.length - clipHour * 3600) / 60;

        clipSecond = (int)(videoPlayer.clip.length - clipHour * 3600 - clipMinute * 60);

        videoPlayer.Play();

    }

    // Update is called once per frame

    void Update()

    {

        //如果videoPlayer没有对应的视频texture,则返回

        if (videoPlayer.texture == null)

        {

            return;

        }

        //把VideoPlayerd的视频渲染到UGUI的RawImage

        rawImage.texture = videoPlayer.texture;

        ShowVideoTime();

    }

    /// <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} / {3:D2}:{4:D2}:{5:D2}",

            currentHour, currentMinute, currentSecond, clipHour, clipMinute, clipSecond);

        // 把当前视频播放的时间比例赋值到 Slider 上

        videoTimeSlider.value = (float)(videoPlayer.time / videoPlayer.clip.length);

    }

    /// <summary>

    /// 当前的 Slider 比例值转换为当前的视频播放时间

    /// </summary>

    private void SetVideoTimeValueChange()

    {

        videoPlayer.time = videoTimeSlider.value * videoPlayer.clip.length;

    }

    // 当前视频的总时间值和当前播放时间值的参数

    private int currentHour;

    private int currentMinute;

    private int currentSecond;

    private int clipHour;

    private int clipMinute;

    private int clipSecond;

}


5.添加对应控件

6.为了实现进度条对视频播放的拖动快进,在slider控件添加如下脚本

using UnityEngine;

using UnityEngine.EventSystems;

/// <summary>

/// 继承 拖拽接口

/// </summary>

public class SliderEvent : MonoBehaviour, IDragHandler

{

    [SerializeField]

    private 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)

    {

        SetVideoTimeValueChange();

    }

    /// <summary>

    /// 当前的 Slider 比例值转换为当前的视频播放时间

    /// </summary>

    private void SetVideoTimeValueChange()

    {

        toPlayVideo.videoPlayer.time = toPlayVideo.videoTimeSlider.value * toPlayVideo.videoPlayer.clip.length;

    }

}
最终效果

unity添加视频,unity,音视频,游戏引擎

 文章来源地址https://www.toymoban.com/news/detail-612231.html

 

到了这里,关于unity导入视频并实现播放及进度条滑动的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 浏览器自动播放音视频-前端实现方案

    目录 前言 浏览器自动播放策略 策略详情: 实现方案  方案1: 互动后播放 方案2: 互动后出声 总结 在开发中可能有遇到这样的需求,当用户打开页面后,需要自动播放视频或音频,按理说那就打开页面时play()一下不就搞定了吗,但实际情况很明显不是,不然也没得这篇文

    2024年02月04日
    浏览(44)
  • FFMpeg-3、基于QT实现音视频播放显示

    1、音视频播放的基础知识 内容来自雷神博客 1、在Windows平台下的视频播放技术主要有以下三种:GDI,Direct3D和OpenGL;音频播放技术主要是DirectSound。 SDL本身并不具有播放显示的功能,它只是封装了底层播放显示的代码 记录三种视频显示技术:GDI,Direct3D,OpenGL。其中Direct3D包

    2024年02月03日
    浏览(43)
  • QT5.9实现一个视频播放器播放 暂停进度条

    参考博主 1https://blog.csdn.net/liji_digital/article/details/83691035 参考博主2https://blog.csdn.net/qq_41071706/article/details/89855986 通过选择按钮选择本地视频文件 点击播放按钮播放文本框中的文件(不支持其他类型文件的异常检测) 支持mp4 avi等等 如果不支持见参考博主2的内容 点击暂停按钮

    2023年04月22日
    浏览(36)
  • Qt 实现简易的视频播放器,功能选择视频,播放,暂停,前进,后退,进度条拖拉,视频时长显示

    1.效果图 2.代码实现 2.1 .pro文件 2.2 .h文件 2.3 .cpp文件

    2024年04月12日
    浏览(30)
  • vue video(视频)禁止用户拖动进度条,自定义组件实现,包含视频音量、暂停、播放、全屏、退出全屏 、播放进度,话不多说直接上代码。

     注意项目中本组件使用到了elementUI所以要确保项目中安装了 videoFree.vue js部分:因此为nuxtjs开发的项目,代码中this.$fmtS是一个格式化时间的工具类代码后面有 css部分:

    2024年02月09日
    浏览(31)
  • FFmpeg 播放器实现音视频同步的三种方式

    我们基于 FFmpeg 利用 OpenGL ES 和 OpenSL ES 分别实现了对解码后视频和音频的渲染,本文将实现播放器的最后一个重要功能:音视频同步。 老人们经常说, 播放器对音频和视频的播放没有绝对的静态的同步,只有相对的动态的同步,实际上音视频同步就是一个“你追我赶”的过

    2024年02月06日
    浏览(44)
  • 音视频开发:ffplay使用ffmpeg滤镜实现倍速播放

    曾经为实现倍速播放使用过ffmpeg,对音频使用atempo滤镜即可实现变速不变调。但是当时效果并不是特别好,和soundtouch相比处理后的音质有明显的区别。最近用新版本的ffmpeg滤镜重新实现了倍速播放,发现效果变好,已经达到可接受的程度,所以在此分享具体实现。 ffmpeg倍速

    2024年02月03日
    浏览(64)
  • 【OpenCV+Qt】实现简易视频播放器——支持进度条拖动

    OpenCV实现视频播放器,其思路大致就是在线程中使用OpenCV中的VideoCapture循环读取本地视频的每一帧Mat,然后发送到界面转换成QImage进行显示,而进度条拖动则用到了VideoCapture中的set函数,进度条则是使用Qslider;并且通过自定义新的进度条类实现点击跳转功能; 效果: 1.进行

    2023年04月08日
    浏览(39)
  • 在vue项目中使用video.js实现视频播放和视频进度条打点

    引入videojs插件 注意: controls 如果不是true的话,不会显示播放按钮 播放按钮默认在 左上角 ,是作者认为会遮挡内容考虑的,不过这个是可以根据参数修改的,只需要给video标签加一个class( vjs-big-play-centered )就可以了。 要实现的功能是视频的进度条上面有一些小点,然后

    2023年04月08日
    浏览(70)
  • GB28181设备接入侧如何对接外部编码后音视频数据并实现预览播放

     技术背景 我们在对接GB28181设备接入模块的时候,遇到这样的技术诉求,好多开发者期望能提供编码后(H.264/H.265、AAC/PCMA)数据对接,确保外部采集设备,比如无人机类似回调过来的数据,直接通过模块,对接到GB28181平台侧,此外,还期望不支持或者内网没有外部网络权限

    2024年02月12日
    浏览(29)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包