【Unity】VideoPlayer根据视频命名规则读取并播放视频

2024-03-25 05:08

本文主要是介绍【Unity】VideoPlayer根据视频命名规则读取并播放视频,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

发代码之前补一下挖到的坑。

VideoPlayer 通过URL读取视频的时候,路径必须准确!如发现读取后Unity崩溃,基本就是读取的路径有问题。

 

补充1:

该代码不适合频繁切换和程序长时间运行,因为切换过程可能会存在内存泄露的问题(unity的锅),我后来找到处理方法,但是处理方法不太稳定,后续再补充填坑。

补充2:

这VideoPlayer组件真的有毒,解决内存溢出,然后发现切换视频有几率造成虚拟内存回收不了,并且Unity没有提供任何方法来处理,如果需要功能涉及自动切换视频以及需要长时间运行的。建议放弃研究。

【可能是我处理不当,毕竟我真查不到相关问题的信息,如果有大佬有处理方法,望不吝赐教】

【用的是2018,3.5 版本的unity , 2019仅测试过短时间内快速连续切换视频,长时间没测过】

补充3:

由于询问过很多人,他们没说没发生这种情况,所以如若你坚持使用没发现问题的话,可以忽略我以上的内容。

其实我觉得应该是大部分人没有进行长时间挂机验证。在任务管理器把提交大小显示出来,然后长时间运行VideoPlayer组件,并且进行切换视频,你会发现提交大小会随着时间变大,最终把虚拟内存撑爆(当然,不会马上出现撑爆,我自己挂了几个小视频进行切换也需要两天才把20G虚拟内存撑满)。

 

该代码之所以扔出来.. 看图

(稍作修改...修改后没再次运行测试)

代码就大概这样...找streamingAssets下的movies文件夹中的视频,  但只抓 具备命名规则的  如 A.mp4 B.mp4等

(可自行修改规则- 规则适宜ASCII码连续的字符 或直接拿数字)。

根据index标识直接抓取,每次只抓对应标号的视频名。

抓到后构成路径,通过URL在VideoPlayer中读取视频。

然后根据计时进行视频切换。

 

using System.Collections;
using System.Collections.Generic;
using System.IO;
using UnityEngine;
using UnityEngine.Video;public class VideoAutoPlayByName : MonoBehaviour
{private VideoPlayer videoPlayer;string folderName = "/Movie";                                                                   //文件夹名字private string path = "";public string[] likePaths;private int beginIndexABC = (int)System.Text.ASCIIEncoding.ASCII.GetBytes("A")[0];              //ABC播放规则的索引值public int endIndexABC = (int)System.Text.ASCIIEncoding.ASCII.GetBytes("Z")[0];private int currentIndex = 0;private float elapsedTime = 0;                  //消逝时间public float durationTime = 30;                 //持续多少秒后更换视频public bool isAuto = false;                                                                     //是否开启自动更换视频public bool defaultLooping = false;                 //是否默认循环播放private void Start(){FindVideoPlayer();InitPathString();}private void Update(){UpdateIndex();}private void InitPathString(){path = Application.streamingAssetsPath + folderName + "s/";currentIndex = (int)System.Text.ASCIIEncoding.ASCII.GetBytes("A")[0];likePaths = new string[endIndexABC - beginIndexABC + 1];for (int i = 0; i < likePaths.Length; i++){likePaths[i] = "* " + (char)(beginIndexABC + i) + ".mp4";}}public void ReadMoviesByName(){//检索目录下的文件DirectoryInfo directoryInfo = new DirectoryInfo(path);FileInfo[] fileInfos = directoryInfo.GetFiles(likePaths[currentIndex - beginIndexABC]);if (fileInfos.Length > 0)SetVideoUrl(fileInfos[0].Name);else{currentIndex++;if (currentIndex > endIndexABC){currentIndex = beginIndexABC;}ReadMoviesByName();}}private void UpdateIndex(){if (isAuto && endIndexABC - beginIndexABC > 1){elapsedTime += Time.deltaTime;if (elapsedTime >= durationTime){currentIndex++;if (currentIndex > endIndexABC){currentIndex = beginIndexABC;}ReadMoviesByName();elapsedTime = 0;}}}//读取视频文件private void SetVideoUrl(string videoName){if (File.Exists(path + videoName)){videoPlayer.Stop();videoPlayer.url = path + videoName;videoPlayer.Play();}else{Debug.Log("文件不存在!!");}}private void FindVideoPlayer(){videoPlayer = FindObjectOfType<VideoPlayer>();if (videoPlayer == null){Debug.LogError("缺少名为'Plane'背景板物体");//自行创建  不创建就直接return了return;}videoPlayer.isLooping = defaultLooping;}
}

 

这篇关于【Unity】VideoPlayer根据视频命名规则读取并播放视频的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/843911

相关文章

通过Python脚本批量复制并规范命名视频文件

《通过Python脚本批量复制并规范命名视频文件》本文介绍了如何通过Python脚本批量复制并规范命名视频文件,实现自动补齐数字编号、保留原始文件、智能识别有效文件等功能,听过代码示例介绍的非常详细,... 目录一、问题场景:杂乱的视频文件名二、完整解决方案三、关键技术解析1. 智能路径处理2. 精准文件名

Python如何实现读取csv文件时忽略文件的编码格式

《Python如何实现读取csv文件时忽略文件的编码格式》我们再日常读取csv文件的时候经常会发现csv文件的格式有多种,所以这篇文章为大家介绍了Python如何实现读取csv文件时忽略文件的编码格式... 目录1、背景介绍2、库的安装3、核心代码4、完整代码1、背景介绍我们再日常读取csv文件的时候经常

linux如何复制文件夹并重命名

《linux如何复制文件夹并重命名》在Linux系统中,复制文件夹并重命名可以通过使用“cp”和“mv”命令来实现,使用“cp-r”命令可以递归复制整个文件夹及其子文件夹和文件,而使用“mv”命令可以... 目录linux复制文件夹并重命名我们需要使用“cp”命令来复制文件夹我们还可以结合使用“mv”命令总

Python脚本实现图片文件批量命名

《Python脚本实现图片文件批量命名》这篇文章主要为大家详细介绍了一个用python第三方库pillow写的批量处理图片命名的脚本,文中的示例代码讲解详细,感兴趣的小伙伴可以了解下... 目录前言源码批量处理图片尺寸脚本源码GUI界面源码打包成.exe可执行文件前言本文介绍一个用python第三方库pi

C#中读取XML文件的四种常用方法

《C#中读取XML文件的四种常用方法》Xml是Internet环境中跨平台的,依赖于内容的技术,是当前处理结构化文档信息的有力工具,下面我们就来看看C#中读取XML文件的方法都有哪些吧... 目录XML简介格式C#读取XML文件方法使用XmlDocument使用XmlTextReader/XmlTextWr

Java如何获取视频文件的视频时长

《Java如何获取视频文件的视频时长》文章介绍了如何使用Java获取视频文件的视频时长,包括导入maven依赖和代码案例,同时,也讨论了在运行过程中遇到的SLF4J加载问题,并给出了解决方案... 目录Java获取视频文件的视频时长1、导入maven依赖2、代码案例3、SLF4J: Failed to lo

Python实现多路视频多窗口播放功能

《Python实现多路视频多窗口播放功能》这篇文章主要为大家详细介绍了Python实现多路视频多窗口播放功能的相关知识,文中的示例代码讲解详细,有需要的小伙伴可以跟随小编一起学习一下... 目录一、python实现多路视频播放功能二、代码实现三、打包代码实现总结一、python实现多路视频播放功能服务端开

Python实现视频转换为音频的方法详解

《Python实现视频转换为音频的方法详解》这篇文章主要为大家详细Python如何将视频转换为音频并将音频文件保存到特定文件夹下,文中的示例代码讲解详细,感兴趣的小伙伴可以跟随小编一起学习一下... 目录1. python需求的任务2. Python代码的实现3. 代码修改的位置4. 运行结果5. 注意事项

关于Gateway路由匹配规则解读

《关于Gateway路由匹配规则解读》本文详细介绍了SpringCloudGateway的路由匹配规则,包括基本概念、常用属性、实际应用以及注意事项,路由匹配规则决定了请求如何被转发到目标服务,是Ga... 目录Gateway路由匹配规则一、基本概念二、常用属性三、实际应用四、注意事项总结Gateway路由

Redis 多规则限流和防重复提交方案实现小结

《Redis多规则限流和防重复提交方案实现小结》本文主要介绍了Redis多规则限流和防重复提交方案实现小结,包括使用String结构和Zset结构来记录用户IP的访问次数,具有一定的参考价值,感兴趣... 目录一:使用 String 结构记录固定时间段内某用户 IP 访问某接口的次数二:使用 Zset 进行