新增 Mjpegplayer 用来播放 Web 流
This commit is contained in:
92
SHH.Contracts.Grpc/Images/VideoPayload.cs
Normal file
92
SHH.Contracts.Grpc/Images/VideoPayload.cs
Normal file
@@ -0,0 +1,92 @@
|
||||
using Newtonsoft.Json;
|
||||
// 注意:如果不想依赖 Newtonsoft,也可以用 System.Text.Json,但 Newtonsoft 在 Std 2.0 中兼容性更好
|
||||
|
||||
namespace SHH.Contracts
|
||||
{
|
||||
/// <summary>
|
||||
/// 视频数据传输契约(纯净版 POCO)
|
||||
/// </summary>
|
||||
public class VideoPayload
|
||||
{
|
||||
/// <summary>
|
||||
/// 构造函数
|
||||
/// </summary>
|
||||
public VideoPayload()
|
||||
{
|
||||
SubscriberIds = new List<string>(16);
|
||||
Diagnostics = new Dictionary<string, object>(4);
|
||||
}
|
||||
|
||||
#region --- 1. 元数据 (Metadata) ---
|
||||
|
||||
public string CameraId { get; set; } = string.Empty;
|
||||
|
||||
/// <summary>采集时间戳 (Unix 毫秒)</summary>
|
||||
public long CaptureTimestamp { get; set; }
|
||||
|
||||
/// <summary>分发时间戳 (Unix 毫秒)</summary>
|
||||
public long DispatchTimestamp { get; set; }
|
||||
|
||||
/// <summary>原始图像宽度</summary>
|
||||
public int OriginalWidth { get; set; }
|
||||
|
||||
/// <summary>原始图像高度</summary>
|
||||
public int OriginalHeight { get; set; }
|
||||
|
||||
/// <summary>目标图像宽度</summary>
|
||||
public int TargetWidth { get; set; }
|
||||
|
||||
/// <summary>目标图像高度</summary>
|
||||
public int TargetHeight { get; set; }
|
||||
|
||||
/// <summary>订阅Ids</summary>
|
||||
public List<string> SubscriberIds { get; set; }
|
||||
|
||||
/// <summary>诊断信息</summary>
|
||||
public Dictionary<string, object> Diagnostics { get; set; }
|
||||
|
||||
/// <summary>
|
||||
/// 指示标志:是否存在原始图
|
||||
/// </summary>
|
||||
public bool HasOriginalImage { get; set; }
|
||||
|
||||
/// <summary>
|
||||
/// 指示标志:是否存在处理图
|
||||
/// </summary>
|
||||
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 逻辑) ---
|
||||
|
||||
/// <summary>
|
||||
/// 获取纯元数据的 JSON 字符串
|
||||
/// </summary>
|
||||
public string GetMetadataJson()
|
||||
{
|
||||
// 在序列化前自动更新标志位,防止逻辑不同步
|
||||
HasOriginalImage = (OriginalImageBytes != null && OriginalImageBytes.Length > 0);
|
||||
HasTargetImage = (TargetImageBytes != null && TargetImageBytes.Length > 0);
|
||||
|
||||
return JsonConvert.SerializeObject(this);
|
||||
}
|
||||
|
||||
public static VideoPayload? FromMetadataJson(string json)
|
||||
{
|
||||
return JsonConvert.DeserializeObject<VideoPayload>(json);
|
||||
}
|
||||
|
||||
#endregion
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user