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