using JT809.Protocol.Extensions.JT1078.Enums; using JT809.Protocol.Formatters; using JT809.Protocol.Interfaces; using JT809.Protocol.MessagePack; using System; using System.Text.Json; namespace JT809.Protocol.Extensions.JT1078.MessageBody { /// /// 远程录像回放请求消息 /// public class JT809_JT1078_0x9A00_0x9A01 : JT809SubBodies, IJT809MessagePackFormatter, IJT809Analyze { /// /// 逻辑通道号 /// public byte ChannelId { get; set; } /// /// 音视频类型 /// public byte AVItemType { get; set; } /// /// 码流类型 /// public byte StreamType { get; set; } /// /// 存储器类型 /// public byte MemType { get; set; } /// /// 回放起始时间 /// public DateTime PlayBackStartTime { get; set; } /// /// 回放结束时间 /// public DateTime PlayBackEndTime { get; set; } /// /// 时效口令 /// 64 /// public string AuthorizeCode { get; set; } /// /// 车辆进入跨域地区后5min之内任一位置,仅跨域访问请求时,使用此字段 /// 36 /// public byte[] GnssData { get; set; } public override ushort SubMsgId { get; } = JT809_JT1078_SubBusinessType.远程录像回放请求消息.ToUInt16Value(); public override string Description { get; } = "远程录像回放请求消息"; public void Analyze(ref JT809MessagePackReader reader, Utf8JsonWriter writer, IJT809Config config) { JT809_JT1078_0x9A00_0x9A01 value = new JT809_JT1078_0x9A00_0x9A01(); value.ChannelId = reader.ReadByte(); writer.WriteString($"[{value.ChannelId.ReadNumber()}]逻辑通道号", LogicalChannelNoDisplay(value.ChannelId)); value.AVItemType = reader.ReadByte(); writer.WriteString($"[{value.AVItemType.ReadNumber()}]音视频资源类型", AVResourceTypeDisplay(value.AVItemType)); value.StreamType = reader.ReadByte(); writer.WriteString($"[{value.StreamType.ReadNumber()}]码流类型", StreamTypeDisplay(value.StreamType)); value.MemType = reader.ReadByte(); writer.WriteString($"[{value.MemType.ReadNumber()}]存储器类型", MemoryTypeDisplay(value.MemType)); var virtualHex = reader.ReadVirtualArray(8); value.PlayBackStartTime = reader.ReadUTCDateTime(); writer.WriteString($"[{virtualHex.ToArray().ToHexString()}]回放开始时间", value.PlayBackStartTime); virtualHex = reader.ReadVirtualArray(8); value.PlayBackEndTime = reader.ReadUTCDateTime(); writer.WriteString($"[{virtualHex.ToArray().ToHexString()}]回放结束时间", value.PlayBackEndTime); virtualHex = reader.ReadVirtualArray(64); value.AuthorizeCode = reader.ReadString(64); writer.WriteString($"[{virtualHex.ToArray().ToHexString()}]时效口令", value.AuthorizeCode); virtualHex = reader.ReadVirtualArray(36); value.GnssData = reader.ReadArray(36).ToArray(); writer.WriteString($"[{virtualHex.ToArray().ToHexString()}]车辆进入跨域地区后5min之内任一位置", virtualHex.ToArray().ToHexString()); string LogicalChannelNoDisplay(byte LogicalChannelNo) { switch (LogicalChannelNo) { case 1: return "驾驶员"; case 2: return "车辆正前方"; case 3: return "车前门"; case 4: return "车厢前部"; case 5: return "车厢后部"; case 7: return "行李舱"; case 8: return "车辆左侧"; case 9: return "车辆右侧"; case 10: return "车辆正后方"; case 11: return "车厢中部"; case 12: return "车中门"; case 13: return "驾驶席车门"; case 33: return "驾驶员"; case 36: return "车厢前部"; case 37: return "车厢后部"; default: return "预留"; } } string AVResourceTypeDisplay(byte AVResourceType) { switch (AVResourceType) { case 0: return "音视频"; case 1: return "音频"; case 2: return "视频"; default: break; } return "未知"; } string StreamTypeDisplay(byte StreamType) { switch (StreamType) { case 1: return "主码流"; case 2: return "子码流"; default: return "未知"; } } string MemoryTypeDisplay(byte MemoryType) { switch (MemoryType) { case 1: return "主存储器"; case 2: return "灾备存储器"; default: return "未知"; } } } public JT809_JT1078_0x9A00_0x9A01 Deserialize(ref JT809MessagePackReader reader, IJT809Config config) { JT809_JT1078_0x9A00_0x9A01 value = new JT809_JT1078_0x9A00_0x9A01(); value.ChannelId = reader.ReadByte(); value.AVItemType = reader.ReadByte(); value.StreamType = reader.ReadByte(); value.MemType = reader.ReadByte(); value.PlayBackStartTime = reader.ReadUTCDateTime(); value.PlayBackEndTime = reader.ReadUTCDateTime(); value.AuthorizeCode = reader.ReadString(64); value.GnssData = reader.ReadArray(36).ToArray(); return value; } public void Serialize(ref JT809MessagePackWriter writer, JT809_JT1078_0x9A00_0x9A01 value, IJT809Config config) { writer.WriteByte(value.ChannelId); writer.WriteByte(value.AVItemType); writer.WriteByte(value.StreamType); writer.WriteByte(value.MemType); writer.WriteUTCDateTime(value.PlayBackStartTime); writer.WriteUTCDateTime(value.PlayBackEndTime); writer.WriteStringPadRight(value.AuthorizeCode, 64); writer.WriteArray(value.GnssData); } } }