private void startFile() { _fileStartTime = _curStream.Time; string streamName = $"{GlobalProcess.FileNameFromTime(_fileStartTime)}{GlobalProcess.RecFormat()}"; string indexesName = $"{GlobalProcess.FileNameFromTime(_fileStartTime)}{GlobalProcess.IndexesFormat()}"; updateFolderPath(); Directory.CreateDirectory(_curFolder); _fsStream = newFileStream(streamName); _fsIndexes = newFileStream(indexesName); writeToVideoStream(_fileStartTime, DataType.SysHead, _header); }
/// <summary> /// 获取路径下指定时间点对应的视频流信息 /// </summary> /// <param name="path"></param> /// <param name="time"></param> /// <returns></returns> public static VideoStreamsPacket GetVideoStreamsPacket(string path, DateTime time) { string indexesFileName = null; IndexesPacket indexesPacket = GetIndexesPacket(path, time, ref indexesFileName); if (indexesPacket != null && indexesFileName != null) { string videoFile = GlobalProcess.GetRecFileName(indexesFileName); StreamPacket[] streamPacket = FileManager.GetStreamPacket(videoFile, indexesPacket.StartIndex); return(new VideoStreamsPacket(indexesPacket, streamPacket)); } Logger.Default.Trace("{0} 未找到 {1} 对应的索引文件! {2}", path, time, indexesFileName); return(null); }
/// <summary> /// 获取文件夹内所有简单索引文件中时间段列表 /// </summary> /// <param name="folder">文件夹路径</param> /// <returns>时间段列表</returns> public static TimePeriodPacket[] GetTimePeriods(string folder) { List <TimePeriodPacket> list = new List <TimePeriodPacket>(); DirectoryInfo dir = new DirectoryInfo(folder); FileInfo[] files = dir.GetFiles("*" + GlobalProcess.SimpleIndexesFormat()); foreach (var file in files) { var array = FileManager.GetTimePeriods(file.FullName); if (array != null) { list.AddRange(array); } } return(list.ToArray()); }
public static IndexesPacket GetIndexesPacket(string path, DateTime time, ref string fileName) { DirectoryInfo dirInfo = new DirectoryInfo(path); if (dirInfo.Exists) { FileInfo[] files = dirInfo.GetFiles("*" + GlobalProcess.IndexesFormat()); string startStr = $"{GlobalProcess.FileNameFromTime(time)}{GlobalProcess.IndexesFormat()}"; var filesOrder = files.OrderBy(_ => _.Name).ToList(); FileInfo last = filesOrder.LastOrDefault(_ => string.Compare(_.Name, startStr) <= 0); if (last == null) { return(null); } fileName = last.FullName; return(FileManager.GetIndexesPacket(fileName, time)); } return(null); }
/// <summary> /// 获取某文件夹下某段时间内首个视频头文件 /// </summary> /// <param name="folder">文件夹路径</param> /// <param name="beginTime">起始时间</param> /// <param name="endTime">结束时间</param> /// <returns>视频头</returns> public static StreamPacket GetVideoHeader(string folder, DateTime beginTime, DateTime endTime) { StreamPacket header = null; string[] files = GetIndexesFiles(folder); if (files.Length > 0) { TimePeriodPacket validTi = new TimePeriodPacket(beginTime, endTime); TimePeriodPacket[] tis = FolderManager.GetTimePeriods(folder); if (TimePeriodManager.GetIntersections(tis, validTi).Length != 0) { foreach (var file in files) { header = FileManager.GetVideoHeader(GlobalProcess.GetRecFileName(file)); if (header != null) { break; } } } } return(header); }