コード例 #1
0
        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);
        }
コード例 #2
0
ファイル: FolderManager.cs プロジェクト: windygu/SeecoolCCTV2
        /// <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);
        }
コード例 #3
0
ファイル: FolderManager.cs プロジェクト: windygu/SeecoolCCTV2
        /// <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());
        }
コード例 #4
0
ファイル: FolderManager.cs プロジェクト: windygu/SeecoolCCTV2
        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);
        }
コード例 #5
0
ファイル: FolderManager.cs プロジェクト: windygu/SeecoolCCTV2
        /// <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);
        }