You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
207 lines
6.6 KiB
207 lines
6.6 KiB
2 years ago
|
using Newtonsoft.Json;
|
||
|
using System;
|
||
|
using System.Collections;
|
||
|
using System.Collections.Generic;
|
||
|
using System.IO;
|
||
|
using System.Text;
|
||
|
using UnityEngine;
|
||
|
|
||
|
|
||
|
|
||
|
public class VideoData
|
||
|
{
|
||
|
public string Url;//对应文件完整路径
|
||
|
public string Mode;//Practice为练习模式,manoeuvre为演习模式
|
||
|
public string RoomId;//房间id
|
||
|
public string RoomName;//房间名
|
||
|
public string Creator;//创建者
|
||
|
public string Name;//输入的文件名
|
||
|
public string RecoedTime;//录制持续时间
|
||
|
}
|
||
|
public class VideoFileCtrl
|
||
|
{
|
||
|
public static readonly VideoFileCtrl Instance = new VideoFileCtrl();
|
||
|
public List<VideoData> PracticeDatas = new List<VideoData>();
|
||
|
public List<VideoData> manoeuvreDatas = new List<VideoData>();
|
||
|
public string RECFilePath;
|
||
|
private List<string> PracticeUrlList = new List<string>();
|
||
|
private List<string> manoeuvreUrlList = new List<string>();
|
||
|
//private void Awake()
|
||
|
//{
|
||
|
// //DontDestroyOnLoad(this);
|
||
|
// //Instance = this;
|
||
|
// Init();
|
||
|
//}
|
||
|
// Start is called before the first frame update
|
||
|
//void Start()
|
||
|
//{
|
||
|
// RECFilePath = Path.Combine(Application.streamingAssetsPath, "RECFile");
|
||
|
// PracticeDatas = GetVideoData("/PracticeVideoList.json");
|
||
|
// manoeuvreDatas = GetVideoData("/manoeuvreVideoList.json");
|
||
|
// for (int i = 0; i < PracticeDatas.Count; i++)
|
||
|
// {
|
||
|
// PracticeUrlList.Add(PracticeDatas[i].Url);
|
||
|
// }
|
||
|
// for (int i = 0; i < manoeuvreDatas.Count; i++)
|
||
|
// {
|
||
|
// manoeuvreUrlList.Add(manoeuvreDatas[i].Url);
|
||
|
// }
|
||
|
//}
|
||
|
public void Init()
|
||
|
{
|
||
|
RECFilePath = Path.Combine(Application.streamingAssetsPath, "RECFile");
|
||
|
PracticeDatas = GetVideoData("/PracticeVideoList.json");
|
||
|
manoeuvreDatas = GetVideoData("/manoeuvreVideoList.json");
|
||
|
for (int i = 0; i < PracticeDatas.Count; i++)
|
||
|
{
|
||
|
PracticeUrlList.Add(PracticeDatas[i].Url);
|
||
|
}
|
||
|
for (int i = 0; i < manoeuvreDatas.Count; i++)
|
||
|
{
|
||
|
manoeuvreUrlList.Add(manoeuvreDatas[i].Url);
|
||
|
}
|
||
|
}
|
||
|
// Update is called once per frame
|
||
|
void Update()
|
||
|
{
|
||
|
|
||
|
}
|
||
|
public void LoadFileStringSync(string path, Action<string> complete)
|
||
|
{
|
||
|
if (!File.Exists(path))
|
||
|
return;
|
||
|
StreamReader sr = new StreamReader(path);
|
||
|
if (sr == null)
|
||
|
return;
|
||
|
|
||
|
string fileString = sr.ReadToEnd();
|
||
|
sr.Close();
|
||
|
sr.Dispose();
|
||
|
if (complete != null)
|
||
|
complete(fileString);
|
||
|
}
|
||
|
private List<VideoData> GetVideoData(string filepath)
|
||
|
{
|
||
|
List<VideoData> data = new List<VideoData>();
|
||
|
LoadFileStringSync(
|
||
|
RECFilePath + filepath,
|
||
|
VideoJsonData =>
|
||
|
{
|
||
|
var tasksData = JsonConvert.DeserializeObject<List<VideoData>>(VideoJsonData);
|
||
|
data = tasksData;
|
||
|
}
|
||
|
);
|
||
|
return data;
|
||
|
}
|
||
|
/// <summary>
|
||
|
/// 新生成视频时添加文件,并修改json
|
||
|
/// </summary>
|
||
|
/// <param name="videoData"></param>
|
||
|
/// <param name="mode"></param>
|
||
|
public void AddVideoDatasToJson(VideoData videoData,string mode)
|
||
|
{
|
||
|
if (mode== "manoeuvre")
|
||
|
{
|
||
|
if (!manoeuvreUrlList.Contains(videoData.Url))
|
||
|
{
|
||
|
manoeuvreUrlList.Add(videoData.Url);
|
||
|
manoeuvreDatas.Add(videoData);
|
||
|
}
|
||
|
string jsondata = JsonConvert.SerializeObject(manoeuvreDatas);
|
||
|
WriteFileToLocal(jsondata,Path.Combine(RECFilePath, "manoeuvreVideoList.json"));
|
||
|
}
|
||
|
if (mode== "Practice")
|
||
|
{
|
||
|
if (!PracticeUrlList.Contains(videoData.Url))
|
||
|
{
|
||
|
PracticeUrlList.Add(videoData.Url);
|
||
|
PracticeDatas.Add(videoData);
|
||
|
}
|
||
|
string jsondata = JsonConvert.SerializeObject(PracticeDatas);
|
||
|
WriteFileToLocal(jsondata, Path.Combine(RECFilePath, "PracticeVideoList.json"));
|
||
|
}
|
||
|
|
||
|
}
|
||
|
public void DelectVideoAndUpdateJson(string url,string mode)
|
||
|
{
|
||
|
if (mode == "manoeuvre")
|
||
|
{
|
||
|
if (manoeuvreUrlList.Contains(url))
|
||
|
{
|
||
|
manoeuvreUrlList.Remove(url);
|
||
|
}
|
||
|
for (int i = 0; i < manoeuvreDatas.Count; i++)
|
||
|
{
|
||
|
if (manoeuvreDatas[i].Url==url)
|
||
|
{
|
||
|
manoeuvreDatas.Remove(manoeuvreDatas[i]);
|
||
|
}
|
||
|
}
|
||
|
if (File.Exists(url))
|
||
|
{
|
||
|
File.Delete(url);
|
||
|
}
|
||
|
string imagepath = url.Replace(".mp4", ".png");
|
||
|
if (File.Exists(imagepath))
|
||
|
{
|
||
|
//删除图片文件
|
||
|
File.Delete(imagepath);
|
||
|
}
|
||
|
string jsondata = JsonConvert.SerializeObject(manoeuvreDatas);
|
||
|
WriteFileToLocal(jsondata, Path.Combine(RECFilePath, "manoeuvreVideoList.json"));
|
||
|
}
|
||
|
if (mode == "Practice")
|
||
|
{
|
||
|
if (PracticeUrlList.Contains(url))
|
||
|
{
|
||
|
PracticeUrlList.Remove(url);
|
||
|
}
|
||
|
for (int i = 0; i < PracticeDatas.Count; i++)
|
||
|
{
|
||
|
if (PracticeDatas[i].Url == url)
|
||
|
{
|
||
|
PracticeDatas.Remove(PracticeDatas[i]);
|
||
|
}
|
||
|
}
|
||
|
if (File.Exists(url))
|
||
|
{
|
||
|
//删除视频文件
|
||
|
File.Delete(url);
|
||
|
}
|
||
|
string imagepath = url.Replace(".mp4", ".png");
|
||
|
if (File.Exists(imagepath))
|
||
|
{
|
||
|
//删除图片文件
|
||
|
File.Delete(imagepath);
|
||
|
}
|
||
|
string jsondata = JsonConvert.SerializeObject(PracticeDatas);
|
||
|
WriteFileToLocal(jsondata, Path.Combine(RECFilePath, "PracticeVideoList.json"));
|
||
|
}
|
||
|
|
||
|
}
|
||
|
|
||
|
private void WriteFileToLocal(string fileJsonData, string filePath)
|
||
|
{
|
||
|
//var fileDirectory = Path.GetDirectoryName(filePath);
|
||
|
if (File.Exists(filePath))
|
||
|
{
|
||
|
File.Delete(filePath);
|
||
|
}
|
||
|
//if (!File.Exists(filePath))
|
||
|
//{
|
||
|
// File.Create(filePath);
|
||
|
//}
|
||
|
//using (var filestream = new FileStream(filePath, FileMode.Create, FileAccess.ReadWrite, FileShare.ReadWrite))
|
||
|
//{
|
||
|
// var fileBytes = Encoding.UTF8.GetBytes(fileJsonData);
|
||
|
// filestream.Write(fileBytes, 0, fileBytes.Length);
|
||
|
//}
|
||
|
|
||
|
FileStream file = File.Create(filePath);
|
||
|
byte[] byteArray = Encoding.UTF8.GetBytes(fileJsonData);
|
||
|
file.Write(byteArray, 0, byteArray.Length);
|
||
|
file.Close();
|
||
|
|
||
|
}
|
||
|
}
|