Files
Ayay/SHH.Contracts/VideoPayload.cs

86 lines
2.4 KiB
C#
Raw Normal View History

using System;
2025-12-31 20:43:54 +08:00
using System.Collections.Generic;
using Newtonsoft.Json;
// 注意:如果不想依赖 Newtonsoft也可以用 System.Text.Json但 Newtonsoft 在 Std 2.0 中兼容性更好
2025-12-29 08:09:14 +08:00
namespace SHH.Contracts
{
/// <summary>
/// 视频数据传输契约(纯净版 POCO
2025-12-29 08:09:14 +08:00
/// </summary>
public class VideoPayload
{
public VideoPayload()
{
SubscriberIds = new List<string>(16);
Diagnostics = new Dictionary<string, object>(4);
}
#region --- 1. (Metadata) ---
public string CameraId { get; set; }
/// <summary>
/// 采集时间戳 (Unix 毫秒)
/// </summary>
public long CaptureTimestamp { get; set; }
2025-12-31 20:43:54 +08:00
/// <summary>
/// 分发时间戳 (Unix 毫秒)
/// </summary>
public long DispatchTimestamp { get; set; }
2025-12-29 08:09:14 +08:00
public int OriginalWidth { get; set; }
public int OriginalHeight { get; set; }
public int TargetWidth { get; set; }
public int TargetHeight { get; set; }
public List<string> SubscriberIds { get; }
public Dictionary<string, object> Diagnostics { get; }
2025-12-29 08:09:14 +08:00
/// <summary>
/// 指示标志:是否存在原始图
/// </summary>
public bool HasOriginalImage { get; set; }
2025-12-29 08:09:14 +08:00
/// <summary>
/// 指示标志:是否存在处理图
/// </summary>
public bool HasTargetImage { get; set; }
2025-12-29 08:09:14 +08:00
#endregion
2025-12-29 08:09:14 +08:00
#region --- 2. (Binary) ---
2025-12-29 08:09:14 +08:00
// 标记 JsonIgnore防止被错误序列化
2025-12-29 08:09:14 +08:00
[JsonIgnore]
public byte[] OriginalImageBytes { get; set; }
[JsonIgnore]
public byte[] TargetImageBytes { get; set; }
#endregion
#region --- 3. ( JSON ) ---
2025-12-29 08:09:14 +08:00
/// <summary>
/// 获取纯元数据的 JSON 字符串
2025-12-29 08:09:14 +08:00
/// </summary>
public string GetMetadataJson()
{
// 在序列化前自动更新标志位,防止逻辑不同步
this.HasOriginalImage = (OriginalImageBytes != null && OriginalImageBytes.Length > 0);
this.HasTargetImage = (TargetImageBytes != null && TargetImageBytes.Length > 0);
return JsonConvert.SerializeObject(this);
2025-12-29 08:09:14 +08:00
}
public static VideoPayload FromMetadataJson(string json)
{
return JsonConvert.DeserializeObject<VideoPayload>(json);
}
#endregion
2025-12-29 08:09:14 +08:00
}
}