在 AiVideo 中能看到图像

增加了在线状态同步逻辑
This commit is contained in:
2026-01-09 12:30:36 +08:00
parent 3d47c8f009
commit 3351ae739e
31 changed files with 1090 additions and 477 deletions

View File

@@ -1,4 +1,5 @@
using NetMQ;
using MessagePack;
using NetMQ;
using SHH.Contracts;
namespace SHH.CameraService
@@ -21,8 +22,16 @@ namespace SHH.CameraService
// Frame 0: 协议魔数
msg.Append(PROTOCOL_HEADER);
// Frame 1: 元数据 JSON
msg.Append(payload.GetMetadataJson());
////// Frame 1: 元数据 JSON
////msg.Append(payload.GetMetadataJson());
// ★★★ 修复点:在序列化之前,手动更新 Payload 的标志位 ★★★
payload.HasOriginalImage = (payload.OriginalImageBytes != null && payload.OriginalImageBytes.Length > 0);
payload.HasTargetImage = (payload.TargetImageBytes != null && payload.TargetImageBytes.Length > 0);
// Frame 1: Metadata (MessagePack)
byte[] metaBytes = MessagePackSerializer.Serialize(payload);
msg.Append(metaBytes);
// Frame 2: 原始图 (保持帧位对齐,无数据则发空帧)
if (payload.HasOriginalImage && payload.OriginalImageBytes != null)
@@ -49,9 +58,14 @@ namespace SHH.CameraService
// Frame 0 Check
if (msg[0].ConvertToString() != PROTOCOL_HEADER) return null;
// Frame 1: Metadata
string json = msg[1].ConvertToString();
var payload = VideoPayload.FromMetadataJson(json);
//// Frame 1: Metadata
//string json = msg[1].ConvertToString();
//var payload = VideoPayload.FromMetadataJson(json);
// [新代码] 直接从二进制还原
// ToByteArray() 虽然会产生一次拷贝,但对于 Metadata 这种小数据影响微乎其微
// 相比 JSON 解析 String 的开销,这已经非常快了
var payload = MessagePackSerializer.Deserialize<VideoPayload>(msg[1].ToByteArray());
if (payload == null) return null;
// Frame 2: Raw Image