public bool StreamStop([FromHeader(Name = "AccessKey")] string AccessKey, string mediaServerId, string mainId)
        {
            ResponseStruct rs;
            var            ret = MediaServerService.StreamStop(mediaServerId, mainId, out rs);

            if (rs.Code != ErrorNumber.None)
            {
                throw new AkStreamException(rs);
            }

            return(ret);
        }
        public bool DeleteVideoChannel([FromHeader(Name = "AccessKey")] string AccessKey, string mianId)
        {
            ResponseStruct rs;
            var            ret = MediaServerService.DeleteVideoChannel(mianId, out rs);

            if (rs.Code != ErrorNumber.None)
            {
                throw new AkStreamException(rs);
            }

            return(ret);
        }
        public ResKeeperCutMergeTaskStatusResponseList GetBacklogTaskList(string mediaServerId)
        {
            ResponseStruct rs;
            var            ret = MediaServerService.GetBacklogTaskList(mediaServerId, out rs);

            if (rs.Code != ErrorNumber.None)
            {
                throw new AkStreamException(rs);
            }

            return(ret);
        }
        public VideoChannel AddVideoChannel([FromHeader(Name = "AccessKey")] string AccessKey, ReqAddVideoChannel req)
        {
            ResponseStruct rs;
            var            ret = MediaServerService.AddVideoChannel(req, out rs);

            if (rs.Code != ErrorNumber.None)
            {
                throw new AkStreamException(rs);
            }

            return(ret);
        }
        public ResKeeperCutMergeTaskResponse CutOrMergeVideoFile(ReqKeeperCutOrMergeVideoFile rcmv)
        {
            ResponseStruct rs;
            var            ret = MediaServerService.CutOrMergeVideoFile(rcmv, out rs);

            if (rs.Code != ErrorNumber.None)
            {
                throw new AkStreamException(rs);
            }

            return(ret);
        }
        public bool SoftDeleteRecordFile([FromHeader(Name = "AccessKey")] string AccessKey, long dbId)
        {
            ResponseStruct rs;
            var            ret = MediaServerService.SoftDeleteRecordFile(dbId, out rs);

            if (rs.Code != ErrorNumber.None)
            {
                throw new AkStreamException(rs);
            }

            return(ret);
        }
Example #7
0
        /// <summary>
        /// 文件一个一个删除
        /// </summary>
        /// <param name="videoSize"></param>
        /// <param name="sdp"></param>
        private void deleteFileOneByOne(decimal videoSize, MediaServerStreamInfo mediaInfo, RecordPlan plan)
        {
            ReqGetRecordFileList req = new ReqGetRecordFileList();

            req.MainId        = mediaInfo.Stream;
            req.MediaServerId = mediaInfo.MediaServerId;
            req.Deleted       = false;
            req.OrderBy       = new List <OrderByStruct>();
            req.OrderBy.Add(new OrderByStruct()
            {
                FieldName  = "starttime",
                OrderByDir = OrderByDir.ASC,
            });
            req.PageIndex = 1;
            req.PageSize  = 100;


            long deleteSize = 0;

            while (videoSize - deleteSize > plan.LimitSpace)
            {
                var recordFileList = MediaServerService.GetRecordFileList(req, out ResponseStruct rs);
                if (!rs.Code.Equals(ErrorNumber.None))
                {
                    break;
                }

                if (recordFileList != null && recordFileList.RecordFileList != null &&
                    recordFileList.RecordFileList.Count > 0)
                {
                    foreach (var ret in recordFileList.RecordFileList)
                    {
                        if (ret != null)
                        {
                            if (MediaServerService.DeleteRecordFile(ret.Id, out rs))
                            {
                                deleteSize += (long)ret.FileSize !;
                                Logger.Info(
                                    $"[{Common.LoggerHead}]->删除一个录制文件->{mediaInfo.MediaServerId}->{mediaInfo.Stream}->DBId:{ret.Id}->FilePath:{ret.VideoPath}");
                            }

                            Thread.Sleep(20);
                        }

                        if ((videoSize - deleteSize) < plan.LimitSpace)
                        {
                            break;
                        }
                    }
                }
            }
        }
        public ResDeleteFileList DeleteRecordFileList([FromHeader(Name = "AccessKey")] string AccessKey,
                                                      List <long> dbIdList)
        {
            ResponseStruct rs;
            var            ret = MediaServerService.DeleteRecordFileList(dbIdList, out rs);

            if (rs.Code != ErrorNumber.None)
            {
                throw new AkStreamException(rs);
            }

            return(ret);
        }
        public ResGetRecordFileList GetRecordFileList([FromHeader(Name = "AccessKey")] string AccessKey,
                                                      ReqGetRecordFileList req)
        {
            ResponseStruct rs;
            var            ret = MediaServerService.GetRecordFileList(req, out rs);

            if (rs.Code != ErrorNumber.None)
            {
                throw new AkStreamException(rs);
            }

            return(ret);
        }
        public string GetStreamSnap([FromHeader(Name = "AccessKey")] string AccessKey, string mediaServerId,
                                    ReqZLMediaKitGetSnap req)
        {
            ResponseStruct rs;
            var            ret = MediaServerService.GetStreamSnap(mediaServerId, req, out rs);

            if (rs.Code != ErrorNumber.None)
            {
                throw new AkStreamException(rs);
            }

            return(ret);
        }
        public ResGetWaitForActiveVideoChannelList GetWaitForActiveVideoChannelList(
            [FromHeader(Name = "AccessKey")] string AccessKey, ReqPaginationBase req)
        {
            ResponseStruct rs;
            var            ret = MediaServerService.GetWaitForActiveVideoChannelList(req, out rs);

            if (rs.Code != ErrorNumber.None)
            {
                throw new AkStreamException(rs);
            }

            return(ret);
        }
Example #12
0
        public ResKeeperCutMergeTaskStatusResponse GetMergeTaskStatus([FromHeader(Name = "AccessKey")] string AccessKey,
                                                                      string mediaServerId, string taskId)
        {
            ResponseStruct rs;
            var            ret = MediaServerService.GetMergeTaskStatus(mediaServerId, taskId, out rs);

            if (rs.Code != ErrorNumber.None)
            {
                throw new AkStreamException(rs);
            }

            return(ret);
        }
        public ResMediaServerOpenRtpPort MediaServerOpenRtpPort([FromHeader(Name = "AccessKey")] string AccessKey,
                                                                string mediaServerId, string stream)
        {
            ResponseStruct rs;
            var            ret = MediaServerService.MediaServerOpenRtpPort(mediaServerId, stream, out rs);

            if (rs.Code != ErrorNumber.None)
            {
                throw new AkStreamException(rs);
            }

            return(ret);
        }
        public ServerInstance GetMediaServerByMediaServerId([FromHeader(Name = "AccessKey")] string AccessKey,
                                                            string mediaServerId)
        {
            ResponseStruct rs;
            var            ret = MediaServerService.GetMediaServerByMediaServerId(mediaServerId, out rs);

            if (!rs.Code.Equals(ErrorNumber.None))
            {
                throw new AkStreamException(rs);
            }

            return(ret);
        }
Example #15
0
        private void KeepLive()
        {
            while (true)
            {
                try
                {
                    var dbRet = ORMHelper.Db.Select <VideoChannel>().Where(x => x.Enabled.Equals(true))
                                .Where(x => x.AutoVideo.Equals(true)).Where(x => x.NoPlayerBreak.Equals(false)).ToList();
                    if (dbRet != null && dbRet.Count > 0)
                    {
                        foreach (var obj in dbRet)
                        {
                            if (obj != null)
                            {
                                var listRet = Common.VideoChannelMediaInfos.FindLast(x => x.MainId.Equals(obj.MainId));
                                if (listRet == null)
                                {
                                    var mediaServer = Common.MediaServerList.FindLast(x =>
                                                                                      x.MediaServerId.Equals(obj.MediaServerId));
                                    if (mediaServer != null && mediaServer.IsKeeperRunning &&
                                        mediaServer.IsMediaServerRunning)
                                    {
                                        var streamLiveRet = MediaServerService.StreamLive(obj.MediaServerId, obj.MainId,
                                                                                          out ResponseStruct rs);
                                        if (!rs.Code.Equals(ErrorNumber.None) || streamLiveRet == null)
                                        {
                                            Logger.Warn(
                                                $"[{Common.LoggerHead}]->自动推流失败->{obj.MediaServerId}->{obj.MainId}->{JsonHelper.ToJson(Common.WebPerformanceInfo)}");
                                        }
                                        else
                                        {
                                            Logger.Info(
                                                $"[{Common.LoggerHead}]->自动推流成功->{obj.MediaServerId}->{obj.MainId}->{JsonHelper.ToJson(streamLiveRet)}");
                                        }
                                    }
                                }
                            }

                            Thread.Sleep(100);
                        }
                    }

                    Thread.Sleep(5000);
                }
                catch
                {
                    //
                }
            }
        }
        public static void OnUnRegister(string sipDeviceJson)
        {
            //设备注销时,要清掉在线流
            var sipDevice = JsonHelper.FromJson <SipDevice>(sipDeviceJson);

            try
            {
                if (sipDevice != null && sipDevice.SipChannels != null && sipDevice.SipChannels.Count > 0)
                {
                    foreach (var channel in sipDevice.SipChannels)
                    {
                        if (channel != null)
                        {
                            var mediaInfo =
                                Common.VideoChannelMediaInfos.FindLast(x => x.MainId.Equals(channel.Stream));
                            if (mediaInfo != null)
                            {
                                var ret = MediaServerService.StreamStop(mediaInfo.MediaServerId, mediaInfo.MainId,
                                                                        out ResponseStruct rs);
                                if (ret && rs.Code.Equals(ErrorNumber.None))
                                {
                                    Logger.Info(
                                        $"[{Common.LoggerHead}]->设备注销->{sipDevice.RemoteEndPoint.Address.MapToIPv4().ToString()}-{sipDevice.DeviceId}->通道-{channel.DeviceId}->注销成功");
                                }
                                else
                                {
                                    Logger.Warn(
                                        $"[{Common.LoggerHead}]->设备注销->{sipDevice.RemoteEndPoint.Address.MapToIPv4().ToString()}-{sipDevice.DeviceId}->通道-{channel.DeviceId}->注销失败->{JsonHelper.ToJson(rs, Formatting.Indented)}");
                                }
                            }
                        }

                        Thread.Sleep(50);
                    }
                }
            }
            catch (Exception ex)
            {
                ResponseStruct rs = new ResponseStruct()
                {
                    Code             = ErrorNumber.Sip_CallBackExcept,
                    Message          = ErrorMessage.ErrorDic ![ErrorNumber.Sip_CallBackExcept],
Example #17
0
        /// <summary>
        /// 一天一天删除文件
        /// </summary>
        /// <param name="days"></param>
        /// <param name="sdp"></param>
        private void DeleteFileByDay(List <string> days, MediaServerStreamInfo mediaInfo)
        {
            foreach (var day in days)
            {
                var deleteList = ORMHelper.Db.Select <RecordFile>().Where(x => x.RecordDate == day).ToList();
                if (deleteList != null && deleteList.Count > 0)
                {
                    var deleteFileList = deleteList.Select(x => x.Id).ToList();

                    ORMHelper.Db.Update <RecordFile>().Set(x => x.UpdateTime, DateTime.Now)
                    .Set(x => x.Deleted, true)
                    .Where(x => x.RecordDate == day).ExecuteAffrows();
                    MediaServerService.DeleteRecordFileList(deleteFileList, out _);
                    Logger.Info(
                        $"[{Common.LoggerHead}]->删除一天录制文件->{mediaInfo.MediaServerId}->{mediaInfo.Stream}->{day}");
                }

                Thread.Sleep(100);
            }
        }
        public List <ushort> ListRtpServer(
            [FromHeader(Name = "AccessKey")] string AccessKey, string mediaServerId)
        {
            ResponseStruct rs;
            var            ret = MediaServerService.ListRtpServer(mediaServerId, out rs);

            if (!rs.Code.Equals(ErrorNumber.None))
            {
                throw new AkStreamException(rs);
            }

            if (ret != null && ret.Count > 0)
            {
                return(ret);
            }
            else
            {
                return(new List <ushort>());
            }
        }
        public void IncreaseMissedPings_Should_Return_Increased_Missed_Pings()
        {
            _httpClientMock      = new Mock <IHttpClient>();
            _embyRepositoryMock  = new Mock <IMediaServerRepository>();
            _movieRepositoryMock = new Mock <IMovieRepository>();
            _showRepositoryMock  = new Mock <IShowRepository>();
            _embyRepositoryMock  = new Mock <IMediaServerRepository>();
            _sessionServiceMock  = new Mock <ISessionService>();

            _embyRepositoryMock.Setup(x => x.ResetMissedPings());

            var strategy = new Mock <IClientStrategy>();

            strategy.Setup(x => x.CreateHttpClient(It.IsAny <ServerType>())).Returns(_httpClientMock.Object);

            var libraryRepository = new Mock <ILibraryRepository>();
            var service           = new MediaServerService(strategy.Object, _embyRepositoryMock.Object, _sessionServiceMock.Object, _settingsServiceMock.Object, _movieRepositoryMock.Object, _showRepositoryMock.Object, libraryRepository.Object);

            service.IncreaseMissedPings();

            _embyRepositoryMock.Verify(x => x.IncreaseMissedPings(), Times.Once);
        }
        public void PingEmby_Should_Ping_Emby_Server()
        {
            _httpClientMock      = new Mock <IHttpClient>();
            _embyRepositoryMock  = new Mock <IMediaServerRepository>();
            _movieRepositoryMock = new Mock <IMovieRepository>();
            _showRepositoryMock  = new Mock <IShowRepository>();
            _embyRepositoryMock  = new Mock <IMediaServerRepository>();
            _sessionServiceMock  = new Mock <ISessionService>();

            _httpClientMock.Setup(x => x.Ping()).Returns(true);

            var strategy = new Mock <IClientStrategy>();

            strategy.Setup(x => x.CreateHttpClient(It.IsAny <ServerType>())).Returns(_httpClientMock.Object);

            var libraryRepository = new Mock <ILibraryRepository>();
            var service           = new MediaServerService(strategy.Object, _embyRepositoryMock.Object, _sessionServiceMock.Object, _settingsServiceMock.Object, _movieRepositoryMock.Object, _showRepositoryMock.Object, libraryRepository.Object);
            var result            = service.PingMediaServer("localhost:9000");

            result.Should().BeTrue();

            _httpClientMock.Verify(x => x.Ping(), Times.Once);
        }
        public void GetUserViewCount_Should_Return_User_View_Count()
        {
            _httpClientMock      = new Mock <IHttpClient>();
            _embyRepositoryMock  = new Mock <IMediaServerRepository>();
            _movieRepositoryMock = new Mock <IMovieRepository>();
            _showRepositoryMock  = new Mock <IShowRepository>();
            _embyRepositoryMock  = new Mock <IMediaServerRepository>();
            _sessionServiceMock  = new Mock <ISessionService>();

            _sessionServiceMock.Setup(x => x.GetPlayCountForUser(It.IsAny <string>())).Returns(12);

            var strategy = new Mock <IClientStrategy>();

            strategy.Setup(x => x.CreateHttpClient(It.IsAny <ServerType>())).Returns(_httpClientMock.Object);

            var libraryRepository = new Mock <ILibraryRepository>();
            var service           = new MediaServerService(strategy.Object, _embyRepositoryMock.Object, _sessionServiceMock.Object, _settingsServiceMock.Object, _movieRepositoryMock.Object, _showRepositoryMock.Object, libraryRepository.Object);
            var result            = service.GetUserViewCount("1");

            result.Should().Be(12);

            _sessionServiceMock.Verify(x => x.GetPlayCountForUser("1"), Times.Once);
        }
        public void TestNewApiKey_Should_Return_False()
        {
            _httpClientMock      = new Mock <IHttpClient>();
            _embyRepositoryMock  = new Mock <IMediaServerRepository>();
            _movieRepositoryMock = new Mock <IMovieRepository>();
            _showRepositoryMock  = new Mock <IShowRepository>();
            _embyRepositoryMock  = new Mock <IMediaServerRepository>();
            _sessionServiceMock  = new Mock <ISessionService>();

            _httpClientMock.Setup(x => x.GetServerInfo()).Returns((ServerInfo)null);
            _httpClientMock.SetupSet(x => x.ApiKey  = "1234").Verifiable();
            _httpClientMock.SetupSet(x => x.BaseUrl = "localhost:9000").Verifiable();

            _httpClientMock.SetupGet(x => x.ApiKey).Returns("12345");
            _httpClientMock.SetupGet(x => x.BaseUrl).Returns("localhost:9001");

            var strategy = new Mock <IClientStrategy>();

            strategy.Setup(x => x.CreateHttpClient(It.IsAny <ServerType>())).Returns(_httpClientMock.Object);

            var libraryRepository = new Mock <ILibraryRepository>();
            var service           = new MediaServerService(strategy.Object, _embyRepositoryMock.Object, _sessionServiceMock.Object, _settingsServiceMock.Object, _movieRepositoryMock.Object, _showRepositoryMock.Object, libraryRepository.Object);
            var result            = service.TestNewApiKey("localhost:9000", "1234", ServerType.Emby);

            result.Should().BeFalse();

            _httpClientMock.VerifyGet(x => x.ApiKey, Times.Once);
            _httpClientMock.VerifyGet(x => x.BaseUrl, Times.Once);

            _httpClientMock.VerifySet(x => x.ApiKey  = "1234", Times.Once);
            _httpClientMock.VerifySet(x => x.BaseUrl = "localhost:9000", Times.Once);

            _httpClientMock.VerifySet(x => x.ApiKey  = "12345", Times.Once);
            _httpClientMock.VerifySet(x => x.BaseUrl = "localhost:9001", Times.Once);

            _httpClientMock.Verify(x => x.GetServerInfo(), Times.Once);
        }
Example #23
0
        private void KeepLive()
        {
            while (true)
            {
                try
                {
                    var dbRet = ORMHelper.Db.Select <VideoChannel>().ToList();
                    if (dbRet != null && dbRet.Count > 0)
                    {
                        foreach (var obj in dbRet)
                        {
                            var listRet = Common.Ldb.VideoOnlineInfo.FindOne(x =>
                                                                             x.MainId.Equals(obj.MainId) && x.MediaServerId.Equals(obj.MediaServerId));
                            if (obj != null && obj.AutoVideo.Equals(true) && obj.NoPlayerBreak.Equals(false) &&
                                obj.Enabled.Equals(true))
                            {
                                if (listRet == null)
                                {
                                    var mediaServer = Common.MediaServerList.FindLast(x =>
                                                                                      x.MediaServerId.Equals(obj.MediaServerId));
                                    if (mediaServer != null && mediaServer.IsKeeperRunning &&
                                        mediaServer.IsMediaServerRunning)
                                    {
                                        var streamLiveRet = MediaServerService.StreamLive(obj.MediaServerId, obj.MainId,
                                                                                          out ResponseStruct rs);
                                        if (!rs.Code.Equals(ErrorNumber.None) || streamLiveRet == null)
                                        {
                                            Logger.Warn(
                                                $"[{Common.LoggerHead}]->自动推流失败->{obj.MediaServerId}->{obj.MainId}");
                                        }
                                        else
                                        {
                                            Logger.Info(
                                                $"[{Common.LoggerHead}]->自动推流成功->{obj.MediaServerId}->{obj.MainId}");
                                        }
                                    }
                                }
                            }
                            else if (obj != null && obj.Enabled.Equals(false))
                            {
                                if (listRet != null)
                                {
                                    var mediaServer = Common.MediaServerList.FindLast(x =>
                                                                                      x.MediaServerId.Equals(obj.MediaServerId));
                                    if (mediaServer != null && mediaServer.IsKeeperRunning &&
                                        mediaServer.IsMediaServerRunning)
                                    {
                                        var streamLiveRet = MediaServerService.StreamStop(obj.MediaServerId, obj.MainId,
                                                                                          out ResponseStruct rs);
                                        if (!rs.Code.Equals(ErrorNumber.None) || streamLiveRet == null)
                                        {
                                            Logger.Warn(
                                                $"[{Common.LoggerHead}]->自动结束推流失败->{obj.MediaServerId}->{obj.MainId}");
                                        }
                                        else
                                        {
                                            Logger.Info(
                                                $"[{Common.LoggerHead}]->自动结束推流成功->{obj.MediaServerId}->{obj.MainId}");
                                        }
                                    }
                                }
                            }

                            Thread.Sleep(20);
                        }
                    }

                    Thread.Sleep(Common.AkStreamWebConfig.WaitEventTimeOutMSec);
                }
                catch
                {
                    //
                }
            }
        }
Example #24
0
        private void KeepRecord()
        {
            while (true)
            {
                ResponseStruct rs = null;

                var recordPlanList = RecordPlanService.GetRecordPlanList("", out rs);


                var videoChannelList = ORMHelper.Db.Select <VideoChannel>().Where(x => x.Enabled.Equals(true))
                                       .Where(x => !string.IsNullOrEmpty(x.RecordPlanName))
                                       .Where(x => x.AutoRecord.Equals(true)).ToList();
                if (rs.Code.Equals(ErrorNumber.None) && recordPlanList != null && recordPlanList.Count > 0)
                {
                    try
                    {
                        foreach (var obj in Common.VideoChannelMediaInfos)
                        {
                            if (obj != null && obj.MediaServerStreamInfo != null)
                            {
                                var videoChannel = videoChannelList.FindLast(x => x.MainId.Equals(obj.MainId));
                                if (videoChannel != null)
                                {
                                    //启用了自动录制
                                    var recordPlan =
                                        recordPlanList.FindLast(x => x.Name.Equals(videoChannel.RecordPlanName));
                                    if (recordPlan != null && recordPlan.Enable == true)
                                    {
                                        //说明绑定了录制模板
                                        var fileSize     = getRecordFileSize(videoChannel.MainId);     //得到文件总长度
                                        var fileDateList = getRecordFileDataList(videoChannel.MainId); //得到记录天数列表
                                        if (fileDateList == null)
                                        {
                                            fileDateList = new List <string>();
                                        }
                                        var  inRange = checkTimeRange(recordPlan);
                                        bool stopIt  = false;
                                        if (!inRange)
                                        {
                                            stopIt = true;
                                        }

                                        if (inRange && recordPlan.LimitDays >= fileDateList.Count &&
                                            recordPlan.LimitSpace >= fileSize)
                                        {
                                            stopIt = false;
                                        }

                                        if (inRange && (recordPlan.LimitDays < fileDateList.Count ||
                                                        recordPlan.LimitSpace < fileSize))
                                        {
                                            stopIt = true;
                                        }

                                        if (stopIt && obj.MediaServerStreamInfo.IsRecorded == true)
                                        {
                                            switch (recordPlan.OverStepPlan)
                                            {
                                            case OverStepPlan.StopDvr:
                                                string info =
                                                    $"自动停止录制文件条件被触发->{obj.MediaServerId}->{obj.MainId}->{videoChannel.RecordPlanName}";
                                                info += (recordPlan.LimitDays < fileDateList.Count)
                                                        ? $"限制录制文件天数:{recordPlan.LimitDays}<实际录制文件天数:{fileDateList.Count}"
                                                        : "";
                                                info +=
                                                    $"->限制录制空间:{recordPlan.LimitSpace}Bytes<实际录制空间:{fileSize}Bytes";
                                                info += !inRange ? "->超出录制模板规定的时间区间" : "";
                                                Logger.Info(
                                                    $"[{Common.LoggerHead}]->{info}");
                                                MediaServerService.StopRecord(videoChannel.MediaServerId,
                                                                              videoChannel.MainId, out rs);
                                                break;

                                            case OverStepPlan.DeleteFile:
                                                if (!inRange)
                                                {
                                                    string info3 = "超出录制模板规定的时间区间";
                                                    Logger.Info(
                                                        $"[{Common.LoggerHead}]->自动停止录制文件条件被触发->{info3}");
                                                    MediaServerService.StopRecord(videoChannel.MediaServerId,
                                                                                  videoChannel.MainId, out rs);
                                                }
                                                else
                                                {
                                                    string info2 =
                                                        $"自动删除录制文件条件被触发->{obj.MediaServerId}->{obj.MainId}->{videoChannel.RecordPlanName}";
                                                    info2 += (recordPlan.LimitDays < fileDateList.Count)
                                                            ? $"限制录制文件天数:{recordPlan.LimitDays}<实际录制文件天数:{fileDateList.Count}"
                                                            : "";
                                                    info2 +=
                                                        $"->限制录制空间:{recordPlan.LimitSpace}Bytes<实际录制空间:{fileSize}Bytes";
                                                    Logger.Info(
                                                        $"[{Common.LoggerHead}]->{info2}");
                                                    bool p = false;
                                                    if (recordPlan.LimitDays < fileDateList.Count)     //先一天一天删除
                                                    {
                                                        int?loopCount = fileDateList.Count - recordPlan.LimitDays;

                                                        List <string> willDeleteDays = new List <string>();
                                                        for (int i = 0; i < loopCount; i++)
                                                        {
                                                            willDeleteDays.Add(fileDateList[i] !);
                                                        }

                                                        DeleteFileByDay(willDeleteDays, obj.MediaServerStreamInfo);
                                                        p = true;
                                                    }

                                                    if (p)
                                                    {
                                                        fileSize = getRecordFileSize(videoChannel
                                                                                     .MainId); //删除完一天以后再取一下文件总长度
                                                    }

                                                    if (recordPlan.LimitSpace < fileSize)     //还大,再删除一个文件
                                                    {
                                                        deleteFileOneByOne(fileSize, obj.MediaServerStreamInfo,
                                                                           recordPlan);
                                                    }
                                                }

                                                break;
                                            }
                                        }
                                        else
                                        {
                                            if (obj.MediaServerStreamInfo.IsRecorded == false)
                                            {
                                                Logger.Info(
                                                    $"[{Common.LoggerHead}]->自动启动录制文件条件被触发->{obj.MediaServerId}->{obj.MainId}->{videoChannel.RecordPlanName}" +
                                                    $"限制录制文件天数:{recordPlan.LimitDays}>实际录制文件天数:{fileDateList.Count}->限制录制空间:{recordPlan.LimitSpace}Bytes>实际录制空间:{fileSize}Bytes" +
                                                    $"录制计划模板中时间区间被击中,开始录制音视频流");

                                                MediaServerService.StartRecord(videoChannel.MediaServerId,
                                                                               videoChannel.MainId, out rs);
                                            }
                                        }
                                    }
                                    else if (recordPlan != null && recordPlan.Enable == false)
                                    {
                                        if (obj.MediaServerStreamInfo.IsRecorded == true)
                                        {
                                            Logger.Info(
                                                $"[{Common.LoggerHead}]->自动停止录制条件被触发,结束录制音视频流->{obj.MediaServerId}->{obj.MainId}->{videoChannel.RecordPlanName}-录制计划模板已禁用");

                                            MediaServerService.StopRecord(videoChannel.MediaServerId,
                                                                          videoChannel.MainId, out rs);
                                        }
                                    }
                                    else if (recordPlan == null)
                                    {
                                        if (obj.MediaServerStreamInfo.IsRecorded == true)
                                        {
                                            Logger.Info(
                                                $"[{Common.LoggerHead}]->自动停止录制条件被触发,结束录制音视频流->{obj.MediaServerId}->{obj.MainId}->未绑定录制计划模板");

                                            MediaServerService.StopRecord(videoChannel.MediaServerId,
                                                                          videoChannel.MainId, out rs);
                                        }
                                    }
                                }
                            }
                        }
                    }
                    catch
                    {
                        //
                    }
                }


                Thread.Sleep(1000);
            }
        }