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

2023-11-16

使用Unity自带的VideoPlayer来播放视频

一、准备视频

Unity3D常用视频格式:.mov、.mpg、.mpeg、.mp4、.avi、.asf

如果都不识别,试试转换成ogv格式。转换完成之后,将视频素材文件拖入Unity Assets文件夹内。

二、创建UI及添加组件

  • 创建RenderTexture资源,设置分辨率,跟视频分辨率一致
  • 创建RawImage对象
  • 添加AudioSource组件
  • 添加VideoPlayer组件

当前版本:

 

具体实现:

1、右键Assets文件夹或任意文件夹→CreateRender Texture纹理渲染

 

设置视频的分辨率

 

2、Hierarchy面板右键创建UIRaw Image

然后把创建出来的Render Texture拖拽给Raw ImageTexture选项

 

结果如下图:

 

3、给Raw Image挂上Audio Source组件

4、给Raw Image添加组件Video Player,同时,修改Video Player组件属性:

  1. 把视频文件拖拽到Video PlayerVideo Clip选项中;
  2. Render Texture再次拖拽到TargetTexture选项中;
  3. 设置音频输出格式

5、然后可以调整Raw Image在屏幕中的大小来对应游戏窗口中的大小

 

三、VideoPlayer 常用属性、方法、事件

  1. 属性
    1. Source:视频来源   
      • - Video Clip:放入下载好的视频   
      • - URL:可以放入网上下载好的视频链接/下载好的视频的存储路径【没试过】
    2. Play On Awake:脚本载入时自动播放
    3. Wait For First Frame:决定是否在第一帧加载完成后才播放,只有在Play On Awake被勾选是才有效
    4. Loop:循环
    5. Playback Speed:播放速度
    6. RenderMode:渲染模式   
      1. - Camera Far Plane:摄像机的远平面上,用于背景播放器   
      2. - Camera Near Plane:摄像机的近平面上,用作前景播放器   
      3. - Render Texture:画面保存在Render Texture上,用来UGUI的播放器   
      4. - Material Override:视频画面复制给所选Render的Material。需要选择具有Render组件的物体,可以选择赋值的材质属性。可制作360全景视频和VR视频。
    7. Aspect Ratio:自适应分辨率的方式
    8. Audio Output Mode:音频输出方式   
      1. - Audio Source:音频样本发送到选定音频源,允许应用 Unity 的音频处理。  
      2. - Direct:音频样本绕过 Unity 的音频处理,直接发送到音频输出硬件。
  2. 事件
    1. errorReceived: 错误监听到时被执行
    2. frameDropped :有丢帧发生时被执行
    3. frameReady :新的一帧准备好时被执行
    4. loopPointReached :播放结束或播放到循环的点时被执行
    5. prepareCompleted :视频准备完成时被执行
    6. seekCompleted :查询帧操作完成时被执行
    7. started:在Play方法调用之后立刻调用

四、脚本控制

public class WUIStartVideoPanel : MonoBehaviour
{
    public VideoPlayer mVideoPlayer;
    public Button mBtn_Skip;

    public WUIStartVideoPanel()
    {
        // 清除Raw Image的残留帧
        mVideoPlayer.targetTexture.Release();
        // 监听视频播放结束
        mVideoPlayer.loopPointReached += EndReached;
        mBtn_Skip.onClick.AddListener(OnSkipBtnClick);
    }

    private void EndReached(VideoPlayer source)
    {
        // 隐藏当前脚本对象
        gameObject.SetActive(false);
    }

    // 外部调用播放
    public void PlayVideo()
    {
        mVideoPlayer.Play();
    }

    // 跳过视频
    private void OnSkipBtnClick()
    {
        mVideoPlayer.Stop();
        EndReached(mVideoPlayer);
    }
}

五、画面残留问题

要注意一点:Unity播放一次视频后,再次播放开始的一瞬间会显示上次播放结束的画面。

1、问题原因:

主要因为用RenderTexture取渲染播放的,当视频播放完成之后,会在将最后一帧的画面定格在RenderTexture上。

2、解决办法:

  1. 实时创建RenderTexture,避免了预先创建残留先前播放画面的问题。
  2. VideoPlayer组件提供一个方法,VideoPlayer.targetTexture.Release()方法,释放RenderTexture。
  3. 在播放之前或者播放完之后,释放RenderTexture上的资源,调用方法。
RenderTexure rt; rt.Release();

在此,我使用了解决办法2。代码见上面。

参考文章:

Unity VideoPlayer 播放视频_GA博客的博客-CSDN博客_unity videoplayer

Unity 使用RenderTexture播放视频画面残留问题_2080.的博客-CSDN博客

Unity自带VideoPlayer播放视频总是闪上一个视频的画面的问题 - 简书 (jianshu.com)

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Unity视频播放之Video Player的简单使用 的相关文章

  • uniapp 地图组件(map)的使用总结

    总结一下本次在uniapp中使用map遇到的一些问题 文章分别是基础 定位图标 获取自身经纬度 通过经纬度获取当时城市信息 首先先看成品 首先引入map组件

随机推荐

  • C++查看 IEEE 754 浮点数格式的代码

    把内容过程中较好的一些内容片段备份一次 下边资料是关于C 查看 IEEE 754 浮点数格式的内容 for binary floating point numbers IEEE 754 is to use a union as shown
  • qt在程序执行的过程中刷新界面

    qt程序执行的过程中 一般是不会仅仅通过setText函数将文字刷新到界面上 如果想根据需要不断地显示文字到主界面上该怎么做呢 为什么不会刷新界面呢 这是由于调用show函数之后 并不能显示界面 必须调用如下图片的中的a exec函数才能刷
  • 一键部署office的工具——OTool

    OTool可用于office的下载 安装和激活 其激活方式是调用kmspico服务器进行的 官方网站是https otp landian vip zh cn 最新版本5 9 3 6在2019 4 16发布 使用方式 下载 这个软件是绿化版的
  • C/C++队列操作

    1 链队结构 typedef struct queuenode int data struct queuenode next Queue typedef struct Queue fronts rear linkqueue 2 入队操作 进
  • 字符设备驱动-通过GPIO子系统提供的API实现LED驱动

    前言 写文章的目的是想通过记录自己的学习过程 以便以后使用到相关的知识点可以回顾和参考 一 GPIO子系统提供的API gpio 子系统提供了 API 函数来操作指定的 GPIO gpio 子系统向驱动开发人员屏蔽了具体的读写寄存器过程 这
  • STM32硬件I2C与软件模拟I2C超详解

    作者简介 嵌入式入坑者 与大家一起加油 希望文章能够帮助各位 个人主页 rivencode的个人主页 系列专栏 玩转STM32 保持学习 保持热爱 认真分享 一起进步 目录 一 I2C协议简介 二 I2C物理层 三 I2C协议层 I2C 基
  • 面试官问:SpringBoot中@Async默认线程池导致OOM如何解决?

    前言 1 最近项目上在测试人员压测过程中发现了OOM问题 项目使用springboot搭建项目工程 通过查看日志中包含信息 unable to create new native thread 内存溢出的三种类型 1 第一种OutOfMem
  • Node.js 学习系列(一) —— 入门

    nodejs 官网 https nodejs org zh cn nodejs下载地址 https nodejs org zh cn download Node js 是一个开源 跨平台的 JavaScript 运行时环境 简单的说 就是运
  • git 环境配置 + gitee拉取代码

    好嘛 配环境的时候 老是忘记这个命令行 干脆自己写一个记录一下 也不用搜了 1 先从git官网下载git 安装 2 然后从gitee拉取代码的时候提示 这是因为换了新电脑没有加入新的公钥啦 哎 所以老是记不住命令行 first git co
  • SSL和SSH有什么区别

    许多人对SSL和SSH感到困惑 这是可以理解的 两者都是安全协议 可以帮助保护从一个端点到另一端点的数据 此外 他们的名字有两个相似的字母 增加了歧义 但是SSH和SSL是两回事 如果您感到困惑 或者对选择哪种安全协议犹豫不决 本文将为您提
  • Rk3288 Android 7.1/8.1默认开启网络ADB端口

    Rk3288 系列开机默认没有打开网络ADB端口 可通过ADB手动改打开 ADB连接后 输入 adb tcpip 5555 Android 默认为5555 输入 adb connect ip地址 可以通过 adb devices 来验证 W
  • NSIS脚本学习:判断版本并安装.NET Framework运行环境

    前言 目前开发的程序以基于 net的应用程序为主 程序开发好后 需要进行安装包的生成 及setup文件的生成 常见的是NSIS工具 之前一直用的单文件打包工具 不适合将运行环境加进去 因此开始使用更高版本的NSIS 3 06 关于判断 NE
  • dva.js yield call/put使用完整流程

    这个项目是基于dva框架的一个rn项目 对于一个新手 其实我也是菜鸟来着 来说 有很好的学习意义 首先我们来看下目录的结构 把我们定义的service引入进来 定义一个GET USER INFO的effects 注意这个函数名称前面要有 然
  • 在 Ubuntu 操作中安装Code::Blocks

    在 Ubuntu 操作 中安装Code Blocks 步骤如下 安装步骤 1 先把编译环境 C库 C 库和Boost库装好 如下 sudoapt get install build essential 有可能安装 build essenti
  • R语言常用包介绍

    r与python差异比较大的一个地方就是 python的机器学习算法集中程度比较高 比如sklearn 就集成了很多的算法 而R语言更多时候需要一个包一个包去了解 比较费时费力 对于python转过来的朋友非常不友好 抽空整理了工作中常用的
  • spark创建maven工程创建scala目录并编译

    背景 我创建spark的maven工程的时候 在java目录同级还创建了一个scala目录 这就得考虑编译相关的事了 解决 1 创建source folder 如下图所示 直接创建就好了 2 编译带来的问题 编译的时候发现一个问题 就是在s
  • WSL安装软件报错/sbin/ldconfig.real: /usr/lib/wsl/lib/libcuda.so.1 is not a symbolic link

    原因 usr lib wsl lib 目录下都是文件而不是链接 且该目录只读 需要在其他目录操作 解决 cd usr lib wsl sudo mkdir lib2 sudo ln s lib lib2 更改wsl配置文件 sudo vim
  • VisualStudio怎么一键注释多行以及一键取消多行注释

    一键注释多行代码 Ctrl k 然后 Ctrl c 一键取消多行注释 Ctrl k 然后 Ctrl u
  • 云主机8088端口被挖矿情况以及解决办法

    1 用top命令查询一下有没有CPU占用很高的 hadoop 10 9 15 140 top top 18 59 17 up 2 05 1 user load average 0 36 0 38 0 68 Tasks 97 total 1
  • Unity视频播放之Video Player的简单使用

    使用Unity自带的VideoPlayer来播放视频 一 准备视频 Unity3D常用视频格式 mov mpg mpeg mp4 avi asf 如果都不识别 试试转换成ogv格式 转换完成之后 将视频素材文件拖入Unity Assets文