Unity插件-AVPro Video 使用案例之视频播放

这篇具有很好参考价值的文章主要介绍了Unity插件-AVPro Video 使用案例之视频播放。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

1、导入AVPro Video插件

链接:https://pan.baidu.com/s/1Dsf_mO3vSvdLvU-gNX2ulQ
提取码:967i

2、创建一个视频管理和一块电影布

Unity插件-AVPro Video 使用案例之视频播放
Unity插件-AVPro Video 使用案例之视频播放

3、相关设置

Unity插件-AVPro Video 使用案例之视频播放
Unity插件-AVPro Video 使用案例之视频播放

4、视频播放案例

4.1、效果演示

Unity插件-AVPro Video 使用案例之视频播放

4.2、总体预览

Unity插件-AVPro Video 使用案例之视频播放

4.3、代码

using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using RenderHeads.Media.AVProVideo;  //引入命名空间
using UnityEngine.UI;

public class VideoControl : MonoBehaviour
{
    private MediaPlayer m_MediaPlayer;

    public Slider timeSlider;  //进度条

    public Text timeText;  //显示时长

    public Toggle isMuteToggle;  //是否静音

    public Toggle isLoopToggle;  //是否循环

    public Slider volumeSlider;  //音量

    public Dropdown rateDropdown;  //速率

    public string[] videoFiles = { "One.mp4", "Two.mp4", "Three.mp4" };

    private int videoIndex = 0;

    private void Awake()
    {
        m_MediaPlayer = GameObject.Find("MediaPlayer").GetComponent<MediaPlayer>();  //获取组件

        LoadMovie(videoFiles[videoIndex]);

        timeSlider.onValueChanged.AddListener(TimeSliderValueChange);  //当进度条值改变时,给进度条注册事件

        isMuteToggle.isOn = false;  //初始设置不静音

        isLoopToggle.isOn = false;  //初始设置不循环

        volumeSlider.value = 1;  //初始音量为1

        volumeSlider.onValueChanged.AddListener(VolumeSliderValueChange);  //音量事件

        rateDropdown.value = 2;  //初始速率为1

        rateDropdown.onValueChanged.AddListener(RateDropdownValueChange);  //速率事件

        m_MediaPlayer.Events.AddListener(EventHandle);  //事件系统
    }

    private void Update()
    {
        timeText.text = ConverTime(GetMovieCurrentTime()) + " / " + ConverTime(GetMovieAllTime());  //显示时长

        //滑动条不显示,坐标值出现NaN,是由于Slider的Value计算不能除于0,除数为0会造成这种问题
        if (m_MediaPlayer && m_MediaPlayer.Info != null && m_MediaPlayer.Info.GetDurationMs() > 0f)
        {
            float time = m_MediaPlayer.Control.GetCurrentTimeMs();
            float duration = m_MediaPlayer.Info.GetDurationMs();
            float d = Mathf.Clamp(time / duration, 0.0f, 1.0f);

            timeSlider.value = d;
        }

        if (isMuteToggle.isOn)
            MuteVolume(true);
        else
            MuteVolume(false);

        if (isLoopToggle.isOn)
            SetLoop(true);
        else
            SetLoop(false);

        AutoPlayNext();
    }

    public void LoadMovie(string path)  //加载视频
    {
        m_MediaPlayer.OpenVideoFromFile(MediaPlayer.FileLocation.RelativeToStreamingAssetsFolder, path, false);  //最后一个参数是设置开头不自动播放
    }

    public void PlayMovie()  //播放视频
    {
        m_MediaPlayer.Control.Play();
    }

    public void PauseMovie()  //暂停视频
    {
        m_MediaPlayer.Control.Pause();
    }

    public void RewindMovie()  //重播视频
    {
        m_MediaPlayer.Control.Rewind();
        PlayMovie();
        rateDropdown.value = 2;  //重置后速率为1
    }

    public void SetLoop(bool isLoop)  //设置循环
    {
        m_MediaPlayer.Control.SetLooping(isLoop);
    }

    public void SetPlayBackRate(float playRate)  //设置播放速率,-1为倒放
    {
        m_MediaPlayer.Control.SetPlaybackRate(playRate);
    }

    float[] rates = new float[] { 0.5f, 0.75f, 1.0f, 1.25f, 1.5f, 2.0f };
    public void RateDropdownValueChange(int index)  //选择速率
    {
        SetPlayBackRate(rates[index]);
    }

    public float GetMovieAllTime()  //获取视频总时长
    {
        return m_MediaPlayer.Info.GetDurationMs();  //以毫秒为单位,1秒=1000毫秒
    }

    public float GetMovieCurrentTime()  //获取已经播放了的视频时间
    {
        return m_MediaPlayer.Control.GetCurrentTimeMs();
    }

    public void SeekMoviePos(float value)  //定位视频播放位置
    {
        float toTime = value * GetMovieAllTime();
        m_MediaPlayer.Control.Seek(toTime);
    }

    public void TimeSliderValueChange(float value)  //进度条事件
    {
        SeekMoviePos(value);
    }

    public string ConverTime(float time)  //时间转换
    {
        int s = (int)(time / 1000f);  //秒
        int m = s / 60;  //分
        int h = m / 60;  //小时
        s = s % 60;
        if (h == 0)
            return m.ToString("D2") + ":" + s.ToString("D2");
        else
            return h.ToString("D2") + ":" + m.ToString("D2") + ":" + s.ToString("D2");
    }

    public void SetVolume(float value)  //设置音量
    {
        m_MediaPlayer.Control.SetVolume(value);
    }

    public void VolumeSliderValueChange(float value)  //音量调节
    {
        SetVolume(value);
    }

    public void MuteVolume(bool isMute)  //是否静音
    {
        m_MediaPlayer.Control.MuteAudio(isMute);
    }

    public void OnUpButtonClick()  //上一首
    {
        videoIndex--;

        if (videoIndex < 0)
            videoIndex = videoFiles.Length - 1;

        LoadMovie(videoFiles[videoIndex]);

        PlayMovie();
    }

    public void OnNextButtonClick()  //下一首
    {
        videoIndex++;

        if (videoIndex >= videoFiles.Length)
            videoIndex = 0;

        LoadMovie(videoFiles[videoIndex]);

        PlayMovie();
    }

    public void AutoPlayNext()  //播放完自动下一首
    {
        if (m_MediaPlayer.Control.IsFinished())
        {
            OnNextButtonClick();
        }
    }

    public void EventHandle(MediaPlayer arg0, MediaPlayerEvent.EventType eventType, ErrorCode arg1)  //事件
    {
        switch (eventType)
        {
            case MediaPlayerEvent.EventType.MetaDataReady:
                break;
            case MediaPlayerEvent.EventType.ReadyToPlay:
                break;
            case MediaPlayerEvent.EventType.Started:
                Debug.Log("视频开始播放!");
                break;
            case MediaPlayerEvent.EventType.FirstFrameReady:
                break;
            case MediaPlayerEvent.EventType.FinishedPlaying:
                Debug.Log("视频播放完毕!");
                break;
            case MediaPlayerEvent.EventType.Closing:
                break;
            case MediaPlayerEvent.EventType.Error:
                break;
            case MediaPlayerEvent.EventType.SubtitleChange:
                break;
            case MediaPlayerEvent.EventType.Stalled:
                break;
            case MediaPlayerEvent.EventType.Unstalled:
                break;
            case MediaPlayerEvent.EventType.ResolutionChanged:
                break;
            case MediaPlayerEvent.EventType.StartedSeeking:
                break;
            case MediaPlayerEvent.EventType.FinishedSeeking:
                break;
            case MediaPlayerEvent.EventType.StartedBuffering:
                break;
            case MediaPlayerEvent.EventType.FinishedBuffering:
                break;
            case MediaPlayerEvent.EventType.PropertiesChanged:
                break;
            case MediaPlayerEvent.EventType.PlaylistItemChanged:
                break;
            case MediaPlayerEvent.EventType.PlaylistFinished:
                break;
            default:
                break;
        }
    }
}

4.4、优化拖动进度条产生的杂音

Unity插件-AVPro Video 使用案例之视频播放

4.5、遇到的问题

滑动条不显示,坐标值出现NaN,是由于Slider的Value计算不能除于0,除数为0会造成这种问题

4.6、项目链接

链接:https://pan.baidu.com/s/13PnJNk7h8CWg5Z_zK2gi2Q
提取码:1ua1文章来源地址https://www.toymoban.com/news/detail-503530.html

到了这里,关于Unity插件-AVPro Video 使用案例之视频播放的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

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

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

相关文章

  • Unity视频播放之Video Player的简单使用

    使用Unity自带的VideoPlayer来播放视频 一、准备视频 Unity3D常用视频格式:.mov、.mpg、.mpeg、.mp4、.avi、.asf 如果都不识别,试试转换成ogv格式。转换完成之后,将视频素材文件拖入Unity Assets 文件夹内。 二、创建UI及添加组件 创建RenderTexture资源,设置分辨率,跟视频分辨率一致

    2024年01月18日
    浏览(87)
  • vue中使用video插件在微信浏览器中视频无法自动播放的问题

    测试机:安卓华为p30,ios暂未测试,不过看网上说的ios比较好设置,以下代码也设置了兼容 js 是的,你没看错,就是这么简单,并没有网上那么复杂的获取什么什么的,因为我都试过坑了,到最后发现直接在created中就能解决问题

    2024年02月11日
    浏览(71)
  • vue3视频播放插件vue3-video-play的具体使用方法

    发布于:12分钟前 之前的vue项目中用到视频播放器,但是UI不是很好看,索性就打算写一个视频播放器插件紧随着vue3的发布,vue3的生态还不是很完整,就索性把这个视频播放器插件修改成了vue3版,最终使用vite2+vue3开发 插件Github地址 vue-video-player 先看一下这个播放器(vue3-vid

    2024年01月18日
    浏览(49)
  • video插件播放m3u8格式视频(存原生)

    这里使用原生的javascript实现m3u8格式视频播放。 使用了包括video.min.js库和HLS插件。 在上面代码中,首先引入了video.min.js库和对应的播放器样式video-js.css,还引入了videojs-contrib-hls.min.js库(引入顺序考虑优先放到页面加载之前)。 之后,创建一个video标签,并指定source的src属性为

    2024年02月13日
    浏览(50)
  • vue 视频播放插件vue-video-player自定义样式、自动播放设置、设置一开始全屏播放视频

    1、背景 项目中有涉及视频播放的需求,并且UI设计了样式,与原生的视频video组件有差异,所以使用了vue-video-player插件,并对vue-video-player进行样式改造,自定义播放暂停按钮、全屏按钮、时间进度条样式等,自动播放设置、设置一开始全屏播放视频、监听全屏事件等。 2、效

    2024年02月05日
    浏览(49)
  • Unity2020Video player发布后无法播放视频问题

    我也是小白,用Unity过程中也是遇到很多草蛋问题,我在做demo的时候第一次用到Unity的video player,听说ogv格式能直接播放,我就把视频转了ogv格式,然后放到clip里,编辑器里运行完全没问题,发布打包后就播放不了,黑屏都没有,直接视频没了,百度搜的绝对路径说是放到

    2024年02月15日
    浏览(54)
  • vue 视频播放插件vue-video-player自定义样式、自动播放设置、设置一开始全屏播放视频、监听全屏事件

    1、背景 项目中有涉及视频播放的需求,并且UI设计了样式,与原生的视频video组件有差异,所以使用了vue-video-player插件,并对vue-video-player进行样式改造,自定义播放暂停按钮、全屏按钮、时间进度条样式等,自动播放设置、设置一开始全屏播放视频、监听全屏事件等。 2、效

    2024年02月08日
    浏览(58)
  • Unity播放带Alpha通道的视频【WebM+Video Player】(替代播放GIF方案)

    在Unity中播放GIF或者动态效果,可以通过Video Player播放带透明通道的WebM视频来实现。 制作带Alpha的MOV视频 制作带Alpha通道的MOV视频有多重方式,如AE、PR、PS等等,具体制作过程可以自行百度。 将MOV视频格式转化为WebM格式 将WebM格式导入Unity,设置视频播放 完成动态效果展示

    2024年02月13日
    浏览(57)
  • untiy avpro播放超过8K视频的解决方案

    安转LAV Filters解码器,然后指定Avpro使用这个解码器播放即可 第一步 安装解码器 下载链接 第二步 AVPro设置 MediaPlayer脚本中一共两处

    2024年04月27日
    浏览(34)
  • Unity零基础到进阶 ☀️| 视频播放器 Video Player组件 详解

    🎬 博客主页:

    2024年02月13日
    浏览(52)

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

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

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

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

二维码1

领取红包

二维码2

领红包