//Get all videoFiles' time message private bool UpdateAll(DateTime time, int cameraIndex) { string strDate = time.ToString("yyyyMMdd"); string datePath = folderPath + "\\" + strDate; string datePatth_yesterday = folderPath + "\\" + time.AddDays(-1).ToString("yyyyMMdd"); string dstPath = datePath + "\\" + IP + "_" + Port + "_" + cameraIndex.ToString() + "_" + cameraIndex.ToString() + "_-1"; string dstPath_yesterday = datePatth_yesterday + "\\" + IP + "_" + Port + "_" + cameraIndex.ToString() + "_" + cameraIndex.ToString() + "_-1"; if (!Directory.Exists(dstPath)) { bTodayExist = false; } else { bTodayExist = true; } if (!Directory.Exists(dstPath_yesterday)) { bYesterdayExist = false; } else { bYesterdayExist = true; } if (bTodayExist) { DirectoryInfo Folder = new DirectoryInfo(dstPath); int i = 0; FileInfo[] fileInfo = Folder.GetFiles("*.mp4"); FileComparer fc = new FileComparer(); Array.Sort(fileInfo, fc);//排序 videoFile = new VideoFile[fileInfo.Length]; foreach (FileInfo NextFile in fileInfo) { if (NextFile.Extension != ".mp4") { continue; } videoFile[i].fileName = dstPath + "\\" + NextFile.Name; if (NextFile.Name.Length > 30) { int year_start = Convert.ToInt32(NextFile.Name.Substring(9, 4)); int month_start = Convert.ToInt32(NextFile.Name.Substring(13, 2)); int day_start = Convert.ToInt32(NextFile.Name.Substring(15, 2)); int hour_start = Convert.ToInt32(NextFile.Name.Substring(17, 2)); int minute_start = Convert.ToInt32(NextFile.Name.Substring(19, 2)); int second_start = Convert.ToInt32(NextFile.Name.Substring(21, 2)); int year_end = Convert.ToInt32(NextFile.Name.Substring(24, 4)); int month_end = Convert.ToInt32(NextFile.Name.Substring(28, 2)); int day_end = Convert.ToInt32(NextFile.Name.Substring(30, 2)); int hour_end = Convert.ToInt32(NextFile.Name.Substring(32, 2)); int minute_end = Convert.ToInt32(NextFile.Name.Substring(34, 2)); int second_end = Convert.ToInt32(NextFile.Name.Substring(36, 2)); double Framesize = VideoIncise.FrameSize(videoFile[i].fileName); double FrameCount = VideoIncise.FrameCount(videoFile[i].fileName); double second_add = FrameCount / Framesize; videoFile[i].startTime = new DateTime(year_start, month_start, day_start, hour_start, minute_start, second_start); videoFile[i].endTime = new DateTime(year_end, month_end, day_end, hour_end, minute_end, second_end); videoFile[i].bRecording = false; }//已经录好的文件 else { int year_start = Convert.ToInt32(NextFile.Name.Substring(0, 4)); int month_start = Convert.ToInt32(NextFile.Name.Substring(4, 2)); int day_start = Convert.ToInt32(NextFile.Name.Substring(6, 2)); int hour_start = Convert.ToInt32(NextFile.Name.Substring(9, 2)); int minute_start = Convert.ToInt32(NextFile.Name.Substring(11, 2)); int second_start = Convert.ToInt32(NextFile.Name.Substring(13, 2)); videoFile[i].startTime = new DateTime(year_start, month_start, day_start, hour_start, minute_start, second_start); videoFile[i].bRecording = true; double Framesize = VideoIncise.FrameSize(videoFile[i].fileName); double FrameCount = VideoIncise.FrameCount(videoFile[i].fileName); if (File.Exists(videoFile[i].fileName)) { FileInfo fileInfo1 = new FileInfo(videoFile[i].fileName); videoFile[i].endTime = fileInfo1.LastWriteTime; } //videoFile[i].startTime.AddSeconds(second_add); }//正在录取 i++; } } if (bYesterdayExist) { DirectoryInfo Folder = new DirectoryInfo(dstPath_yesterday); int i = 0; FileInfo[] fileInfo = Folder.GetFiles("*.mp4"); FileComparer fc = new FileComparer(); Array.Sort(fileInfo, fc);//排序 videoFile_Yesterday = new VideoFile[fileInfo.Length]; foreach (FileInfo NextFile in fileInfo) { if (NextFile.Extension != ".mp4") { continue; } videoFile_Yesterday[i].fileName = dstPath_yesterday + "\\" + NextFile.Name; if (NextFile.Name.Length > 30) { int year_start = Convert.ToInt32(NextFile.Name.Substring(9, 4)); int month_start = Convert.ToInt32(NextFile.Name.Substring(13, 2)); int day_start = Convert.ToInt32(NextFile.Name.Substring(15, 2)); int hour_start = Convert.ToInt32(NextFile.Name.Substring(17, 2)); int minute_start = Convert.ToInt32(NextFile.Name.Substring(19, 2)); int second_start = Convert.ToInt32(NextFile.Name.Substring(21, 2)); int year_end = Convert.ToInt32(NextFile.Name.Substring(24, 4)); int month_end = Convert.ToInt32(NextFile.Name.Substring(28, 2)); int day_end = Convert.ToInt32(NextFile.Name.Substring(30, 2)); int hour_end = Convert.ToInt32(NextFile.Name.Substring(32, 2)); int minute_end = Convert.ToInt32(NextFile.Name.Substring(34, 2)); int second_end = Convert.ToInt32(NextFile.Name.Substring(36, 2)); videoFile_Yesterday[i].startTime = new DateTime(year_start, month_start, day_start, hour_start, minute_start, second_start); videoFile_Yesterday[i].endTime = new DateTime(year_end, month_end, day_end, hour_end, minute_end, second_end); videoFile_Yesterday[i].bRecording = false; }//已经录好的文件 else { int year_start = Convert.ToInt32(NextFile.Name.Substring(0, 4)); int month_start = Convert.ToInt32(NextFile.Name.Substring(4, 2)); int day_start = Convert.ToInt32(NextFile.Name.Substring(6, 2)); int hour_start = Convert.ToInt32(NextFile.Name.Substring(9, 2)); int minute_start = Convert.ToInt32(NextFile.Name.Substring(11, 2)); int second_start = Convert.ToInt32(NextFile.Name.Substring(13, 2)); videoFile_Yesterday[i].startTime = new DateTime(year_start, month_start, day_start, hour_start, minute_start, second_start); videoFile_Yesterday[i].bRecording = true; if (File.Exists(videoFile_Yesterday[i].fileName)) { FileInfo fileInfo2 = new FileInfo(videoFile_Yesterday[i].fileName); videoFile_Yesterday[i].endTime = fileInfo2.LastWriteTime; } //videoFile_Yesterday[i].endTime = videoFile_Yesterday[i].startTime.AddSeconds(second_add); }//正在录取 i++; } } if (bTodayExist || bYesterdayExist) { return(true); } return(false); }
//Get needed file according to time&camera index. public bool GetFile(DateTime currentTime, int cameraIndex, ref string file_ResultName) { try { if (!UpdateAll(currentTime, cameraIndex)) { return(false); } int[] file_index_today = new int[] { -1, -1, -1 }; int[] nStartPt_today = new int[] { -1, -1, -1 }; int[] nLength_today = new int[] { -1, -1, -1 }; int index_today = 0; int[] file_index_yesterday = new int[] { -1, -1, -1 }; int[] nStartPt_yesterday = new int[] { -1, -1, -1 }; int[] nLength_yesterday = new int[] { -1, -1, -1 }; int index_yesterday = 0; bool bFirstFile = false; bool bSecondFile = false; VideoIncise videoIncise = new VideoIncise(); string dstFolder = dstPath + "\\" + currentTime.ToString("yyyyMMdd"); if (!Directory.Exists(dstFolder)) { Directory.CreateDirectory(dstFolder); } string dstFile = dstFolder + "\\" + currentTime.ToString("yyyyMMddHHmmss") + "_" + cameraIndex.ToString() + ".mp4"; string dstFile_tmp1 = dstFolder + "\\" + currentTime.ToString("mmss") + cameraIndex.ToString() + "tmp1.mp4"; string dstFile_tmp2 = dstFolder + "\\" + currentTime.ToString("mmss") + cameraIndex.ToString() + "tmp2.mp4"; if (bYesterdayExist) { for (int i = 0; i < videoFile_Yesterday.Length; i++) { int nStartPt = 0; int nLength = 0; if (IsValidFile(videoFile_Yesterday[i], currentTime, ref nStartPt, ref nLength)) { file_index_yesterday[index_yesterday] = i; nStartPt_yesterday[index_yesterday] = nStartPt; nLength_yesterday[index_yesterday++] = nLength; if (index_yesterday > file_index_yesterday.Length) { break; } } } } if (bTodayExist) { for (int i = 0; i < videoFile.Length; i++) { int nStartPt = 0; int nLength = 0; if (IsValidFile(videoFile[i], currentTime, ref nStartPt, ref nLength)) { file_index_today[index_today] = i; nStartPt_today[index_today] = nStartPt; nLength_today[index_today++] = nLength; if (index_today > file_index_today.Length) { break; } } } } for (int i = 0; i < file_index_yesterday.Length; i++) { if (file_index_yesterday[i] == -1) { break; } if (!bFirstFile) { /*if (videoIncise.open(videoFile_Yesterday[i].fileName, dstFile_tmp1)) * { * int FrameSize = (int)videoIncise.FrameSize(); * videoIncise.Combine(nStartPt_yesterday[i] * FrameSize, nLength_yesterday[i] * FrameSize); * bFirstFile = true; * }*/ FFMEPG ffmpeg = new FFMEPG(); TimeSpan sp1 = new TimeSpan(0, 0, nStartPt_yesterday[i]); TimeSpan sp2 = new TimeSpan(0, 0, nStartPt_yesterday[i] + nLength_yesterday[i]); ffmpeg.Cut(videoFile_Yesterday[i].fileName, dstFile_tmp1, sp1, sp2); bFirstFile = true; }//first File else { /*if (videoIncise.open(dstFile_tmp1, videoFile_Yesterday[i].fileName, dstFile_tmp2)) * { * int frameCount=(int)VideoIncise.FrameCount(dstFile); * int FrameSize = (int)videoIncise.FrameSize(); * videoIncise.Combine(0, frameCount, nStartPt_yesterday[i] * FrameSize, nLength_yesterday[i] * FrameSize); * }*/ FFMEPG ffmpeg = new FFMEPG(); TimeSpan sp1 = new TimeSpan(0, 0, nStartPt_yesterday[i]); TimeSpan sp2 = new TimeSpan(0, 0, nStartPt_yesterday[i] + nLength_yesterday[i]); ffmpeg.Cut(videoFile_Yesterday[file_index_yesterday[i]].fileName, dstFile_tmp2, sp1, sp2); ffmpeg.Combine(dstFile_tmp2, dstFile_tmp1, dstFile_tmp2); bSecondFile = true; } } for (int i = 0; i < file_index_today.Length; i++) { if (file_index_today[i] == -1) { break; } if (!bFirstFile) { /*if (videoIncise.open(videoFile[i].fileName, dstFile_tmp1)) * { * int FrameSize = (int)videoIncise.FrameSize(); * videoIncise.Combine(nStartPt_today[i] * FrameSize, nLength_today[i] * FrameSize); * bFirstFile = true; * }*/ TimeSpan sp1 = new TimeSpan(0, 0, nStartPt_today[i]); TimeSpan sp2 = new TimeSpan(0, 0, nStartPt_today[i] + nLength_today[i]); FFMEPG ffmpeg = new FFMEPG(); ffmpeg.Cut(videoFile[file_index_today[i]].fileName, dstFile_tmp1, sp1, sp2); bFirstFile = true; }//first File else { /*if (videoIncise.open(dstFile_tmp1, videoFile[i].fileName, dstFile_tmp2)) * { * int frameCount = (int)VideoIncise.FrameCount(dstFile); * int FrameSize = (int)videoIncise.FrameSize(); * videoIncise.Combine(0, frameCount, nStartPt_today[i] * FrameSize, nLength_today[i] * FrameSize); * }*/ FFMEPG ffmpeg = new FFMEPG(); TimeSpan sp1 = new TimeSpan(0, 0, nStartPt_today[i]); TimeSpan sp2 = new TimeSpan(0, 0, nStartPt_today[i] + nLength_today[i]); ffmpeg.Cut(videoFile[file_index_today[i]].fileName, dstFile_tmp2, sp1, sp2); ffmpeg.Combine(dstFile_tmp2, dstFile_tmp1, dstFile_tmp2); bSecondFile = true; } } if (!bFirstFile) { return(false); } if (bSecondFile) { File.Copy(dstFile_tmp2, dstFile, true); File.Delete(dstFile_tmp1); File.Delete(dstFile_tmp2); } else { if (!File.Exists(dstFile_tmp1)) { return(false); } File.Copy(dstFile_tmp1, dstFile, true); File.Delete(dstFile_tmp1); } file_ResultName = dstFile; return(true); } catch { return(false); } }