|
|
|
|
@ -0,0 +1,199 @@ |
|
|
|
|
using Microsoft.Extensions.Configuration; |
|
|
|
|
using Microsoft.Extensions.Logging; |
|
|
|
|
using Video.Application; |
|
|
|
|
|
|
|
|
|
namespace Video.DomainService |
|
|
|
|
{ |
|
|
|
|
public class RootVideoPlayBackService : IRootVideoPlaybackService |
|
|
|
|
{ |
|
|
|
|
private readonly ILogger<RootVideoPlayBackService> _logger; |
|
|
|
|
private readonly IConfiguration _cfg; |
|
|
|
|
|
|
|
|
|
private readonly IDahuaGeneralCtlService _dahuaGeneralCtlService; |
|
|
|
|
|
|
|
|
|
/// <summary> |
|
|
|
|
/// 构造函数 |
|
|
|
|
/// </summary> |
|
|
|
|
/// <param name="logger"></param> |
|
|
|
|
public RootVideoPlayBackService(ILogger<RootVideoPlayBackService> logger, IConfiguration configuration, IDahuaGeneralCtlService dahuaGeneralCtlService) |
|
|
|
|
{ |
|
|
|
|
_logger = logger; |
|
|
|
|
_cfg = configuration; |
|
|
|
|
|
|
|
|
|
_dahuaGeneralCtlService = dahuaGeneralCtlService; |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
#region 大华视频处理 |
|
|
|
|
|
|
|
|
|
/// <summary> |
|
|
|
|
/// 大华回放接口 |
|
|
|
|
/// </summary> |
|
|
|
|
/// <param name="dto"></param> |
|
|
|
|
/// <returns></returns> |
|
|
|
|
/// <exception cref="NotImplementedException"></exception> |
|
|
|
|
public async Task<ApiResult<UrlDataDto>> GetDaHRecordVideoUrl(PlaybackReqDto dto) |
|
|
|
|
{ |
|
|
|
|
ApiResult<UrlDataDto> result = new ApiResult<UrlDataDto>() { Code = 200, Msg = "接口调用成功" }; |
|
|
|
|
|
|
|
|
|
var urlReult = await _dahuaGeneralCtlService.RecordVideoUrl(dto); |
|
|
|
|
if (!urlReult.Success) |
|
|
|
|
{ |
|
|
|
|
result.Code = 500; |
|
|
|
|
result.Msg = urlReult.Msg; |
|
|
|
|
_logger.LogWarning("大华录像回放接口调用失败:{Msg}", urlReult.Msg); |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
result.Data = urlReult.Data; |
|
|
|
|
|
|
|
|
|
return result; |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
/// <summary> |
|
|
|
|
/// 大华的鉴权 |
|
|
|
|
/// </summary> |
|
|
|
|
/// <param name="dto"></param> |
|
|
|
|
/// <returns></returns> |
|
|
|
|
public async Task<ApiResult<string>> GetDaHToken(LoginRequestDto dto) |
|
|
|
|
{ |
|
|
|
|
ApiResult<string> result = new() { Code = 200, Msg = "接口调用成功" }; |
|
|
|
|
//1. 获取公钥 |
|
|
|
|
DaHApiResult<PublicKeyDto> publicKeyResult = await _dahuaGeneralCtlService.GetPublicKey(); |
|
|
|
|
if (!publicKeyResult.Success) |
|
|
|
|
{ |
|
|
|
|
result.Code = 500; |
|
|
|
|
result.Msg = publicKeyResult.Msg; |
|
|
|
|
_logger.LogWarning("获取大华公钥失败:{Msg}", publicKeyResult.Msg); |
|
|
|
|
} |
|
|
|
|
//2. 鉴权 |
|
|
|
|
dto.PublicKey = publicKeyResult.Data.PublicKey; |
|
|
|
|
|
|
|
|
|
DaHApiResult<LoginResDto> loginResult = await _dahuaGeneralCtlService.GetToken(dto); |
|
|
|
|
if (!loginResult.Success) |
|
|
|
|
{ |
|
|
|
|
result.Code = 500; |
|
|
|
|
result.Msg = loginResult.Msg; |
|
|
|
|
_logger.LogWarning("大华鉴权失败:{Msg}", loginResult.Msg); |
|
|
|
|
return result; |
|
|
|
|
} |
|
|
|
|
//大华的规则 |
|
|
|
|
result.Data = loginResult.Data.AccessToken; |
|
|
|
|
TokenEntry refreshed = new TokenEntry |
|
|
|
|
{ |
|
|
|
|
AccessToken = result.Data, |
|
|
|
|
RefreshToken = result.Data, |
|
|
|
|
ExpireAt = DateTimeOffset.UtcNow.AddSeconds(120) |
|
|
|
|
}; |
|
|
|
|
TokenCache.TokenMap[dto.ClientId] = refreshed; |
|
|
|
|
return result; |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
/// <summary> |
|
|
|
|
/// 大华实时 |
|
|
|
|
/// </summary> |
|
|
|
|
/// <param name="dto"></param> |
|
|
|
|
/// <returns></returns> |
|
|
|
|
/// <exception cref="NotImplementedException"></exception> |
|
|
|
|
public async Task<ApiResult<UrlDataDto>> GetRealtimeUrl(StreamReqDto dto) |
|
|
|
|
{ |
|
|
|
|
ApiResult<UrlDataDto> result = new ApiResult<UrlDataDto>() { Code = 200, Msg = "接口调用成功" }; |
|
|
|
|
var urlReult = await _dahuaGeneralCtlService.RealtimeStreamUrl(dto); |
|
|
|
|
if (!urlReult.Success) |
|
|
|
|
{ |
|
|
|
|
result.Code = 500; |
|
|
|
|
result.Msg = urlReult.Msg; |
|
|
|
|
_logger.LogWarning("大华实时视频接口调用失败:{Msg}", urlReult.Msg); |
|
|
|
|
} |
|
|
|
|
result.Data = urlReult.Data; |
|
|
|
|
return result; |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
/// <summary> |
|
|
|
|
/// 大华设备通道分页查询 |
|
|
|
|
/// </summary> |
|
|
|
|
/// <param name="dto"></param> |
|
|
|
|
/// <returns></returns> |
|
|
|
|
public async Task<ApiResult<PageInfoDto>> GetChannelCodes(ChannelPageReqDto dto) |
|
|
|
|
{ |
|
|
|
|
ApiResult<PageInfoDto> result = new ApiResult<PageInfoDto>() { Code = 200, Msg = "接口调用成功" }; |
|
|
|
|
var pageResult = await _dahuaGeneralCtlService.GetChannelPageList(dto); |
|
|
|
|
if (!pageResult.Success) |
|
|
|
|
{ |
|
|
|
|
result.Code = 500; |
|
|
|
|
result.Msg = pageResult.Msg; |
|
|
|
|
_logger.LogWarning("大华设备通道分页查询接口调用失败:{Msg}", pageResult.Msg); |
|
|
|
|
} |
|
|
|
|
result.Data = pageResult.Data; |
|
|
|
|
return result; |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
/// <summary> |
|
|
|
|
/// 大华登出 |
|
|
|
|
/// </summary> |
|
|
|
|
/// <param name="authorization"></param> |
|
|
|
|
/// <param name="openId"></param> |
|
|
|
|
/// <param name="userClient"></param> |
|
|
|
|
/// <returns></returns> |
|
|
|
|
/// <exception cref="NotImplementedException"></exception> |
|
|
|
|
public async Task<ApiResult<object>> Logout(string authorization, string? openId, int? userClient) |
|
|
|
|
{ |
|
|
|
|
var result = new ApiResult<object>(); |
|
|
|
|
var logoutResult = await _dahuaGeneralCtlService.Logout(authorization, openId, userClient); |
|
|
|
|
if (!logoutResult.Success) |
|
|
|
|
{ |
|
|
|
|
result.Code = 500; |
|
|
|
|
result.Msg = logoutResult.Msg; |
|
|
|
|
_logger.LogWarning("大华登出接口调用失败:{Msg}", logoutResult.Msg); |
|
|
|
|
} |
|
|
|
|
else |
|
|
|
|
{ |
|
|
|
|
result.Code = 200; |
|
|
|
|
result.Msg = "登出成功"; |
|
|
|
|
} |
|
|
|
|
return result; |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
/// <summary> |
|
|
|
|
/// rtsp实时预览接口方式 |
|
|
|
|
/// </summary> |
|
|
|
|
/// <param name="dto"></param> |
|
|
|
|
/// <returns></returns> |
|
|
|
|
/// <exception cref="NotImplementedException"></exception> |
|
|
|
|
public async Task<ApiResult<UrlDataDto>> RtspStartVideoUrl(StreamReqDto dto) |
|
|
|
|
{ |
|
|
|
|
ApiResult<UrlDataDto> result = new ApiResult<UrlDataDto>() { Code = 200, Msg = "接口调用成功" }; |
|
|
|
|
var urlReult = await _dahuaGeneralCtlService.RtspStartVideoUrl(dto); |
|
|
|
|
if (!urlReult.Success) |
|
|
|
|
{ |
|
|
|
|
result.Code = 500; |
|
|
|
|
result.Msg = urlReult.Msg; |
|
|
|
|
_logger.LogWarning("大华实时视频接口调用失败:{Msg}", urlReult.Msg); |
|
|
|
|
} |
|
|
|
|
result.Data = urlReult.Data; |
|
|
|
|
return result; |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
/// <summary> |
|
|
|
|
/// rtsp录像回放 |
|
|
|
|
/// </summary> |
|
|
|
|
/// <param name="dto"></param> |
|
|
|
|
/// <returns></returns> |
|
|
|
|
public async Task<ApiResult<UrlDataDto>> RtspPlaybackByTime(PlaybackReqDto dto) |
|
|
|
|
{ |
|
|
|
|
ApiResult<UrlDataDto> result = new ApiResult<UrlDataDto>() { Code = 200, Msg = "接口调用成功" }; |
|
|
|
|
|
|
|
|
|
var urlReult = await _dahuaGeneralCtlService.RtspPlaybackByTime(dto); |
|
|
|
|
if (!urlReult.Success) |
|
|
|
|
{ |
|
|
|
|
result.Code = 500; |
|
|
|
|
result.Msg = urlReult.Msg; |
|
|
|
|
_logger.LogWarning("大华录像回放接口调用失败:{Msg}", urlReult.Msg); |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
result.Data = urlReult.Data; |
|
|
|
|
|
|
|
|
|
return result; |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
#endregion 大华视频处理 |
|
|
|
|
} |
|
|
|
|
} |