From 9e051e810d039842a3cc5917cf5e70b18ac139cc Mon Sep 17 00:00:00 2001 From: LiuXin Date: Fri, 29 Aug 2025 16:14:32 +0800 Subject: [PATCH] =?UTF-8?q?=E4=BF=AE=E6=94=B9=E4=BA=86=E4=B8=80=E4=BA=9B?= =?UTF-8?q?=E4=B8=9C=E8=A5=BF?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../DaHua/RequestDto/DahuaVideoQueryDto.cs | 11 ++-- .../DaHua/VideoManageController.cs | 64 +++++++++++-------- .../Dahvision/DahuaGeneralCtlService.cs | 2 +- 3 files changed, 42 insertions(+), 35 deletions(-) diff --git a/WeiCloud.Fusion/Common.SharedService/Common.Shared.Application/DaHua/RequestDto/DahuaVideoQueryDto.cs b/WeiCloud.Fusion/Common.SharedService/Common.Shared.Application/DaHua/RequestDto/DahuaVideoQueryDto.cs index 7ec36c6..46767cf 100644 --- a/WeiCloud.Fusion/Common.SharedService/Common.Shared.Application/DaHua/RequestDto/DahuaVideoQueryDto.cs +++ b/WeiCloud.Fusion/Common.SharedService/Common.Shared.Application/DaHua/RequestDto/DahuaVideoQueryDto.cs @@ -1,7 +1,4 @@ -using System; -using System.Collections.Generic; -using System.Text; -using System.Text.Json.Serialization; +using System.Text.Json.Serialization; namespace Common.Shared.Application.DaHua { @@ -324,20 +321,20 @@ namespace Common.Shared.Application.DaHua /// 注意:月份、日期、时间无前导零 /// [JsonPropertyName("starttime")] - public DateTime Starttime { get; set; } + public required string Starttime { get; set; } /// /// 结束时间,格式:yyyy_M_d_HH_mm_ss(如:2023_3_23_18_48_36) /// 注意:月份、日期、时间无前导零 /// [JsonPropertyName("endtime")] - public DateTime Endtime { get; set; } + public required string Endtime { get; set; } /// /// 录像回放类型:2-设备录像,3-中心录像 /// [JsonPropertyName("videoType")] - public string VideoType { get; set; } + public required string VideoType { get; set; } /// /// 鉴权 Token(access_token),来自认证接口 diff --git a/WeiCloud.Fusion/VideoService/Video.API/Controllers/DaHua/VideoManageController.cs b/WeiCloud.Fusion/VideoService/Video.API/Controllers/DaHua/VideoManageController.cs index ae228ae..1980c44 100644 --- a/WeiCloud.Fusion/VideoService/Video.API/Controllers/DaHua/VideoManageController.cs +++ b/WeiCloud.Fusion/VideoService/Video.API/Controllers/DaHua/VideoManageController.cs @@ -1,4 +1,5 @@ using Common.Shared.Application.DaHua; +using Common.Shared.DomainService; using Microsoft.AspNetCore.Mvc; using Video.DomainService; using WeiCloud.Core.BaseModels; @@ -15,6 +16,7 @@ namespace Video.API.Controllers.DaHua private readonly ILogger _logger; private readonly IDahuaGeneralCtlService _dahGeneralCtlService; private readonly IConfiguration _configuration; + private readonly ITokenProviderService _tokenProviderService; /// /// 构造 @@ -22,11 +24,12 @@ namespace Video.API.Controllers.DaHua /// /// /// - public VideoManageController(ILogger logger, IDahuaGeneralCtlService dahGeneralCtlService, IConfiguration configuration) + public VideoManageController(ILogger logger, IDahuaGeneralCtlService dahGeneralCtlService, IConfiguration configuration, ITokenProviderService tokenProviderService) { _logger = logger; _dahGeneralCtlService = dahGeneralCtlService; _configuration = configuration; + _tokenProviderService = tokenProviderService; } #region 大华视频处理 @@ -91,40 +94,47 @@ namespace Video.API.Controllers.DaHua /// /// /// - [HttpGet("download/dh")] - public async Task DownloadVideoAsync(PlayDownloadReqDto dto) + [HttpPost("download/dh")] + public async Task DownloadVideoAsync(PlayDownloadReqDto dto) { + var clientId = _configuration["DahuaAuth:ClientId"]; + var token = await _tokenProviderService.GetTokenAsync(clientId!); + if (!_tokenProviderService.IsTokenValid(token)) + { + _logger.LogWarning("通道分页查询失败:token无效"); + return StatusCode(500, new { success = false, message = "下载失败" }); + } var remoteUrl = - $"https://{_configuration["DahHost"]}/evo-apigw/evo-httpnode/vod/cam/download.mp4" + + $"https://{_configuration["DahuaAuth:Host"]}/evo-apigw/evo-httpnode/vod/cam/download.mp4" + $"?vcuid={dto.Vcuid}" + $"&subtype=1" + $"&starttime={dto.Starttime:yyyy_MM_dd_HH_mm_ss}" + $"&endtime={dto.Endtime:yyyy_MM_dd_HH_mm_ss}" + $"&videoType={dto.VideoType}" + - $"&token={dto.Token}" + + $"&token={token}" + $"&recordType={dto.RecordType}"; - return await Task.FromResult(remoteUrl); - //try - //{ - // var handler = new HttpClientHandler - // { - // ServerCertificateCustomValidationCallback = (_, _, _, _) => true - // }; - - // using var http = new HttpClient(handler); - // var resp = await http.GetAsync(remoteUrl, HttpCompletionOption.ResponseHeadersRead); - - // resp.EnsureSuccessStatusCode(); - - // var stream = await resp.Content.ReadAsStreamAsync(); - // var contentType = "video/mp4"; - - // return File(stream, contentType, "video.mp4"); - //} - //catch (Exception ex) - //{ - // return StatusCode(500, new { success = false, message = "下载失败", error = ex.Message }); - //} + // return await Task.FromResult(remoteUrl); + try + { + var handler = new HttpClientHandler + { + ServerCertificateCustomValidationCallback = (_, _, _, _) => true + }; + + using var http = new HttpClient(handler); + var resp = await http.GetAsync(remoteUrl, HttpCompletionOption.ResponseHeadersRead); + + resp.EnsureSuccessStatusCode(); + + var stream = await resp.Content.ReadAsStreamAsync(); + var contentType = "video/mp4"; + + return File(stream, contentType, "video.mp4"); + } + catch (Exception ex) + { + return StatusCode(500, new { success = false, message = "下载失败", error = ex.Message }); + } } /// diff --git a/WeiCloud.Fusion/VideoService/Video.DomainService/Dahvision/DahuaGeneralCtlService.cs b/WeiCloud.Fusion/VideoService/Video.DomainService/Dahvision/DahuaGeneralCtlService.cs index 9eb9948..5d1949a 100644 --- a/WeiCloud.Fusion/VideoService/Video.DomainService/Dahvision/DahuaGeneralCtlService.cs +++ b/WeiCloud.Fusion/VideoService/Video.DomainService/Dahvision/DahuaGeneralCtlService.cs @@ -496,7 +496,7 @@ namespace Video.DomainService { url = dto.IpAddress; } - return url + $"/evo-apigw/evo-httpnode/vod/cam/download.mp4?vcuid={dto.Vcuid}&subtype={dto.Subtype}&starttime={dto.StartTime}endtime={dto.EndTime}&videoType={dto.VideoType}&token={token}&recordType={dto.RecordType}"; + return $"https://" + url + $" /evo-apigw/evo-httpnode/vod/cam/download.mp4?vcuid={dto.Vcuid}&subtype={dto.Subtype}&starttime={dto.StartTime}endtime={dto.EndTime}&videoType={dto.VideoType}&token={token}&recordType={dto.RecordType}"; } } } \ No newline at end of file -- 2.36.2