SOMS/Yunda.SOMS.DataMonitoringServer.Service/TimeWorkers/DownloadAndTranscodeLinkResult.cs

108 lines
5.3 KiB
C#
Raw Normal View History

2024-08-21 16:50:14 +08:00
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
{
/// <summary>
/// 下载联动录像
/// </summary>
[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}", "异常信息");
}
}
}
}
}