25개 이상의 토픽을 선택하실 수 없습니다. Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

160 lines
7.1 KiB

  1. using JT808.Protocol.Formatters;
  2. using JT808.Protocol.Interfaces;
  3. using JT808.Protocol.MessagePack;
  4. using System;
  5. using System.Collections.Generic;
  6. using System.Text;
  7. using System.Text.Json;
  8. namespace JT808.Protocol.Extensions.JT1078.MessageBody
  9. {
  10. /// <summary>
  11. /// 终端上传音视频属性
  12. /// </summary>
  13. public class JT808_0x1003 : JT808Bodies, IJT808MessagePackFormatter<JT808_0x1003>, IJT808Analyze
  14. {
  15. /// <summary>
  16. /// 输入音频编码方式
  17. /// </summary>
  18. public byte EnterAudioEncoding { get; set; }
  19. /// <summary>
  20. /// 输入音频声道数
  21. /// </summary>
  22. public byte EnterAudioChannelsNumber { get; set; }
  23. /// <summary>
  24. /// 输入音频采样率
  25. /// </summary>
  26. public byte EnterAudioSampleRate { get; set; }
  27. /// <summary>
  28. /// 输入音频采样位数
  29. /// </summary>
  30. public byte EnterAudioSampleDigits { get; set; }
  31. /// <summary>
  32. /// 音频帧长度
  33. /// </summary>
  34. public ushort AudioFrameLength { get; set; }
  35. /// <summary>
  36. /// 是否支持音频输出
  37. /// </summary>
  38. public byte IsSupportedAudioOutput { get; set; }
  39. /// <summary>
  40. /// 视频编码方式
  41. /// </summary>
  42. public byte VideoEncoding { get; set; }
  43. /// <summary>
  44. /// 终端支持的最大音频物理通道数量
  45. /// </summary>
  46. public byte TerminalSupportedMaxNumberOfAudioPhysicalChannels{ get; set; }
  47. /// <summary>
  48. /// 终端支持的最大视频物理通道数量
  49. /// </summary>
  50. public byte TerminalSupportedMaxNumberOfVideoPhysicalChannels { get; set; }
  51. public override ushort MsgId => 0x1003;
  52. public override string Description => "终端上传音视频属性";
  53. public void Analyze(ref JT808MessagePackReader reader, Utf8JsonWriter writer, IJT808Config config)
  54. {
  55. JT808_0x1003 value = new JT808_0x1003();
  56. value.EnterAudioEncoding = reader.ReadByte();
  57. writer.WriteString($"[{value.EnterAudioEncoding.ReadNumber()}]输入音频编码方式", AudioVideoEncodingDisplay(value.EnterAudioEncoding));
  58. value.EnterAudioChannelsNumber = reader.ReadByte();
  59. writer.WriteNumber($"[{value.EnterAudioChannelsNumber.ReadNumber()}]输入音频声道数", value.EnterAudioChannelsNumber);
  60. value.EnterAudioSampleRate = reader.ReadByte();
  61. writer.WriteString($"[{value.EnterAudioSampleRate.ReadNumber()}]输入音频采样率", AudioSampleRateDisplay(value.EnterAudioSampleRate));
  62. value.EnterAudioSampleDigits = reader.ReadByte();
  63. writer.WriteString($"[{value.EnterAudioSampleDigits.ReadNumber()}]输入音频采样位数", AudioSampleDigitsDisplay(value.EnterAudioSampleDigits));
  64. value.AudioFrameLength = reader.ReadUInt16();
  65. writer.WriteNumber($"[{value.AudioFrameLength.ReadNumber()}]音频帧长度", value.AudioFrameLength);
  66. value.IsSupportedAudioOutput = reader.ReadByte();
  67. writer.WriteString($"[{value.IsSupportedAudioOutput.ReadNumber()}]是否支持音频输出", value.IsSupportedAudioOutput==0?"不支持":"支持");
  68. value.VideoEncoding = reader.ReadByte();
  69. writer.WriteString($"[{value.VideoEncoding.ReadNumber()}]视频编码方式", AudioVideoEncodingDisplay(value.VideoEncoding));
  70. value.TerminalSupportedMaxNumberOfAudioPhysicalChannels = reader.ReadByte();
  71. writer.WriteNumber($"[{value.TerminalSupportedMaxNumberOfAudioPhysicalChannels.ReadNumber()}]终端支持的最大音频物理通道数量", value.TerminalSupportedMaxNumberOfAudioPhysicalChannels);
  72. value.TerminalSupportedMaxNumberOfVideoPhysicalChannels = reader.ReadByte();
  73. writer.WriteNumber($"[{value.TerminalSupportedMaxNumberOfVideoPhysicalChannels.ReadNumber()}]终端支持的最大视频物理通道数量", value.TerminalSupportedMaxNumberOfVideoPhysicalChannels);
  74. string AudioVideoEncodingDisplay(byte AudioVideoEncoding) {
  75. switch (AudioVideoEncoding)
  76. {
  77. case 19:
  78. return "AAC";
  79. case 25:
  80. return "MP3";
  81. case 91:
  82. return "透传";
  83. case 98:
  84. return "H.264";
  85. case 99:
  86. return "H.265";
  87. default:
  88. break;
  89. }
  90. return "未解析";
  91. }
  92. string AudioSampleRateDisplay(byte AudioSampleRate) {
  93. switch (AudioSampleRate)
  94. {
  95. case 0:
  96. return "8 kHz";
  97. case 1:
  98. return "22.05 kHz";
  99. case 2:
  100. return "44.1 kHz";
  101. case 3:
  102. return "48 kHz";
  103. default:
  104. break;
  105. }
  106. return "未知";
  107. }
  108. string AudioSampleDigitsDisplay(byte AudioSampleDigits) {
  109. switch (AudioSampleDigits)
  110. {
  111. case 0:
  112. return "8 位";
  113. case 1:
  114. return "16 位";
  115. case 2:
  116. return "32 位";
  117. default:
  118. break;
  119. }
  120. return "未知";
  121. }
  122. }
  123. public JT808_0x1003 Deserialize(ref JT808MessagePackReader reader, IJT808Config config)
  124. {
  125. JT808_0x1003 jT808_0x1003 = new JT808_0x1003();
  126. jT808_0x1003.EnterAudioEncoding = reader.ReadByte();
  127. jT808_0x1003.EnterAudioChannelsNumber = reader.ReadByte();
  128. jT808_0x1003.EnterAudioSampleRate = reader.ReadByte();
  129. jT808_0x1003.EnterAudioSampleDigits = reader.ReadByte();
  130. jT808_0x1003.AudioFrameLength = reader.ReadUInt16();
  131. jT808_0x1003.IsSupportedAudioOutput = reader.ReadByte();
  132. jT808_0x1003.VideoEncoding = reader.ReadByte();
  133. jT808_0x1003.TerminalSupportedMaxNumberOfAudioPhysicalChannels = reader.ReadByte();
  134. jT808_0x1003.TerminalSupportedMaxNumberOfVideoPhysicalChannels = reader.ReadByte();
  135. return jT808_0x1003;
  136. }
  137. public void Serialize(ref JT808MessagePackWriter writer, JT808_0x1003 value, IJT808Config config)
  138. {
  139. writer.WriteByte(value.EnterAudioEncoding);
  140. writer.WriteByte(value.EnterAudioChannelsNumber);
  141. writer.WriteByte(value.EnterAudioSampleRate);
  142. writer.WriteByte(value.EnterAudioSampleDigits);
  143. writer.WriteUInt16(value.AudioFrameLength);
  144. writer.WriteByte(value.IsSupportedAudioOutput);
  145. writer.WriteByte(value.VideoEncoding);
  146. writer.WriteByte(value.TerminalSupportedMaxNumberOfAudioPhysicalChannels);
  147. writer.WriteByte(value.TerminalSupportedMaxNumberOfVideoPhysicalChannels);
  148. }
  149. }
  150. }