using JT808.Protocol.Formatters; using JT808.Protocol.Interfaces; using JT808.Protocol.MessagePack; using System; using System.Collections.Generic; using System.Text; using System.Text.Json; namespace JT808.Protocol.Extensions.JT1078.MessageBody { /// /// 终端上传音视频属性 /// public class JT808_0x1003 : JT808MessagePackFormatter, JT808Bodies, IJT808Analyze { /// /// 输入音频编码方式 /// public byte EnterAudioEncoding { get; set; } /// /// 输入音频声道数 /// public byte EnterAudioChannelsNumber { get; set; } /// /// 输入音频采样率 /// public byte EnterAudioSampleRate { get; set; } /// /// 输入音频采样位数 /// public byte EnterAudioSampleDigits { get; set; } /// /// 音频帧长度 /// public ushort AudioFrameLength { get; set; } /// /// 是否支持音频输出 /// public byte IsSupportedAudioOutput { get; set; } /// /// 视频编码方式 /// public byte VideoEncoding { get; set; } /// /// 终端支持的最大音频物理通道数量 /// public byte TerminalSupportedMaxNumberOfAudioPhysicalChannels{ get; set; } /// /// 终端支持的最大视频物理通道数量 /// public byte TerminalSupportedMaxNumberOfVideoPhysicalChannels { get; set; } /// /// /// public ushort MsgId => 0x1003; /// /// /// public bool SkipSerialization => false; /// /// /// public string Description => "终端上传音视频属性"; /// /// /// /// /// /// public void Analyze(ref JT808MessagePackReader reader, Utf8JsonWriter writer, IJT808Config config) { JT808_0x1003 value = new JT808_0x1003(); value.EnterAudioEncoding = reader.ReadByte(); writer.WriteString($"[{value.EnterAudioEncoding.ReadNumber()}]输入音频编码方式", AudioVideoEncodingDisplay(value.EnterAudioEncoding)); value.EnterAudioChannelsNumber = reader.ReadByte(); writer.WriteNumber($"[{value.EnterAudioChannelsNumber.ReadNumber()}]输入音频声道数", value.EnterAudioChannelsNumber); value.EnterAudioSampleRate = reader.ReadByte(); writer.WriteString($"[{value.EnterAudioSampleRate.ReadNumber()}]输入音频采样率", AudioSampleRateDisplay(value.EnterAudioSampleRate)); value.EnterAudioSampleDigits = reader.ReadByte(); writer.WriteString($"[{value.EnterAudioSampleDigits.ReadNumber()}]输入音频采样位数", AudioSampleDigitsDisplay(value.EnterAudioSampleDigits)); value.AudioFrameLength = reader.ReadUInt16(); writer.WriteNumber($"[{value.AudioFrameLength.ReadNumber()}]音频帧长度", value.AudioFrameLength); value.IsSupportedAudioOutput = reader.ReadByte(); writer.WriteString($"[{value.IsSupportedAudioOutput.ReadNumber()}]是否支持音频输出", value.IsSupportedAudioOutput==0?"不支持":"支持"); value.VideoEncoding = reader.ReadByte(); writer.WriteString($"[{value.VideoEncoding.ReadNumber()}]视频编码方式", AudioVideoEncodingDisplay(value.VideoEncoding)); value.TerminalSupportedMaxNumberOfAudioPhysicalChannels = reader.ReadByte(); writer.WriteNumber($"[{value.TerminalSupportedMaxNumberOfAudioPhysicalChannels.ReadNumber()}]终端支持的最大音频物理通道数量", value.TerminalSupportedMaxNumberOfAudioPhysicalChannels); value.TerminalSupportedMaxNumberOfVideoPhysicalChannels = reader.ReadByte(); writer.WriteNumber($"[{value.TerminalSupportedMaxNumberOfVideoPhysicalChannels.ReadNumber()}]终端支持的最大视频物理通道数量", value.TerminalSupportedMaxNumberOfVideoPhysicalChannels); string AudioVideoEncodingDisplay(byte AudioVideoEncoding) { switch (AudioVideoEncoding) { case 19: return "AAC"; case 25: return "MP3"; case 91: return "透传"; case 98: return "H.264"; case 99: return "H.265"; default: break; } return "未解析"; } string AudioSampleRateDisplay(byte AudioSampleRate) { switch (AudioSampleRate) { case 0: return "8 kHz"; case 1: return "22.05 kHz"; case 2: return "44.1 kHz"; case 3: return "48 kHz"; default: break; } return "未知"; } string AudioSampleDigitsDisplay(byte AudioSampleDigits) { switch (AudioSampleDigits) { case 0: return "8 位"; case 1: return "16 位"; case 2: return "32 位"; default: break; } return "未知"; } } /// /// /// /// /// /// public override JT808_0x1003 Deserialize(ref JT808MessagePackReader reader, IJT808Config config) { JT808_0x1003 jT808_0x1003 = new JT808_0x1003(); jT808_0x1003.EnterAudioEncoding = reader.ReadByte(); jT808_0x1003.EnterAudioChannelsNumber = reader.ReadByte(); jT808_0x1003.EnterAudioSampleRate = reader.ReadByte(); jT808_0x1003.EnterAudioSampleDigits = reader.ReadByte(); jT808_0x1003.AudioFrameLength = reader.ReadUInt16(); jT808_0x1003.IsSupportedAudioOutput = reader.ReadByte(); jT808_0x1003.VideoEncoding = reader.ReadByte(); jT808_0x1003.TerminalSupportedMaxNumberOfAudioPhysicalChannels = reader.ReadByte(); jT808_0x1003.TerminalSupportedMaxNumberOfVideoPhysicalChannels = reader.ReadByte(); return jT808_0x1003; } /// /// /// /// /// /// public override void Serialize(ref JT808MessagePackWriter writer, JT808_0x1003 value, IJT808Config config) { writer.WriteByte(value.EnterAudioEncoding); writer.WriteByte(value.EnterAudioChannelsNumber); writer.WriteByte(value.EnterAudioSampleRate); writer.WriteByte(value.EnterAudioSampleDigits); writer.WriteUInt16(value.AudioFrameLength); writer.WriteByte(value.IsSupportedAudioOutput); writer.WriteByte(value.VideoEncoding); writer.WriteByte(value.TerminalSupportedMaxNumberOfAudioPhysicalChannels); writer.WriteByte(value.TerminalSupportedMaxNumberOfVideoPhysicalChannels); } } }