ShanxiKnowledgeBase/SXElectricalInspection/Assets/AVIDEO/VideoTest.cs

190 lines
6.2 KiB
C#

using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using UnityEngine.UI;
using System.IO;
using System;
public class VideoTest : MonoBehaviour
{
public string m_Path;
public FileInfo[] m_FileInfos;
public GameObject m_VideoItemPrefab;
// Start is called before the first frame update
void Start()
{
m_FileInfos = LoadLocalFile();
//m_DeleteButton.onClick.AddListener(OnDeleteButton);
//m_ExitSelectionButton.onClick.AddListener(OnExitSelectionMode);
ReadFileInfos();
}
public List<string> tempStorageName = new List<string>();
public List<DateTime> cdateTimes = new List<DateTime>();
public List<VideoInformation> VideoInformations = new List<VideoInformation>();
public void ReadFileInfos()
{
for (int i = 0; i < m_FileInfos.Length; i++)
{
if (m_FileInfos[i].Name.EndsWith(".mp4"))
{
VideoInformation information = new VideoInformation(m_FileInfos[i].CreationTime, m_FileInfos[i].Name, m_FileInfos[i].FullName, m_FileInfos[i]);
VideoInformations.Add(information);
}
}
//以时间排序
for (int j = 1; j <= VideoInformations.Count - 1; j++)
{
for (int i = 0; i < VideoInformations.Count - j; i++)
{
if (VideoInformations[i + 1].CreationTime > VideoInformations[i].CreationTime)
{
VideoInformation temp = VideoInformations[i];
VideoInformations[i] = VideoInformations[i + 1];
VideoInformations[i + 1] = temp;
}
}
}
for (int i = 0; i < VideoInformations.Count; i++)
{
InstantiateVideoItem(VideoInformations[i].m_VideoName, VideoInformations[i].m_VideoPath, VideoInformations[i].m_FileInfo);
}
}
/// <summary>
/// 实例化视频物体
/// </summary>
/// <param name="info"></param>
/// <param name="path"></param>
public void InstantiateVideoItem(string info, string path, FileInfo fileinfo)
{
string practice = "";
string ship = "";
string subject = "";
string user = "";
#region
//string time = "";
//int YY = 0;
//int MM = 0;
//int DD = 0;
//int SS = 0;
//int hh = 0;
//int mm = 0;
string[] infos = info.Split('$');
if (infos.Length == 6)
{
practice = infos[1];
ship = infos[2];
subject = infos[3];
user = infos[4];
//time = infos[5];
//string[] times = time.Split('-');
//YY = int.Parse(times[1]);
//MM = int.Parse(times[2]);
//DD = int.Parse(times[3]);
//SS = int.Parse(times[4].TrimEnd('s'));
//hh = SS / 3600;
//mm = (SS - hh * 3600) / 60;
}
#endregion
GameObject go = Instantiate(m_VideoItemPrefab, transform);
VideoItem tempVI = go.GetComponent<VideoItem>();
tempVI.m_Practice = practice;
tempVI.m_Ship = ship;
tempVI.m_Subject = subject;
tempVI.m_User = user;
//string temptime = string.Format("{0}/{1}/{2}", YY.ToString(), MM.ToString(), DD.ToString());
//tempVI.m_Time = temptime;
tempVI.m_Time = fileinfo.CreationTime.ToString();
string[] ts = (fileinfo.LastWriteTime - fileinfo.CreationTime).ToString().Split(':');
int s = (int)float.Parse(ts[2]);
tempVI.m_Length = string.Format("{0}:{1}:{2:D2}", ts[0], ts[1], s);
tempVI.m_MyName = info;
//string[] folders = path.Split('\\');
//Debug.Log("生成"+folders.Length);
//string folder="";
//for (int i = 0; i < folders.Length; i++)
//{
// if (folders[i].Trim().Equals("ScreenCaptures"))
// tempVI.m_Folder = folder = folders[i + 1];
//}
tempVI.m_Folder = fileinfo.Directory.Name;
tempVI.m_MyPath = path;
//tempVI.GetComponentInChildren<Text>().text = string.Format("{0}_{1}_{2}\n{3} {4:d2}:{5:d2}", user, subject, practice, temptime, hh, mm);
tempVI.GetComponentInChildren<Text>().text = string.Format("{0}_{1}_{2}\n{3}", user, subject, practice, tempVI.m_Time);
// m_TotalVideoItems.Add(tempVI);
// SetTexture(subject, (sprite) => { tempVI.m_ThumbnailImage.sprite = sprite; });
//自动截取屏幕,读取截取文件
//string pngpath = Path.GetFullPath(Path.Combine(Application.dataPath,"..", "PrintScreens", folder, info.Split('.')[0]+".png"));//图片地址
//StartCoroutine(LoadTexture(pngpath, (texture) => { tempVI.m_RawImage.texture = texture; }));
}
/// <summary>
/// 获取图片
/// </summary>
/// <param name="url"></param>
/// <param name="callback"></param>
/// <returns></returns>
IEnumerator LoadTexture(string url, Action<Texture> callback)
{
Debug.Log(url);
WWW www = new WWW(url);
yield return www;
if (www.isDone)
{
if (www.texture)
callback?.Invoke(www.texture);
}
}
public Queue<VideoItem> videoItemsque = new Queue<VideoItem>();
static string ScreenCapturePath;
public static FileInfo[] LoadLocalFile()
{
FileInfo[] fileInfos = new FileInfo[0];
ScreenCapturePath = System.IO.Path.GetFullPath(
System.IO.Path.Combine(Application.streamingAssetsPath,
"ScreenCaptures")
);
if (Directory.Exists(ScreenCapturePath))
{
DirectoryInfo direction = new DirectoryInfo(ScreenCapturePath);
fileInfos = direction.GetFiles("*", SearchOption.AllDirectories);
}
else
Debug.LogError("路径‘" + ScreenCapturePath + "’不存在!");
return fileInfos;
}
}
/// <summary>
/// 视频信息类
/// </summary>
public class VideoInformation
{
public DateTime CreationTime;
public string m_VideoName;
public string m_VideoPath;
public FileInfo m_FileInfo;
public VideoInformation(DateTime time, string name, string path, FileInfo fileInfo)
{
CreationTime = time;
m_VideoName = name;
m_VideoPath = path;
m_FileInfo = fileInfo;
}
}