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 PracticeDatas = new List(); public List manoeuvreDatas = new List(); public string RECFilePath; private List PracticeUrlList = new List(); private List manoeuvreUrlList = new List(); //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 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 GetVideoData(string filepath) { List data = new List(); LoadFileStringSync( RECFilePath + filepath, VideoJsonData => { var tasksData = JsonConvert.DeserializeObject>(VideoJsonData); data = tasksData; } ); return data; } /// /// 新生成视频时添加文件,并修改json /// /// /// 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(); } }