Пример #1
0
        /// <summary>获取某通道视频在某时段对应的有效的文件夹列表</summary>
        public static DateTime[] GetFolderPaths(string videoId, int streamId, DateTime start, DateTime end)
        {
            List <DateTime> list = new List <DateTime>();
            string          path = GlobalData.VideoPath(videoId, streamId);

            if (Directory.Exists(path))
            {
                DateTime cur = start.Date;
                while (cur < end)
                {
                    DirectoryInfo dir = new DirectoryInfo(Path.Combine(path, GlobalProcess.FolderPath(cur)));
                    if (dir.Exists)
                    {
                        list.Add(cur);
                        cur = cur.AddDays(1);
                    }
                    else if (dir.Parent.Exists)
                    {
                        cur = cur.AddDays(1);
                    }
                    else if (dir.Parent.Parent.Exists)
                    {
                        cur = new DateTime(cur.Year, cur.Month, 1).AddMonths(1);
                    }
                    else
                    {
                        cur = new DateTime(cur.Year + 1, 1, 1);
                    }
                }
            }
            return(list.ToArray());
        }
Пример #2
0
        public static void Add1()
        {
            var    beginTime = new DateTime(2016, 3, 22, 23, 50, 1, 156);
            string videoId   = "videoId";
            int    streamId  = 2;
            string path      = System.IO.Path.Combine(GlobalData.Path, $"{videoId}_{streamId}");

            GlobalData.FileLengthSup = new TimeSpan(0, 5, 0);
            using (SyncRecorder recorder = new SyncRecorder(path))
            {
                recordAddMinutes(recorder, beginTime, 0, DataType.StreamDataKey);
                recordAddMinutes(recorder, beginTime, 1, DataType.SysHead);       //new
                recordAddMinutes(recorder, beginTime, 1, DataType.StreamDataKey);
                recordAddMinutes(recorder, beginTime, 2, DataType.StreamDataKey);
                recordAddMinutes(recorder, beginTime, 3, DataType.StreamData);
                recordAddMinutes(recorder, beginTime, 4, DataType.StreamDataKey);
                recordAddMinutes(recorder, beginTime, 5, DataType.StreamData);
                recordAddMinutes(recorder, beginTime, 6, DataType.StreamData);
                recordAddMinutes(recorder, beginTime, 7, DataType.StreamDataKey);  //new
                recordAddMinutes(recorder, beginTime, 8, DataType.StreamData);
                recordAddMinutes(recorder, beginTime, 9, DataType.SysHead);        //new
                recordAddMinutes(recorder, beginTime, 9, DataType.StreamDataKey);
                recordAddMinutes(recorder, beginTime, 10, DataType.StreamData);
                recordAddMinutes(recorder, beginTime, 11, DataType.StreamData);
                recordAddMinutes(recorder, beginTime, 12, DataType.StreamDataKey);  //new
                recordAddMinutes(recorder, beginTime, 13, DataType.StreamData);
                recordAddMinutes(recorder, beginTime, 14, DataType.StreamData);
                recordAddMinutes(recorder, beginTime, 15, DataType.StreamDataKey);
                recordAddMinutes(recorder, beginTime, 16, DataType.StreamData);
                recordAddMinutes(recorder, beginTime, 17, DataType.StreamData);
                recordAddMinutes(recorder, beginTime, 18, DataType.StopSign);
                writeError(Path.Combine(path, GlobalProcess.FolderPath(beginTime)), $"20100322235959999{GlobalProcess.IndexesFormat()}");
            }
        }
Пример #3
0
        public VideoTimePeriodsPacket Search(DateTime beginTime, DateTime endTime, IVideoInfo videoInfo)
        {
            string path = GlobalData.VideoPath(videoInfo.VideoId, videoInfo.StreamId);

            DateTime[] dates            = VideoStoragerManager.GetFolderPaths(videoInfo.VideoId, videoInfo.StreamId, beginTime, endTime);
            List <TimePeriodPacket> tis = new List <TimePeriodPacket>();

            Parallel.ForEach(dates, date =>
            {
                string folder = Path.Combine(path, GlobalProcess.FolderPath(date));
                var array     = FolderManager.GetTimePeriods(folder);
                if (array.Length > 0)
                {
                    lock (tis)
                        tis.AddRange(array);
                }
            });
            if (endTime > DateTime.Now.Date)
            {
                tis.AddRange(findTodayLastest(path, endTime));
            }
            var timeCombines = TimePeriodManager.Combine(tis.ToArray());
            var validArray   = TimePeriodManager.GetIntersections(timeCombines, new TimePeriodPacket(beginTime, endTime));

            return(new VideoTimePeriodsPacket(videoInfo, validArray));
        }
Пример #4
0
        private static void addErrorFile(string videoId, int streamId, DateTime date)
        {
            string path = Path.Combine(GlobalData.Path, $"{videoId}_{streamId}", GlobalProcess.FolderPath(date));

            Directory.CreateDirectory(path);
            writeError(path, $"{GlobalProcess.FileNameFromDate(date)}235959999{GlobalProcess.IndexesFormat()}");
            writeError(path, $"{GlobalProcess.FileNameFromDate(date)}235959999{GlobalProcess.RecFormat()}");
        }
Пример #5
0
        public void TestFileManager_GetTimePeriods()
        {
            BaseInfo.AddData_videoId_003_2_20160330();
            DateTime time     = new DateTime(2016, 03, 30);
            string   fileName = Path.Combine(GlobalData.Path, @"videoID_003_2", GlobalProcess.FolderPath(time), $"{GlobalProcess.FileNameFromDate(time)}{GlobalProcess.SimpleIndexesFormat()}");

            Assert.IsNotNull(FileManager.GetTimePeriods(fileName));
            using (FileStream fs = new FileStream(fileName, FileMode.Open, FileAccess.Read, FileShare.ReadWrite))
                Assert.IsNotNull(FileManager.GetTimePeriods(fileName));
        }
Пример #6
0
        TimePeriodPacket[] findTodayLastest(string path, DateTime end)
        {
            string folder = Path.Combine(path, GlobalProcess.FolderPath(DateTime.Now));
            var    array  = FolderManager.GetIndexesFiles(folder);

            if (array.Length > 0)
            {
                string file    = array.Max();
                var    packets = FileManager.GetIndexesPackets(file);
                return(TimePeriodManager.Combine(packets));
            }
            return(new TimePeriodPacket[0]);
        }
Пример #7
0
        /// <summary>获取某通道视频在某时段对应文件的首个视频头</summary>
        public static VideoBasePacket GetVideoBaseInfom(string videoId, int streamId, DateTime beginTime, DateTime endTime)
        {
            string path = GlobalData.VideoPath(videoId, streamId);

            DateTime[] dates = GetFolderPaths(videoId, streamId, beginTime, endTime);
            foreach (var date in dates)
            {
                var header = FolderManager.GetVideoHeader(Path.Combine(path, GlobalProcess.FolderPath(date)), beginTime, endTime);
                if (header != null && header.Type == DataType.SysHead)
                {
                    long length = getLength(path, dates, beginTime, endTime, StreamPacket.Encode(header).Length + 4);
                    return(new VideoBasePacket(header.Buffer, header.Time, length));
                }
            }
            return(null);
        }
Пример #8
0
        public void TestVideoStoragerManager_SearchEarliestSubfolder_One()
        {
            BaseInfo.AddOldVideo();
            string   videoId   = "videoID_003";
            int      streamId  = 2;
            string   path      = GlobalData.VideoPath(videoId, streamId);
            DateTime beginTime = new DateTime(2001, 3, 23, 01, 50, 1, 156);

            Directory.CreateDirectory(Path.Combine(path, @"10000\01\01"));
            Directory.CreateDirectory(Path.Combine(path, @"2001\1\01"));
            string earliestPath = Path.Combine(path, GlobalProcess.FolderPath(beginTime));
            var    info         = VideoStoragerManager.SearchEarliestSubfolder(path);

            Assert.IsNotNull(info);
            Assert.AreEqual(earliestPath, info.Path);
            Assert.AreEqual(beginTime.Date, info.Time);
        }
Пример #9
0
        static long getLength(string path, DateTime[] dates, DateTime beginTime, DateTime endTime, int headerLength)
        {
            long size = 0;

            for (int i = 0; i < dates.Length; i++)
            {
                var    date   = dates[i];
                string folder = Path.Combine(path, GlobalProcess.FolderPath(date));
                if (date > beginTime.Date && date < endTime.Date)
                {
                    size += getAllSize(folder, headerLength);
                }
                else
                {
                    size += getValidSize(folder, beginTime, endTime, headerLength);
                }
            }
            return(size);
        }
Пример #10
0
 static string getPath(string videoId, int streamId, DateTime time)
 {
     return(Path.Combine(GlobalData.VideoPath(videoId, streamId), GlobalProcess.FolderPath(time), GlobalProcess.FileNameFromTime(time) + GlobalProcess.RecFormat()));
 }
Пример #11
0
 public void Test_GlobalProcess_FolderPath()
 {
     Assert.AreEqual(@"2016\03\29", GlobalProcess.FolderPath(new DateTime(2016, 3, 29, 11, 33, 20, 555)));
 }
Пример #12
0
 private static string getPath(string videoId, int streamId, DateTime time)
 {
     return(Path.Combine(GlobalData.VideoPath(videoId, streamId), GlobalProcess.FolderPath(time)));
 }
Пример #13
0
 protected override void updateFolderPath()
 {
     _curFolder = Path.Combine(_filePath, GlobalProcess.FolderPath(_fileStartTime));
 }