|
|
|
@ -4,6 +4,7 @@ using Microsoft.Extensions.Configuration; |
|
|
|
using Microsoft.Extensions.Logging; |
|
|
|
using Microsoft.Extensions.Logging; |
|
|
|
using System.Net.Http.Json; |
|
|
|
using System.Net.Http.Json; |
|
|
|
using System.Text.Json; |
|
|
|
using System.Text.Json; |
|
|
|
|
|
|
|
using Video.DomainService.Dahvision; |
|
|
|
|
|
|
|
|
|
|
|
namespace Video.DomainService |
|
|
|
namespace Video.DomainService |
|
|
|
{ |
|
|
|
{ |
|
|
|
@ -48,15 +49,18 @@ namespace Video.DomainService |
|
|
|
|
|
|
|
|
|
|
|
try |
|
|
|
try |
|
|
|
{ |
|
|
|
{ |
|
|
|
// 2) Token:优先入参,其次缓存/获取(建议返回完整的 "Bearer xxx") |
|
|
|
|
|
|
|
var clientId = _configuration["DahuaAuth:ClientId"]; |
|
|
|
var clientId = _configuration["DahuaAuth:ClientId"]; |
|
|
|
var token = await _tokenProviderService.GetTokenAsync(clientId!); |
|
|
|
var token = await _tokenProviderService.GetTokenAsync(clientId!); |
|
|
|
if (_tokenProviderService.IsTokenValid(token)) |
|
|
|
if (!_tokenProviderService.IsTokenValid(token)) |
|
|
|
{ |
|
|
|
{ |
|
|
|
_logger.LogWarning("hls等录像回放:token无效"); |
|
|
|
_logger.LogWarning("hls等录像回放:token无效"); |
|
|
|
return new DaHApiResult<UrlDataDto> { Success = false, Code = "1009", Msg = "token无效" }; |
|
|
|
return new DaHApiResult<UrlDataDto> { Success = false, Code = "1009", Msg = "token无效" }; |
|
|
|
} |
|
|
|
} |
|
|
|
var url = $"https://{_configuration["DahuaAuth:Host"]}/evo-apigw/admin/API/video/stream/record"; |
|
|
|
var url = $"https://{_configuration["DahuaAuth:Host"]}/evo-apigw/admin/API/video/stream/record"; |
|
|
|
|
|
|
|
if (dto.IpAddress != null) |
|
|
|
|
|
|
|
{ |
|
|
|
|
|
|
|
url = $"https://{dto.IpAddress}/evo-apigw/admin/API/video/stream/record"; |
|
|
|
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
// 3) 构造请求(把 dto 放进 Body),并用 SendAsync 发送,才能带上头 |
|
|
|
// 3) 构造请求(把 dto 放进 Body),并用 SendAsync 发送,才能带上头 |
|
|
|
using var req = new HttpRequestMessage(HttpMethod.Post, url) |
|
|
|
using var req = new HttpRequestMessage(HttpMethod.Post, url) |
|
|
|
@ -80,7 +84,12 @@ namespace Video.DomainService |
|
|
|
_logger.LogWarning("录像请求业务失败: {Body}", body); |
|
|
|
_logger.LogWarning("录像请求业务失败: {Body}", body); |
|
|
|
return new DaHApiResult<UrlDataDto> { Success = false, Code = "1008", Msg = "录像请求失败" }; |
|
|
|
return new DaHApiResult<UrlDataDto> { Success = false, Code = "1008", Msg = "录像请求失败" }; |
|
|
|
} |
|
|
|
} |
|
|
|
result.Data!.Url = result.Data.Url + "?token=" + token; |
|
|
|
result.Data!.Url = UrlHostReplacer.ReplaceHost( |
|
|
|
|
|
|
|
result.Data.Url, |
|
|
|
|
|
|
|
dto.IpAddress, |
|
|
|
|
|
|
|
_configuration, |
|
|
|
|
|
|
|
"Time" |
|
|
|
|
|
|
|
) + "?token=" + result.Data.Token; |
|
|
|
return result; |
|
|
|
return result; |
|
|
|
} |
|
|
|
} |
|
|
|
catch (Exception ex) |
|
|
|
catch (Exception ex) |
|
|
|
@ -107,13 +116,16 @@ namespace Video.DomainService |
|
|
|
|
|
|
|
|
|
|
|
var clientId = _configuration["DahuaAuth:ClientId"]; |
|
|
|
var clientId = _configuration["DahuaAuth:ClientId"]; |
|
|
|
var token = await _tokenProviderService.GetTokenAsync(clientId!); |
|
|
|
var token = await _tokenProviderService.GetTokenAsync(clientId!); |
|
|
|
if (_tokenProviderService.IsTokenValid(token)) |
|
|
|
if (!_tokenProviderService.IsTokenValid(token)) |
|
|
|
{ |
|
|
|
{ |
|
|
|
_logger.LogWarning("查询普通录像信息列表:token无效"); |
|
|
|
_logger.LogWarning("查询普通录像信息列表:token无效"); |
|
|
|
return new DaHApiResult<RecordsResDto> { Success = false, Code = "1009", Msg = "token无效" }; |
|
|
|
return new DaHApiResult<RecordsResDto> { Success = false, Code = "1009", Msg = "token无效" }; |
|
|
|
} |
|
|
|
} |
|
|
|
var url = $"https://{_configuration["DahuaAuth:Host"]}/evo-apigw/admin/API/SS/Record/QueryRecords"; |
|
|
|
var url = $"https://{_configuration["DahuaAuth:Host"]}/evo-apigw/admin/API/SS/Record/QueryRecords"; |
|
|
|
|
|
|
|
if (dto.IpAddress != null) |
|
|
|
|
|
|
|
{ |
|
|
|
|
|
|
|
url = $"https://{dto.IpAddress}/evo-apigw/admin/API/SS/Record/QueryRecords"; |
|
|
|
|
|
|
|
} |
|
|
|
using var req = new HttpRequestMessage(HttpMethod.Post, url) |
|
|
|
using var req = new HttpRequestMessage(HttpMethod.Post, url) |
|
|
|
{ |
|
|
|
{ |
|
|
|
Content = JsonContent.Create(dto) // 关键:把 dto 放进请求体 |
|
|
|
Content = JsonContent.Create(dto) // 关键:把 dto 放进请求体 |
|
|
|
@ -164,7 +176,7 @@ namespace Video.DomainService |
|
|
|
|
|
|
|
|
|
|
|
var clientId = _configuration["DahuaAuth:ClientId"]; |
|
|
|
var clientId = _configuration["DahuaAuth:ClientId"]; |
|
|
|
var token = await _tokenProviderService.GetTokenAsync(clientId!); |
|
|
|
var token = await _tokenProviderService.GetTokenAsync(clientId!); |
|
|
|
if (_tokenProviderService.IsTokenValid(token)) |
|
|
|
if (!_tokenProviderService.IsTokenValid(token)) |
|
|
|
{ |
|
|
|
{ |
|
|
|
_logger.LogWarning("通道分页查询失败:token无效"); |
|
|
|
_logger.LogWarning("通道分页查询失败:token无效"); |
|
|
|
return new DaHApiResult<PageInfoDto> { Success = false, Code = "1009", Msg = "token无效" }; |
|
|
|
return new DaHApiResult<PageInfoDto> { Success = false, Code = "1009", Msg = "token无效" }; |
|
|
|
@ -225,7 +237,7 @@ namespace Video.DomainService |
|
|
|
// 2) Token:优先用入参;否则走缓存/获取(建议返回已带前缀的 "Bearer xxx") |
|
|
|
// 2) Token:优先用入参;否则走缓存/获取(建议返回已带前缀的 "Bearer xxx") |
|
|
|
var clientId = _configuration["DahuaAuth:ClientId"]; |
|
|
|
var clientId = _configuration["DahuaAuth:ClientId"]; |
|
|
|
var token = await _tokenProviderService.GetTokenAsync(clientId!); |
|
|
|
var token = await _tokenProviderService.GetTokenAsync(clientId!); |
|
|
|
if (_tokenProviderService.IsTokenValid(token)) |
|
|
|
if (!_tokenProviderService.IsTokenValid(token)) |
|
|
|
{ |
|
|
|
{ |
|
|
|
_logger.LogWarning(" HLS实时流请求失败:token无效"); |
|
|
|
_logger.LogWarning(" HLS实时流请求失败:token无效"); |
|
|
|
return new DaHApiResult<UrlDataDto> { Success = false, Code = "1009", Msg = "token无效" }; |
|
|
|
return new DaHApiResult<UrlDataDto> { Success = false, Code = "1009", Msg = "token无效" }; |
|
|
|
@ -233,6 +245,11 @@ namespace Video.DomainService |
|
|
|
|
|
|
|
|
|
|
|
var url = $"https://{_configuration["DahuaAuth:Host"]}/evo-apigw/admin/API/video/stream/realtime"; |
|
|
|
var url = $"https://{_configuration["DahuaAuth:Host"]}/evo-apigw/admin/API/video/stream/realtime"; |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
if (dto.IpAddress != null) |
|
|
|
|
|
|
|
{ |
|
|
|
|
|
|
|
url = $"https://{dto.IpAddress}/evo-apigw/admin/API/video/stream/realtime"; |
|
|
|
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
// 3) 用 HttpRequestMessage 发送,才能带上自定义头 |
|
|
|
// 3) 用 HttpRequestMessage 发送,才能带上自定义头 |
|
|
|
using var req = new HttpRequestMessage(HttpMethod.Post, url) |
|
|
|
using var req = new HttpRequestMessage(HttpMethod.Post, url) |
|
|
|
{ |
|
|
|
{ |
|
|
|
@ -255,7 +272,12 @@ namespace Video.DomainService |
|
|
|
_logger.LogWarning("实时流请求业务失败: {Body}", body); |
|
|
|
_logger.LogWarning("实时流请求业务失败: {Body}", body); |
|
|
|
return new DaHApiResult<UrlDataDto> { Success = false, Code = "1010", Msg = "实时流请求失败" }; |
|
|
|
return new DaHApiResult<UrlDataDto> { Success = false, Code = "1010", Msg = "实时流请求失败" }; |
|
|
|
} |
|
|
|
} |
|
|
|
result.Data!.Url = result.Data.Url + "?token=" + token; |
|
|
|
result.Data!.Url = UrlHostReplacer.ReplaceHost( |
|
|
|
|
|
|
|
result.Data.Url, |
|
|
|
|
|
|
|
dto.IpAddress, |
|
|
|
|
|
|
|
_configuration, |
|
|
|
|
|
|
|
"Real" |
|
|
|
|
|
|
|
) + "?token=" + result.Data.Token; |
|
|
|
return result; |
|
|
|
return result; |
|
|
|
} |
|
|
|
} |
|
|
|
catch (Exception ex) |
|
|
|
catch (Exception ex) |
|
|
|
@ -335,13 +357,17 @@ namespace Video.DomainService |
|
|
|
// 先用缓存里的 token,不足5分钟过期再刷新(按你之前的口径来) |
|
|
|
// 先用缓存里的 token,不足5分钟过期再刷新(按你之前的口径来) |
|
|
|
var clientId = _configuration["DahuaAuth:ClientId"]; |
|
|
|
var clientId = _configuration["DahuaAuth:ClientId"]; |
|
|
|
var token = await _tokenProviderService.GetTokenAsync(clientId!); |
|
|
|
var token = await _tokenProviderService.GetTokenAsync(clientId!); |
|
|
|
if (_tokenProviderService.IsTokenValid(token)) |
|
|
|
if (!_tokenProviderService.IsTokenValid(token)) |
|
|
|
{ |
|
|
|
{ |
|
|
|
_logger.LogWarning("rtsp录像回放:token无效"); |
|
|
|
_logger.LogWarning("rtsp录像回放:token无效"); |
|
|
|
return new DaHApiResult<UrlDataDto> { Success = false, Code = "1009", Msg = "token无效" }; |
|
|
|
return new DaHApiResult<UrlDataDto> { Success = false, Code = "1009", Msg = "token无效" }; |
|
|
|
} |
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
var url = $"https://{_configuration["DahuaAuth:Host"]}/evo-apigw/admin/API/SS/Playback/StartPlaybackByTime"; |
|
|
|
var url = $"https://{_configuration["DahuaAuth:Host"]}/evo-apigw/admin/API/SS/Playback/StartPlaybackByTime"; |
|
|
|
|
|
|
|
if (dto.IpAddress != null) |
|
|
|
|
|
|
|
{ |
|
|
|
|
|
|
|
url = $"https://{dto.IpAddress}/evo-apigw/admin/API/SS/Playback/StartPlaybackByTime"; |
|
|
|
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
using var req = new HttpRequestMessage(HttpMethod.Post, url) |
|
|
|
using var req = new HttpRequestMessage(HttpMethod.Post, url) |
|
|
|
{ |
|
|
|
{ |
|
|
|
@ -366,7 +392,12 @@ namespace Video.DomainService |
|
|
|
_logger.LogWarning("录像请求业务失败: {Body}", body); |
|
|
|
_logger.LogWarning("录像请求业务失败: {Body}", body); |
|
|
|
return new DaHApiResult<UrlDataDto> { Success = false, Code = "1008", Msg = "录像请求失败" }; |
|
|
|
return new DaHApiResult<UrlDataDto> { Success = false, Code = "1008", Msg = "录像请求失败" }; |
|
|
|
} |
|
|
|
} |
|
|
|
result.Data!.Url = result.Data.Url.Replace(_configuration["DahuaAuth:TimeRootHost"], _configuration["DahuaAuth:TimeReplaceHost"]) + "?token=" + result.Data.Token; |
|
|
|
result.Data!.Url = UrlHostReplacer.ReplaceHost( |
|
|
|
|
|
|
|
result.Data.Url, |
|
|
|
|
|
|
|
dto.IpAddress, |
|
|
|
|
|
|
|
_configuration, |
|
|
|
|
|
|
|
"Time" |
|
|
|
|
|
|
|
) + "?token=" + result.Data.Token; |
|
|
|
return result; |
|
|
|
return result; |
|
|
|
} |
|
|
|
} |
|
|
|
catch (Exception ex) |
|
|
|
catch (Exception ex) |
|
|
|
@ -393,13 +424,17 @@ namespace Video.DomainService |
|
|
|
|
|
|
|
|
|
|
|
var clientId = _configuration["DahuaAuth:ClientId"]; |
|
|
|
var clientId = _configuration["DahuaAuth:ClientId"]; |
|
|
|
var token = await _tokenProviderService.GetTokenAsync(clientId!); |
|
|
|
var token = await _tokenProviderService.GetTokenAsync(clientId!); |
|
|
|
if (_tokenProviderService.IsTokenValid(token)) |
|
|
|
if (!_tokenProviderService.IsTokenValid(token)) |
|
|
|
{ |
|
|
|
{ |
|
|
|
_logger.LogWarning("rtsp实时预览接口方式:token无效"); |
|
|
|
_logger.LogWarning("rtsp实时预览接口方式:token无效"); |
|
|
|
return new DaHApiResult<UrlDataDto> { Success = false, Code = "1009", Msg = "token无效" }; |
|
|
|
return new DaHApiResult<UrlDataDto> { Success = false, Code = "1009", Msg = "token无效" }; |
|
|
|
} |
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
var url = $"https://{_configuration["DahuaAuth:Host"]}/evo-apigw/admin/API/MTS/Video/StartVideo"; |
|
|
|
var url = $"https://{_configuration["DahuaAuth:Host"]}/evo-apigw/admin/API/MTS/Video/StartVideo"; |
|
|
|
|
|
|
|
if (dto.IpAddress != null) |
|
|
|
|
|
|
|
{ |
|
|
|
|
|
|
|
url = $"https://{dto.IpAddress}/evo-apigw/admin/API/MTS/Video/StartVideo"; |
|
|
|
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
using var req = new HttpRequestMessage(HttpMethod.Post, url) |
|
|
|
using var req = new HttpRequestMessage(HttpMethod.Post, url) |
|
|
|
{ |
|
|
|
{ |
|
|
|
@ -424,7 +459,12 @@ namespace Video.DomainService |
|
|
|
_logger.LogWarning("实时流请求业务失败: {Body}", body); |
|
|
|
_logger.LogWarning("实时流请求业务失败: {Body}", body); |
|
|
|
return new DaHApiResult<UrlDataDto> { Success = false, Code = "1010", Msg = "实时流请求失败" }; |
|
|
|
return new DaHApiResult<UrlDataDto> { Success = false, Code = "1010", Msg = "实时流请求失败" }; |
|
|
|
} |
|
|
|
} |
|
|
|
result.Data!.Url = result.Data.Url.Replace(_configuration["DahuaAuth:RealRootHost"], _configuration["DahuaAuth:RealReplaceHost"]) + "?token=" + result.Data!.Token; |
|
|
|
result.Data!.Url = UrlHostReplacer.ReplaceHost( |
|
|
|
|
|
|
|
result.Data.Url, |
|
|
|
|
|
|
|
dto.IpAddress, |
|
|
|
|
|
|
|
_configuration, |
|
|
|
|
|
|
|
"Real" |
|
|
|
|
|
|
|
) + "?token=" + result.Data.Token; |
|
|
|
return result; |
|
|
|
return result; |
|
|
|
} |
|
|
|
} |
|
|
|
catch (Exception ex) |
|
|
|
catch (Exception ex) |
|
|
|
@ -444,13 +484,18 @@ namespace Video.DomainService |
|
|
|
{ |
|
|
|
{ |
|
|
|
var clientId = _configuration["DahuaAuth:ClientId"]; |
|
|
|
var clientId = _configuration["DahuaAuth:ClientId"]; |
|
|
|
var token = await _tokenProviderService.GetTokenAsync(clientId!); |
|
|
|
var token = await _tokenProviderService.GetTokenAsync(clientId!); |
|
|
|
if (_tokenProviderService.IsTokenValid(token)) |
|
|
|
if (!_tokenProviderService.IsTokenValid(token)) |
|
|
|
{ |
|
|
|
{ |
|
|
|
_logger.LogWarning("下载:token无效"); |
|
|
|
_logger.LogWarning("下载:token无效"); |
|
|
|
return "下载地址无效"; |
|
|
|
return "下载地址无效"; |
|
|
|
} |
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
return _configuration["DahuaAuth:Host"] + $"/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}"; |
|
|
|
var url = _configuration["DahuaAuth:Host"]; |
|
|
|
|
|
|
|
if (dto.IpAddress != null) |
|
|
|
|
|
|
|
{ |
|
|
|
|
|
|
|
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}"; |
|
|
|
} |
|
|
|
} |
|
|
|
} |
|
|
|
} |
|
|
|
} |
|
|
|
} |