增加一个视频信息查询接口 #33

Merged
LiuXin merged 1 commits from dev_lx into main 2 months ago
  1. 2
      WeiCloud.Fusion/Common.SharedService/Common.Shared.Application/Common.Shared.Application.csproj
  2. 2
      WeiCloud.Fusion/Common.SharedService/Common.Shared.Application/SafetyFirePro/ResponseDto/SunPlaceBoardWorkOrderResDto.cs
  3. 6
      WeiCloud.Fusion/VideoService/Video.API/Controllers/DaHua/VideoManageController.cs
  4. 64
      WeiCloud.Fusion/VideoService/Video.Application/ResponeDto/RecordDataResDto.cs
  5. 5
      WeiCloud.Fusion/VideoService/Video.Application/Video.Application.csproj
  6. 40
      WeiCloud.Fusion/VideoService/Video.DomainService/Dahvision/DahuaGeneralCtlService.cs

@ -7,7 +7,7 @@
</PropertyGroup> </PropertyGroup>
<PropertyGroup> <PropertyGroup>
<PackageId>Common.Shared.Application</PackageId> <PackageId>Common.Shared.Application</PackageId>
<Version>3.2.0</Version> <Version>3.3.0</Version>
<Authors>zrh-lx</Authors> <Authors>zrh-lx</Authors>
<Company>zrh-lx</Company> <!-- 可选 --> <Company>zrh-lx</Company> <!-- 可选 -->
<Description>包含所有公共使用的 DTO、契约、接口模型等,供微服务之间共享使用</Description> <Description>包含所有公共使用的 DTO、契约、接口模型等,供微服务之间共享使用</Description>

@ -1023,7 +1023,7 @@ namespace Common.Shared.Application.SafetyFirePro.ResponseDto
/// 验收结果,1通过,2不通过 /// 验收结果,1通过,2不通过
/// </summary> /// </summary>
[JsonPropertyName("status")] [JsonPropertyName("status")]
public string Status { get; set; } = string.Empty; // 按你标注的"验收结果"设为string,可根据实际JSON改为int? public int? Status { get; set; } // 按你标注的"验收结果"设为string,可根据实际JSON改为int?
/// <summary> /// <summary>
/// 验收人姓名 /// 验收人姓名

@ -50,12 +50,6 @@ namespace Video.API.Controllers.DaHua
return await _dahGeneralCtlService.RecordVideoUrl(dto, ipaddress); return await _dahGeneralCtlService.RecordVideoUrl(dto, ipaddress);
} }
// 全局设置(只在测试环境使用!)
private static readonly HttpClient _http = new HttpClient(new HttpClientHandler
{
ServerCertificateCustomValidationCallback = HttpClientHandler.DangerousAcceptAnyServerCertificateValidator
});
/// <summary> /// <summary>
/// 大华的录像回放地址(rtsp) /// 大华的录像回放地址(rtsp)
/// </summary> /// </summary>

@ -0,0 +1,64 @@
using System.Text.Json.Serialization;
namespace Video.Application.ResponeDto
{
public class RecordDataResDto
{
/// <summary>
/// 录像记录集合
/// </summary>
[JsonPropertyName("records")]
public List<Record> Records { get; set; }
}
public class Record
{
[JsonPropertyName("channelId")]
public string ChannelId { get; set; }
[JsonPropertyName("recordSource")]
public string RecordSource { get; set; }
[JsonPropertyName("recordType")]
public string RecordType { get; set; }
/// <summary>
/// 开始时间(时间戳,秒)
/// </summary>
[JsonPropertyName("startTime")]
public string StartTime { get; set; }
/// <summary>
/// 结束时间(时间戳,秒)
/// </summary>
[JsonPropertyName("endTime")]
public string EndTime { get; set; }
[JsonPropertyName("recordName")]
public string RecordName { get; set; }
[JsonPropertyName("fileLength")]
public string FileLength { get; set; }
[JsonPropertyName("planId")]
public string PlanId { get; set; }
[JsonPropertyName("ssId")]
public string SsId { get; set; }
[JsonPropertyName("diskId")]
public string DiskId { get; set; }
[JsonPropertyName("streamId")]
public string StreamId { get; set; }
[JsonPropertyName("forgotten")]
public string Forgotten { get; set; }
[JsonPropertyName("streamType")]
public string StreamType { get; set; }
[JsonPropertyName("videoRecordType")]
public string VideoRecordType { get; set; }
}
}

@ -7,8 +7,9 @@
</PropertyGroup> </PropertyGroup>
<ItemGroup> <ItemGroup>
<Folder Include="RequestDto\" /> <Compile Remove="RequestDto\**" />
<Folder Include="ResponeDto\" /> <EmbeddedResource Remove="RequestDto\**" />
<None Remove="RequestDto\**" />
</ItemGroup> </ItemGroup>
</Project> </Project>

@ -6,6 +6,7 @@ using NPOI.XWPF.UserModel;
using System.Net.Http.Json; using System.Net.Http.Json;
using System.Text; using System.Text;
using System.Text.Json; using System.Text.Json;
using Video.Application.ResponeDto;
using Video.DomainService.Dahvision; using Video.DomainService.Dahvision;
namespace Video.DomainService namespace Video.DomainService
@ -339,6 +340,7 @@ namespace Video.DomainService
/// <summary> /// <summary>
/// rtsp录像回放 /// rtsp录像回放
/// TODO:后续增加一个调用视频信息接口,去得到里面recordType=多少
/// (播放命令:ffplay -rtsp_transport tcp -i "rtsp://demo.weienergy.cn:15210/dss/monitor/param/cameraid=1000021%24104%26substream=1?token=430")强制走tcp /// (播放命令:ffplay -rtsp_transport tcp -i "rtsp://demo.weienergy.cn:15210/dss/monitor/param/cameraid=1000021%24104%26substream=1?token=430")强制走tcp
/// </summary> /// </summary>
/// <param name="dto"></param> /// <param name="dto"></param>
@ -362,12 +364,44 @@ namespace Video.DomainService
return new DaHApiResult<UrlDataDto> { Success = false, Code = "1009", Msg = "token无效" }; return new DaHApiResult<UrlDataDto> { Success = false, Code = "1009", Msg = "token无效" };
} }
//查询普通录像信息,这块是为了知道recordType=多少
var urls = $"https://{_configuration["DahuaAuth:Host"]}/evo-apigw/admin/API/SS/Record/QueryRecords";
if (ipaddress != null)
{
urls = $"https://{ipaddress}/evo-apigw/admin/API/SS/Record/QueryRecords";
}
RtspPlayBackReqDto reqDto = new RtspPlayBackReqDto()
{
Data = new()
{
ChannelId = dto.Data.ChannelId,
RecordSource = dto.Data.RecordSource,
startTime = dto.Data.startTime,
EndTime = dto.Data.EndTime,
StreamType = dto.Data.StreamType,
RecordType = "0"
}
};
using var reqs = new HttpRequestMessage(HttpMethod.Post, urls)
{
Content = JsonContent.Create(reqDto) // 关键:把 dto 放进请求体
};
reqs.Headers.TryAddWithoutValidation("Authorization", token);
using var resp = await _http.SendAsync(reqs);
var bodys = await resp.Content.ReadAsStringAsync();
var resultRecord = JsonSerializer.Deserialize<DaHApiResult<RecordDataResDto>>(bodys);
if (resultRecord == null || !resultRecord.Success)
{
_logger.LogWarning("查询普通录像信息: {Body}", bodys);
return new DaHApiResult<UrlDataDto> { Success = false, Code = "1008", Msg = "查询普通录像信息" };
}
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 (ipaddress != null) if (ipaddress != null)
{ {
url = $"https://{ipaddress}/evo-apigw/admin/API/SS/Playback/StartPlaybackByTime"; url = $"https://{ipaddress}/evo-apigw/admin/API/SS/Playback/StartPlaybackByTime";
} }
dto.Data.RecordType = resultRecord.Data!.Records[0].RecordType;
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 放进请求体
@ -376,8 +410,8 @@ namespace Video.DomainService
try try
{ {
using var resp = await _http.SendAsync(req); // 关键:用 SendAsync 发送 req using var rep = await _http.SendAsync(req);
var body = await resp.Content.ReadAsStringAsync(); var body = await rep.Content.ReadAsStringAsync();
if (!resp.IsSuccessStatusCode) if (!resp.IsSuccessStatusCode)
{ {

Loading…
Cancel
Save