using Quartz; using System; using System.IO; using System.Threading; using System.Threading.Tasks; using VideoSurveillanceAdapter; using Yunda.ISAS.DataMonitoringServer.DataAnalysis; using Yunda.ISAS.DataMonitoringServer.DataAnalysis.Model; using YunDa.ISAS.Redis.Entities.LinkageCategory; namespace Yunda.ISAS.DataMonitoringServer.TimeWorkers { /// /// 下载联动录像 /// [DisallowConcurrentExecution] public class DownloadAndTranscodeLinkResult : IJob { public async Task Execute(IJobExecutionContext context) { return; if (TimeWorkService._redisDataRepository.LinkageResultInfoRedis != null) { try { //var redis = MonitoringDataService.SingleInstance.RedisCamAuthRepository.LinkageResultInfoRedis; var last = await TimeWorkService._redisDataRepository.LinkageResultInfoRedis.GetListTailDataAsync(nameof(LinkageResultInfoRedis)); if (last == null) { return; } while (DateTime.Now - last.DateTime >= TimeSpan.FromMinutes(5)) { var data = await TimeWorkService._redisDataRepository.LinkageResultInfoRedis.ListRightPopAsync(nameof(LinkageResultInfoRedis)); VideoPlayer videoPlayer = new VideoPlayer(); CameraBrand cb = CameraBrand.None; Enum.TryParse(data.VideoDevOutput.Parent.ManufacturerInfo.ManufacturerCode, out cb); if (cb == CameraBrand.None) { MonitoringEventBus.LogHandler("[" + data.VideoDevOutput.Parent.DevName + "]NVR厂商品牌不正确!", "摄像头error"); return; } videoPlayer.CameraConfigure = new CameraConfigure { ID = data.VideoDevOutput.Parent.Id.ToString(), Name = data.VideoDevOutput.Parent.DevName, Ip = data.VideoDevOutput.Parent.IP, Port = (int)data.VideoDevOutput.Parent.Port, UserName = data.VideoDevOutput.Parent.DevUserName, Password = data.VideoDevOutput.Parent.DevPassword, IsRecordVideo = false, //VideoPath = @".\Video\", //CapturePath = @".\Capture\", CameraBrand = cb, //PlayChannel = Convert.ToInt32(camera.ChannelNo) }; var player = TimeWorkService._cameraDataCenter.FindCamera(videoPlayer); if (player == null) { var isloginSuccess = videoPlayer.LoginCamera(); if (isloginSuccess) { TimeWorkService._cameraDataCenter.CameraCollection.Add(videoPlayer); } else { MonitoringEventBus.LogHandler($"{videoPlayer.CameraConfigure.Name}登陆失败", "异常信息"); return; } } else { videoPlayer = player; } AutoResetEvent autoResetEvent = new AutoResetEvent(true); DownloadFileCallBack downloadFileCallBack = arg => { if (arg.Progress == 100) { autoResetEvent.Set(); } }; var path = $"./RecordVideo/{data.VideoDevOutput.DevName}_{data.PresetPointOutput.Name}_{data.DateTime.Ticks}.mp4"; videoPlayer.DownloadFileByTime(path, data.LinkageResultOuput.LinkageStartTime - TimeSpan.FromSeconds(10), data.LinkageResultOuput.LinkageStartTime + TimeSpan.FromSeconds(data.Duration), downloadFileCallBack, data.VideoDevOutput.ChannelNo ); autoResetEvent.WaitOne(); autoResetEvent.Dispose(); string result = TimeWorkService._webApiRequest.ResumeFile(ConstantModel.RequestLinkageResultFileUploadUri, path, data.RelativePath, 0, 1024 * 128); MonitoringEventBus.LogHandler($"{videoPlayer.CameraConfigure.Name}上传{result}", "上传联动录像信息"); if (File.Exists(path)) { File.Delete(path); } last = await TimeWorkService._redisDataRepository.LinkageResultInfoRedis.GetListTailDataAsync(nameof(LinkageResultInfoRedis)); } } catch (Exception ex) { MonitoringEventBus.LogHandler($"上传联动录像信息异常:{ex.Message}", "异常信息"); } } } } }