From f80ad70a99c22f5f5a87bfd9d0b8c068d45eec93 Mon Sep 17 00:00:00 2001
From: LDMING <info@ldming.com>
Date: Tue, 19 Jan 2021 16:40:59 +0800
Subject: [PATCH] =?UTF-8?q?=E5=AF=B9808=E6=89=A9=E5=B1=951078=E7=9B=B8?=
 =?UTF-8?q?=E5=85=B3=E6=8C=87=E4=BB=A4=E5=91=BD=E5=90=8D=E5=AD=97=E6=AE=B5?=
 =?UTF-8?q?=E5=90=8D=E8=BF=9B=E8=A1=8C=E7=B2=BE=E7=AE=80=E3=80=81=E7=BB=9F?=
 =?UTF-8?q?=E4=B8=80=E5=B9=B6=E5=A2=9E=E5=8A=A0=E6=B3=A8=E9=87=8A=E8=AF=B4?=
 =?UTF-8?q?=E6=98=8E=E3=80=82?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit

---
 .../JT808_0x9101Test.cs                       |  34 +--
 .../JT808_0x9102Test.cs                       |  12 +-
 .../JT808_0x9105Test.cs                       |   4 +-
 .../JT808_0x9201Test.cs                       |  20 +-
 .../JT808_0x9202Test.cs                       |  16 +-
 .../JT808_0x9205Test.cs                       |   8 +-
 .../JT808_0x9206Test.cs                       |   8 +-
 .../JT808_0x9301Test.cs                       |   4 +-
 .../JT808_0x9303Test.cs                       |   4 +-
 .../JT808_0x9304Test.cs                       |   4 +-
 .../JT808_0x9305Test.cs                       |   2 +-
 .../JT808_0x9306Test.cs                       |   4 +-
 .../Enums/JT808_JT1078_MsgId.cs               |   9 +-
 .../Enums/VideoRelateAlarmType.cs             |   4 +-
 .../MessageBody/JT808_0x9003.cs               |   3 +
 .../MessageBody/JT808_0x9101.cs               | 170 ++++++-----
 .../MessageBody/JT808_0x9102.cs               | 144 +++++----
 .../MessageBody/JT808_0x9105.cs               |  88 +++---
 .../MessageBody/JT808_0x9201.cs               | 275 +++++++++---------
 .../MessageBody/JT808_0x9202.cs               | 195 ++++++-------
 .../MessageBody/JT808_0x9205.cs               | 148 +++++-----
 .../MessageBody/JT808_0x9206.cs               | 149 ++++------
 .../MessageBody/JT808_0x9207.cs               |  24 +-
 .../MessageBody/JT808_0x9301.cs               | 101 +++----
 .../MessageBody/JT808_0x9302.cs               |  68 ++---
 .../MessageBody/JT808_0x9303.cs               |  72 ++---
 .../MessageBody/JT808_0x9304.cs               |  69 ++---
 .../MessageBody/JT808_0x9305.cs               |  69 ++---
 .../MessageBody/JT808_0x9306.cs               |  72 ++---
 29 files changed, 829 insertions(+), 951 deletions(-)

diff --git a/src/JT808.Protocol.Extensions.JT1078.Test/JT808_0x9101Test.cs b/src/JT808.Protocol.Extensions.JT1078.Test/JT808_0x9101Test.cs
index 65d7673..7dad73f 100644
--- a/src/JT808.Protocol.Extensions.JT1078.Test/JT808_0x9101Test.cs
+++ b/src/JT808.Protocol.Extensions.JT1078.Test/JT808_0x9101Test.cs
@@ -27,10 +27,10 @@ namespace JT808.Protocol.Extensions.JT1078.Test
         public void Test1()
         {
             JT808_0x9101 jT808_0X9101 = new JT808_0x9101();
-            jT808_0X9101.ServerIPAddress = "127.0.0.1";
-            jT808_0X9101.ServerVideoChannelTcpPort = 1888;
-            jT808_0X9101.ServerVideoChannelUdpPort = 0;
-            jT808_0X9101.LogicalChannelNo= 1;
+            jT808_0X9101.ServerIp = "127.0.0.1";
+            jT808_0X9101.TcpPort = 1888;
+            jT808_0X9101.UdpPort = 0;
+            jT808_0X9101.ChannelNo= 1;
             jT808_0X9101.DataType= 1;
             jT808_0X9101.StreamType= 1;
             var hex = JT808Serializer.Serialize(jT808_0X9101).ToHexString();
@@ -41,11 +41,11 @@ namespace JT808.Protocol.Extensions.JT1078.Test
         public void Test2()
         {
             JT808_0x9101 jT808_0X9101= JT808Serializer.Deserialize<JT808_0x9101>("093132372E302E302E3107600000010101".ToHexBytes());
-            Assert.Equal("127.0.0.1", jT808_0X9101.ServerIPAddress);
-            Assert.Equal(9, jT808_0X9101.ServerIPAddressLength);
-            Assert.Equal(1888, jT808_0X9101.ServerVideoChannelTcpPort);
-            Assert.Equal(0, jT808_0X9101.ServerVideoChannelUdpPort);
-            Assert.Equal(1, jT808_0X9101.LogicalChannelNo);
+            Assert.Equal("127.0.0.1", jT808_0X9101.ServerIp);
+            Assert.Equal(9, jT808_0X9101.ServerIpLength);
+            Assert.Equal(1888, jT808_0X9101.TcpPort);
+            Assert.Equal(0, jT808_0X9101.UdpPort);
+            Assert.Equal(1, jT808_0X9101.ChannelNo);
             Assert.Equal(1, jT808_0X9101.DataType);
             Assert.Equal(1, jT808_0X9101.StreamType);
         }
@@ -60,10 +60,10 @@ namespace JT808.Protocol.Extensions.JT1078.Test
             header.TerminalPhoneNo = "12345679810";
             jT808Package.Header = header;
             JT808_0x9101 jT808_0X9101 = new JT808_0x9101();
-            jT808_0X9101.ServerIPAddress = "127.0.0.1";
-            jT808_0X9101.ServerVideoChannelTcpPort = 1888;
-            jT808_0X9101.ServerVideoChannelUdpPort = 0;
-            jT808_0X9101.LogicalChannelNo = 1;
+            jT808_0X9101.ServerIp = "127.0.0.1";
+            jT808_0X9101.TcpPort = 1888;
+            jT808_0X9101.UdpPort = 0;
+            jT808_0X9101.ChannelNo = 1;
             jT808_0X9101.DataType = 1;
             jT808_0X9101.StreamType = 1;
             jT808Package.Bodies = jT808_0X9101;
@@ -88,10 +88,10 @@ namespace JT808.Protocol.Extensions.JT1078.Test
             header.TerminalPhoneNo = "";
             jT808Package.Header = header;
             JT808_0x9101 jT808_0X9101 = new JT808_0x9101();
-            jT808_0X9101.ServerIPAddress = "";
-            jT808_0X9101.ServerVideoChannelTcpPort = 1078;
-            jT808_0X9101.ServerVideoChannelUdpPort = 0;
-            jT808_0X9101.LogicalChannelNo = 3;
+            jT808_0X9101.ServerIp = "";
+            jT808_0X9101.TcpPort = 1078;
+            jT808_0X9101.UdpPort = 0;
+            jT808_0X9101.ChannelNo = 3;
             jT808_0X9101.DataType = 1;
             jT808_0X9101.StreamType = 1;
             jT808Package.Bodies = jT808_0X9101;
diff --git a/src/JT808.Protocol.Extensions.JT1078.Test/JT808_0x9102Test.cs b/src/JT808.Protocol.Extensions.JT1078.Test/JT808_0x9102Test.cs
index f9d3dda..6ed77e8 100644
--- a/src/JT808.Protocol.Extensions.JT1078.Test/JT808_0x9102Test.cs
+++ b/src/JT808.Protocol.Extensions.JT1078.Test/JT808_0x9102Test.cs
@@ -27,10 +27,10 @@ namespace JT808.Protocol.Extensions.JT1078.Test
         public void Test1()
         {
             JT808_0x9102 jT808_0X9102 = new JT808_0x9102();
-            jT808_0X9102.LogicalChannelNo = 1;
+            jT808_0X9102.ChannelNo = 1;
             jT808_0X9102.ControlCmd = 1;
             jT808_0X9102.CloseAVData = 0;
-            jT808_0X9102.SwitchStreamType = 0;
+            jT808_0X9102.StreamType = 0;
             var hex = JT808Serializer.Serialize(jT808_0X9102).ToHexString();
             Assert.Equal("01010000", hex);
         }
@@ -39,10 +39,10 @@ namespace JT808.Protocol.Extensions.JT1078.Test
         public void Test2()
         {
             JT808_0x9102 jT808_0X9102 = JT808Serializer.Deserialize<JT808_0x9102>("01010000".ToHexBytes());
-            Assert.Equal(1, jT808_0X9102.LogicalChannelNo);
+            Assert.Equal(1, jT808_0X9102.ChannelNo);
             Assert.Equal(1, jT808_0X9102.ControlCmd);
             Assert.Equal(0, jT808_0X9102.CloseAVData);
-            Assert.Equal(0, jT808_0X9102.SwitchStreamType);
+            Assert.Equal(0, jT808_0X9102.StreamType);
         }
 
         [Fact]
@@ -55,10 +55,10 @@ namespace JT808.Protocol.Extensions.JT1078.Test
             header.TerminalPhoneNo = "12345679810";
             jT808Package.Header = header;
             JT808_0x9102 jT808_0X9102 = new JT808_0x9102();
-            jT808_0X9102.LogicalChannelNo = 1;
+            jT808_0X9102.ChannelNo = 1;
             jT808_0X9102.ControlCmd = 1;
             jT808_0X9102.CloseAVData = 0;
-            jT808_0X9102.SwitchStreamType = 0;
+            jT808_0X9102.StreamType = 0;
             jT808Package.Bodies = jT808_0X9102;
             var hex = JT808Serializer.Serialize(jT808Package).ToHexString();
             //7E910200040123456798100001010100001E7E
diff --git a/src/JT808.Protocol.Extensions.JT1078.Test/JT808_0x9105Test.cs b/src/JT808.Protocol.Extensions.JT1078.Test/JT808_0x9105Test.cs
index fdc6d1e..34fc0c4 100644
--- a/src/JT808.Protocol.Extensions.JT1078.Test/JT808_0x9105Test.cs
+++ b/src/JT808.Protocol.Extensions.JT1078.Test/JT808_0x9105Test.cs
@@ -39,7 +39,7 @@ namespace JT808.Protocol.Extensions.JT1078.Test
         {
             JT808_0x9105 jT808_0x9105 = new JT808_0x9105()
             {
-                LogicChannelNo=1,
+                ChannelNo=1,
                 DropRate=2
             };
             var hex = JT808Serializer.Serialize(jT808_0x9105).ToHexString();
@@ -50,7 +50,7 @@ namespace JT808.Protocol.Extensions.JT1078.Test
         public void Test2()
         {
             var jT808_0x9105 = JT808Serializer.Deserialize<JT808_0x9105>("0102".ToHexBytes());
-            Assert.Equal(1, jT808_0x9105.LogicChannelNo);
+            Assert.Equal(1, jT808_0x9105.ChannelNo);
             Assert.Equal(2, jT808_0x9105.DropRate);
         }
         [Fact]
diff --git a/src/JT808.Protocol.Extensions.JT1078.Test/JT808_0x9201Test.cs b/src/JT808.Protocol.Extensions.JT1078.Test/JT808_0x9201Test.cs
index d13a2e3..2f9bea7 100644
--- a/src/JT808.Protocol.Extensions.JT1078.Test/JT808_0x9201Test.cs
+++ b/src/JT808.Protocol.Extensions.JT1078.Test/JT808_0x9201Test.cs
@@ -39,13 +39,13 @@ namespace JT808.Protocol.Extensions.JT1078.Test
         {
             JT808_0x9201 jT808_0x9201 = new JT808_0x9201()
             {
-                LogicChannelNo = 1,
-                AVItemType = 2,
+                ChannelNo = 1,
+                MediaType = 2,
                 BeginTime = Convert.ToDateTime("2019-07-16 10:10:10"),
                 EndTime = Convert.ToDateTime("2019-07-16 10:10:10"),
-                FastForwardOrFastRewindMultiples=3,
-                MemType=5,
-                PlayBackWay=6,
+                PlaySpeed=3,
+                MemoryType=5,
+                PlaybackWay=6,
                 ServerIp="127.0.0.1",
                 ServerIpLength=9,
                 StreamType=7,
@@ -60,13 +60,13 @@ namespace JT808.Protocol.Extensions.JT1078.Test
         public void Test2()
         {
             var jT808_0x9201 = JT808Serializer.Deserialize<JT808_0x9201>("093132372E302E302E3100501F90010207050603190716101010190716101010".ToHexBytes());
-            Assert.Equal(1, jT808_0x9201.LogicChannelNo);
-            Assert.Equal(2, jT808_0x9201.AVItemType);
+            Assert.Equal(1, jT808_0x9201.ChannelNo);
+            Assert.Equal(2, jT808_0x9201.MediaType);
             Assert.Equal(Convert.ToDateTime("2019-07-16 10:10:10"), jT808_0x9201.BeginTime);
             Assert.Equal(Convert.ToDateTime("2019-07-16 10:10:10"), jT808_0x9201.EndTime);
-            Assert.Equal(3, jT808_0x9201.FastForwardOrFastRewindMultiples);
-            Assert.Equal(5, jT808_0x9201.MemType);
-            Assert.Equal(6, jT808_0x9201.PlayBackWay);
+            Assert.Equal(3, jT808_0x9201.PlaySpeed);
+            Assert.Equal(5, jT808_0x9201.MemoryType);
+            Assert.Equal(6, jT808_0x9201.PlaybackWay);
             Assert.Equal("127.0.0.1", jT808_0x9201.ServerIp);
             Assert.Equal(9, jT808_0x9201.ServerIpLength);
             Assert.Equal(7, jT808_0x9201.StreamType);
diff --git a/src/JT808.Protocol.Extensions.JT1078.Test/JT808_0x9202Test.cs b/src/JT808.Protocol.Extensions.JT1078.Test/JT808_0x9202Test.cs
index 83a7ba7..3c2829e 100644
--- a/src/JT808.Protocol.Extensions.JT1078.Test/JT808_0x9202Test.cs
+++ b/src/JT808.Protocol.Extensions.JT1078.Test/JT808_0x9202Test.cs
@@ -39,10 +39,10 @@ namespace JT808.Protocol.Extensions.JT1078.Test
         {
             JT808_0x9202 jT808_0x9202 = new JT808_0x9202()
             {
-                AVChannelNo=1,
-                DragPlaybackPosition=Convert.ToDateTime("2019-07-16 10:10:10"),
-                FastForwardOrFastRewindMultiples=2,
-                PlayBackControl=3
+                ChannelNo=1,
+                DragPlayPosition=Convert.ToDateTime("2019-07-16 10:10:10"),
+                PlaySpeed=2,
+                PlayControl=3
             };
             var hex = JT808Serializer.Serialize(jT808_0x9202).ToHexString();
             Assert.Equal("010302190716101010", hex);
@@ -52,10 +52,10 @@ namespace JT808.Protocol.Extensions.JT1078.Test
         public void Test2()
         {
             var jT808_0x9202 = JT808Serializer.Deserialize<JT808_0x9202>("010302190716101010".ToHexBytes());
-            Assert.Equal(1, jT808_0x9202.AVChannelNo);
-            Assert.Equal(Convert.ToDateTime("2019-07-16 10:10:10"), jT808_0x9202.DragPlaybackPosition);
-            Assert.Equal(2, jT808_0x9202.FastForwardOrFastRewindMultiples);
-            Assert.Equal(3, jT808_0x9202.PlayBackControl);
+            Assert.Equal(1, jT808_0x9202.ChannelNo);
+            Assert.Equal(Convert.ToDateTime("2019-07-16 10:10:10"), jT808_0x9202.DragPlayPosition);
+            Assert.Equal(2, jT808_0x9202.PlaySpeed);
+            Assert.Equal(3, jT808_0x9202.PlayControl);
         }
         [Fact]
         public void Test3()
diff --git a/src/JT808.Protocol.Extensions.JT1078.Test/JT808_0x9205Test.cs b/src/JT808.Protocol.Extensions.JT1078.Test/JT808_0x9205Test.cs
index e49b8a8..7598a6f 100644
--- a/src/JT808.Protocol.Extensions.JT1078.Test/JT808_0x9205Test.cs
+++ b/src/JT808.Protocol.Extensions.JT1078.Test/JT808_0x9205Test.cs
@@ -40,10 +40,10 @@ namespace JT808.Protocol.Extensions.JT1078.Test
             JT808_0x9205 jT808_0x9205 = new JT808_0x9205()
             {
                 AlarmFlag=1,
-                AVResourceType=2,
+                MediaType=2,
                 BeginTime= Convert.ToDateTime("2019-07-16 10:10:10"),
                 EndTime= Convert.ToDateTime("2019-07-16 10:10:11"),
-                LogicChannelNo=3,
+                ChannelNo=3,
                 MemoryType=4,
                 StreamType =5
             };
@@ -56,10 +56,10 @@ namespace JT808.Protocol.Extensions.JT1078.Test
         {
             var jT808_0x9205 = JT808Serializer.Deserialize<JT808_0x9205>("031907161010101907161010110000000000000001020504".ToHexBytes());
             Assert.Equal(1u, jT808_0x9205.AlarmFlag);
-            Assert.Equal(2, jT808_0x9205.AVResourceType);
+            Assert.Equal(2, jT808_0x9205.MediaType);
             Assert.Equal(Convert.ToDateTime("2019-07-16 10:10:10"), jT808_0x9205.BeginTime);
             Assert.Equal(Convert.ToDateTime("2019-07-16 10:10:11"), jT808_0x9205.EndTime);
-            Assert.Equal(3, jT808_0x9205.LogicChannelNo);
+            Assert.Equal(3, jT808_0x9205.ChannelNo);
             Assert.Equal(4, jT808_0x9205.MemoryType);
             Assert.Equal(5, jT808_0x9205.StreamType);
         }
diff --git a/src/JT808.Protocol.Extensions.JT1078.Test/JT808_0x9206Test.cs b/src/JT808.Protocol.Extensions.JT1078.Test/JT808_0x9206Test.cs
index fcf0fa0..7fa3a03 100644
--- a/src/JT808.Protocol.Extensions.JT1078.Test/JT808_0x9206Test.cs
+++ b/src/JT808.Protocol.Extensions.JT1078.Test/JT808_0x9206Test.cs
@@ -40,10 +40,10 @@ namespace JT808.Protocol.Extensions.JT1078.Test
             JT808_0x9206 jT808_0x9206 = new JT808_0x9206()
             {
                 AlarmFlag=1,
-                AVResourceType=2,
+                MediaType=2,
                 BeginTime= Convert.ToDateTime("2019-07-16 10:10:10"),
                 EndTime= Convert.ToDateTime("2019-07-16 10:10:11"),
-                LogicChannelNo=3,   
+                ChannelNo=3,   
                 StreamType =5,
                 FileUploadPath ="D://1112",
                 FileUploadPathLength=8,
@@ -66,10 +66,10 @@ namespace JT808.Protocol.Extensions.JT1078.Test
         {
             var jT808_0x9206 = JT808Serializer.Deserialize<JT808_0x9206>("093132372E302E302E31032802746B0631323334353608443A2F2F31313132031907161010101907161010110000000102050407".ToHexBytes());
             Assert.Equal(1u, jT808_0x9206.AlarmFlag);
-            Assert.Equal(2, jT808_0x9206.AVResourceType);
+            Assert.Equal(2, jT808_0x9206.MediaType);
             Assert.Equal(Convert.ToDateTime("2019-07-16 10:10:10"), jT808_0x9206.BeginTime);
             Assert.Equal(Convert.ToDateTime("2019-07-16 10:10:11"), jT808_0x9206.EndTime);
-            Assert.Equal(3, jT808_0x9206.LogicChannelNo);
+            Assert.Equal(3, jT808_0x9206.ChannelNo);
             Assert.Equal(5, jT808_0x9206.StreamType);
             Assert.Equal("D://1112", jT808_0x9206.FileUploadPath);
             Assert.Equal(8, jT808_0x9206.FileUploadPathLength);
diff --git a/src/JT808.Protocol.Extensions.JT1078.Test/JT808_0x9301Test.cs b/src/JT808.Protocol.Extensions.JT1078.Test/JT808_0x9301Test.cs
index 0891480..bab269f 100644
--- a/src/JT808.Protocol.Extensions.JT1078.Test/JT808_0x9301Test.cs
+++ b/src/JT808.Protocol.Extensions.JT1078.Test/JT808_0x9301Test.cs
@@ -39,7 +39,7 @@ namespace JT808.Protocol.Extensions.JT1078.Test
         {
             JT808_0x9301 jT808_0x9301 = new JT808_0x9301()
             {
-                LogicChannelNo=1,
+                ChannelNo=1,
                 Speed=2,
                 Direction=3
             };
@@ -51,7 +51,7 @@ namespace JT808.Protocol.Extensions.JT1078.Test
         public void Test2()
         {
             var jT808_0x9301 = JT808Serializer.Deserialize<JT808_0x9301>("010302".ToHexBytes());
-            Assert.Equal(1, jT808_0x9301.LogicChannelNo);
+            Assert.Equal(1, jT808_0x9301.ChannelNo);
             Assert.Equal(2, jT808_0x9301.Speed);
             Assert.Equal(3, jT808_0x9301.Direction);
         }
diff --git a/src/JT808.Protocol.Extensions.JT1078.Test/JT808_0x9303Test.cs b/src/JT808.Protocol.Extensions.JT1078.Test/JT808_0x9303Test.cs
index 64a079d..d72ac0c 100644
--- a/src/JT808.Protocol.Extensions.JT1078.Test/JT808_0x9303Test.cs
+++ b/src/JT808.Protocol.Extensions.JT1078.Test/JT808_0x9303Test.cs
@@ -39,7 +39,7 @@ namespace JT808.Protocol.Extensions.JT1078.Test
         {
             JT808_0x9303 jT808_0x9303 = new JT808_0x9303()
             {
-                 LogicChannelNo=1,
+                 ChannelNo=1,
                  IrisAdjustment=2
             };
             var hex = JT808Serializer.Serialize(jT808_0x9303).ToHexString();
@@ -50,7 +50,7 @@ namespace JT808.Protocol.Extensions.JT1078.Test
         public void Test2()
         {
             var jT808_0x9303 = JT808Serializer.Deserialize<JT808_0x9303>("0102".ToHexBytes());
-            Assert.Equal(1, jT808_0x9303.LogicChannelNo);
+            Assert.Equal(1, jT808_0x9303.ChannelNo);
             Assert.Equal(2, jT808_0x9303.IrisAdjustment);
         }
         [Fact]
diff --git a/src/JT808.Protocol.Extensions.JT1078.Test/JT808_0x9304Test.cs b/src/JT808.Protocol.Extensions.JT1078.Test/JT808_0x9304Test.cs
index 6056c5a..5cb9962 100644
--- a/src/JT808.Protocol.Extensions.JT1078.Test/JT808_0x9304Test.cs
+++ b/src/JT808.Protocol.Extensions.JT1078.Test/JT808_0x9304Test.cs
@@ -39,7 +39,7 @@ namespace JT808.Protocol.Extensions.JT1078.Test
         {
             JT808_0x9304 jT808_0x9304 = new JT808_0x9304()
             {
-                 LogicChannelNo=1,
+                 ChannelNo=1,
                  StartOrStop=2
             };
             var hex = JT808Serializer.Serialize(jT808_0x9304).ToHexString();
@@ -50,7 +50,7 @@ namespace JT808.Protocol.Extensions.JT1078.Test
         public void Test2()
         {
             var jT808_0x9304 = JT808Serializer.Deserialize<JT808_0x9304>("0102".ToHexBytes());
-            Assert.Equal(1, jT808_0x9304.LogicChannelNo);
+            Assert.Equal(1, jT808_0x9304.ChannelNo);
             Assert.Equal(2, jT808_0x9304.StartOrStop);
         }
         [Fact]
diff --git a/src/JT808.Protocol.Extensions.JT1078.Test/JT808_0x9305Test.cs b/src/JT808.Protocol.Extensions.JT1078.Test/JT808_0x9305Test.cs
index b65f96c..7dd7751 100644
--- a/src/JT808.Protocol.Extensions.JT1078.Test/JT808_0x9305Test.cs
+++ b/src/JT808.Protocol.Extensions.JT1078.Test/JT808_0x9305Test.cs
@@ -39,7 +39,7 @@ namespace JT808.Protocol.Extensions.JT1078.Test
         {
             JT808_0x9305 jT808_0x9305 = new JT808_0x9305()
             {
-                 LogicChannelNo=1,
+                 ChannelNo=1,
                  StartOrStop=2
             };
             var hex = JT808Serializer.Serialize(jT808_0x9305).ToHexString();
diff --git a/src/JT808.Protocol.Extensions.JT1078.Test/JT808_0x9306Test.cs b/src/JT808.Protocol.Extensions.JT1078.Test/JT808_0x9306Test.cs
index 3cd7aee..3f3c633 100644
--- a/src/JT808.Protocol.Extensions.JT1078.Test/JT808_0x9306Test.cs
+++ b/src/JT808.Protocol.Extensions.JT1078.Test/JT808_0x9306Test.cs
@@ -39,7 +39,7 @@ namespace JT808.Protocol.Extensions.JT1078.Test
         {
             JT808_0x9306 jT808_0x9306 = new JT808_0x9306()
             {
-                 LogicChannelNo=1,
+                 ChannelNo=1,
                  ChangeMultipleControl=2
             };
             var hex = JT808Serializer.Serialize(jT808_0x9306).ToHexString();
@@ -50,7 +50,7 @@ namespace JT808.Protocol.Extensions.JT1078.Test
         public void Test2()
         {
             var jT808_0x9306 = JT808Serializer.Deserialize<JT808_0x9306>("0102".ToHexBytes());
-            Assert.Equal(1, jT808_0x9306.LogicChannelNo);
+            Assert.Equal(1, jT808_0x9306.ChannelNo);
             Assert.Equal(2, jT808_0x9306.ChangeMultipleControl);
         }
         [Fact]
diff --git a/src/JT808.Protocol.Extensions.JT1078/Enums/JT808_JT1078_MsgId.cs b/src/JT808.Protocol.Extensions.JT1078/Enums/JT808_JT1078_MsgId.cs
index abe8e49..6d916c8 100644
--- a/src/JT808.Protocol.Extensions.JT1078/Enums/JT808_JT1078_MsgId.cs
+++ b/src/JT808.Protocol.Extensions.JT1078/Enums/JT808_JT1078_MsgId.cs
@@ -1,10 +1,8 @@
-using System;
-using System.Collections.Generic;
-using System.Text;
-
-namespace JT808.Protocol.Extensions.JT1078.Enums
+namespace JT808.Protocol.Extensions.JT1078.Enums
 {
+#pragma warning disable CS1591 // 缺少对公共可见类型或成员的 XML 注释
     public enum JT808_JT1078_MsgId:ushort
+
     {
         终端上传音视频属性 = 0x1003,
         终端上传乘客流量 = 0x1005,
@@ -26,4 +24,5 @@ namespace JT808.Protocol.Extensions.JT1078.Enums
         红外补光控制 = 0x9305,
         云台变倍控制 = 0x9306
     }
+    #pragma warning restore CS1591 // 缺少对公共可见类型或成员的 XML 注释
 }
diff --git a/src/JT808.Protocol.Extensions.JT1078/Enums/VideoRelateAlarmType.cs b/src/JT808.Protocol.Extensions.JT1078/Enums/VideoRelateAlarmType.cs
index 95527e3..b4641ab 100644
--- a/src/JT808.Protocol.Extensions.JT1078/Enums/VideoRelateAlarmType.cs
+++ b/src/JT808.Protocol.Extensions.JT1078/Enums/VideoRelateAlarmType.cs
@@ -1,10 +1,9 @@
 using System;
-using System.Collections.Generic;
-using System.Text;
 
 namespace JT808.Protocol.Extensions.JT1078.Enums
 {
     [Flags]
+#pragma warning disable CS1591 // 缺少对公共可见类型或成员的 XML 注释
     public enum VideoRelateAlarmType:uint
     {
         视频信号丢失报警=0,
@@ -15,4 +14,5 @@ namespace JT808.Protocol.Extensions.JT1078.Enums
         异常驾驶行为报警=32,
         特殊报警录像达到存储阈值报警=64,
     }
+#pragma warning restore CS1591 // 缺少对公共可见类型或成员的 XML 注释
 }
diff --git a/src/JT808.Protocol.Extensions.JT1078/MessageBody/JT808_0x9003.cs b/src/JT808.Protocol.Extensions.JT1078/MessageBody/JT808_0x9003.cs
index 21652f7..fc04943 100644
--- a/src/JT808.Protocol.Extensions.JT1078/MessageBody/JT808_0x9003.cs
+++ b/src/JT808.Protocol.Extensions.JT1078/MessageBody/JT808_0x9003.cs
@@ -9,8 +9,11 @@ namespace JT808.Protocol.Extensions.JT1078.MessageBody
     /// </summary>
     public class JT808_0x9003:JT808Bodies
     {
+#pragma warning disable CS1591 // 缺少对公共可见类型或成员的 XML 注释
         public override string Description => "查询终端音视频属性";
+
         public override ushort MsgId => 0x9003;
         public override bool SkipSerialization { get; set; } = true;
+#pragma warning restore CS1591 // 缺少对公共可见类型或成员的 XML 注释
     }
 }
diff --git a/src/JT808.Protocol.Extensions.JT1078/MessageBody/JT808_0x9101.cs b/src/JT808.Protocol.Extensions.JT1078/MessageBody/JT808_0x9101.cs
index 5be4c2f..3473455 100644
--- a/src/JT808.Protocol.Extensions.JT1078/MessageBody/JT808_0x9101.cs
+++ b/src/JT808.Protocol.Extensions.JT1078/MessageBody/JT808_0x9101.cs
@@ -9,32 +9,35 @@ using System.Text.Json;
 namespace JT808.Protocol.Extensions.JT1078.MessageBody
 {
     /// <summary>
-    /// 实时音视频传输请求
+    /// 实时音视频传输请求(live、talk、listen、fanout、passThrough直播、对讲、监听、广播、透传请求)
     /// </summary>
     public class JT808_0x9101: JT808Bodies, IJT808MessagePackFormatter<JT808_0x9101>, IJT808Analyze
     {
+#pragma warning disable CS1591 // 缺少对公共可见类型或成员的 XML 注释
         public override string Description => "实时音视频传输请求";
         public override ushort MsgId => 0x9101;
+#pragma warning restore CS1591 // 缺少对公共可见类型或成员的 XML 注释
+
         /// <summary>
-        /// 服务器IP地址长度
+        /// 视频服务器IP地址长度
         /// </summary>
-        public byte ServerIPAddressLength { get; set; }
+        public byte ServerIpLength { get;internal set; }
         /// <summary>
-        /// 服务器IP地址
+        /// 视频服务器IP地址
         /// </summary>
-        public string ServerIPAddress { get; set; }
+        public string ServerIp { get; set; }
         /// <summary>
-        /// 服务器视频通道监听端口号(TCP)
+        /// 视频服务器TCP端口号,不使用TCP协议传输时保持默认值0即可(TCP和UDP二选一,当TCP和UDP均非默认值时一般以TCP为准)
         /// </summary>
-        public ushort ServerVideoChannelTcpPort { get; set; }
+        public ushort TcpPort { get; set; }
         /// <summary>
-        /// 服务器视频通道监听端口号(UDP)
+        /// 视频服务器UDP端口号,不使用UDP协议传输时保持默认值0即可(TCP和UDP二选一,当TCP和UDP均非默认值时一般以TCP为准)
         /// </summary>
-        public ushort ServerVideoChannelUdpPort { get; set; }
+        public ushort UdpPort { get; set; }
         /// <summary>
         /// 逻辑通道号
         /// </summary>
-        public byte LogicalChannelNo { get; set; }
+        public byte ChannelNo { get; set; }
         /// <summary>
         /// 数据类型
         /// 0:音视频
@@ -52,105 +55,98 @@ namespace JT808.Protocol.Extensions.JT1078.MessageBody
         /// </summary>
         public byte StreamType { get; set; }
 
+        /// <summary>
+        /// 格式分析
+        /// </summary>
+        /// <param name="reader"></param>
+        /// <param name="writer"></param>
+        /// <param name="config"></param>
         public void Analyze(ref JT808MessagePackReader reader, Utf8JsonWriter writer, IJT808Config config)
         {
-            JT808_0x9101 value = new JT808_0x9101();
-            value.ServerIPAddressLength = reader.ReadByte();
-            writer.WriteNumber($"[{value.ServerIPAddressLength.ReadNumber()}]服务器IP地址长度", value.ServerIPAddressLength);
-            string ipHex = reader.ReadVirtualArray(value.ServerIPAddressLength).ToArray().ToHexString();
-            value.ServerIPAddress = reader.ReadString(value.ServerIPAddressLength);
-            writer.WriteString($"[{ipHex}]服务器IP地址", value.ServerIPAddress);
-            value.ServerVideoChannelTcpPort = reader.ReadUInt16();
-            writer.WriteNumber($"[{value.ServerVideoChannelTcpPort.ReadNumber()}]服务器视频通道监听端口号(TCP)", value.ServerVideoChannelTcpPort);
-            value.ServerVideoChannelUdpPort = reader.ReadUInt16();
-            writer.WriteNumber($"[{value.ServerVideoChannelUdpPort.ReadNumber()}]服务器视频通道监听端口号(UDP)", value.ServerVideoChannelUdpPort);
-            value.LogicalChannelNo = reader.ReadByte();
-            writer.WriteString($"[{value.LogicalChannelNo.ReadNumber()}]逻辑通道号", LogicalChannelNoDisplay(value.LogicalChannelNo));
+            var value = new JT808_0x9101();
+            value.ServerIpLength = reader.ReadByte();
+            writer.WriteNumber($"[{value.ServerIpLength.ReadNumber()}]服务器IP地址长度", value.ServerIpLength);
+            string ipHex = reader.ReadVirtualArray(value.ServerIpLength).ToArray().ToHexString();
+            value.ServerIp = reader.ReadString(value.ServerIpLength);
+            writer.WriteString($"[{ipHex}]服务器IP地址", value.ServerIp);
+            value.TcpPort = reader.ReadUInt16();
+            writer.WriteNumber($"[{value.TcpPort.ReadNumber()}]服务器视频通道监听端口号(TCP)", value.TcpPort);
+            value.UdpPort = reader.ReadUInt16();
+            writer.WriteNumber($"[{value.UdpPort.ReadNumber()}]服务器视频通道监听端口号(UDP)", value.UdpPort);
+            value.ChannelNo = reader.ReadByte();
+            writer.WriteString($"[{value.ChannelNo.ReadNumber()}]逻辑通道号", LogicalChannelNoDisplay(value.ChannelNo));
             value.DataType = reader.ReadByte();
             writer.WriteString($"[{value.DataType.ReadNumber()}]数据类型", DataTypeDisplay(value.DataType));
             value.StreamType = reader.ReadByte();
             writer.WriteString($"[{value.StreamType.ReadNumber()}]码流类型", value.StreamType==0?"主码流":"子码流");
             string DataTypeDisplay(byte DataType) {
-                switch (DataType)
+                return DataType switch
                 {
-                    case 0:
-                        return "音视频";
-                    case 1:
-                        return "视频";
-                    case 2:
-                        return "双向对讲";
-                    case 3:
-                        return "监听";
-                    case 4:
-                        return "中心广播";
-                    case 5:
-                        return "透传";
-                    default:
-                        break;
-                }
-
-                return "未知";
+                    0 => "音视频",
+                    1 => "视频",
+                    2 => "双向对讲",
+                    3 => "监听",
+                    4 => "中心广播",
+                    5 => "透传",
+                    _ => "未知",
+                };
             }
             string LogicalChannelNoDisplay(byte LogicalChannelNo) {
-                switch (LogicalChannelNo)
+                return LogicalChannelNo switch
                 {
-                    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 "预留";
-                }
+                    1 => "驾驶员",
+                    2 => "车辆正前方",
+                    3 => "车前门",
+                    4 => "车厢前部",
+                    5 => "车厢后部",
+                    7 => "行李舱",
+                    8 => "车辆左侧",
+                    9 => "车辆右侧",
+                    10 => "车辆正后方",
+                    11 => "车厢中部",
+                    12 => "车中门",
+                    13 => "驾驶席车门",
+                    33 => "驾驶员",
+                    36 => "车厢前部",
+                    37 => "车厢后部",
+                    _ => "预留",
+                };
             }
         }
 
+        /// <summary>
+        ///  反序列化
+        /// </summary>
+        /// <param name="reader"></param>
+        /// <param name="config"></param>
+        /// <returns></returns>
         public JT808_0x9101 Deserialize(ref JT808MessagePackReader reader, IJT808Config config)
         {
-            JT808_0x9101 jT808_0X9101 = new JT808_0x9101();
-            jT808_0X9101.ServerIPAddressLength = reader.ReadByte();
-            jT808_0X9101.ServerIPAddress = reader.ReadString(jT808_0X9101.ServerIPAddressLength);
-            jT808_0X9101.ServerVideoChannelTcpPort = reader.ReadUInt16();
-            jT808_0X9101.ServerVideoChannelUdpPort = reader.ReadUInt16();
-            jT808_0X9101.LogicalChannelNo = reader.ReadByte();
-            jT808_0X9101.DataType = reader.ReadByte();
-            jT808_0X9101.StreamType = reader.ReadByte();
-            return jT808_0X9101;
+            var jT808_0x9101 = new JT808_0x9101();
+            jT808_0x9101.ServerIpLength = reader.ReadByte();
+            jT808_0x9101.ServerIp = reader.ReadString(jT808_0x9101.ServerIpLength);
+            jT808_0x9101.TcpPort = reader.ReadUInt16();
+            jT808_0x9101.UdpPort = reader.ReadUInt16();
+            jT808_0x9101.ChannelNo = reader.ReadByte();
+            jT808_0x9101.DataType = reader.ReadByte();
+            jT808_0x9101.StreamType = reader.ReadByte();
+            return jT808_0x9101;
         }
 
+        /// <summary>
+        /// 序列化
+        /// </summary>
+        /// <param name="writer"></param>
+        /// <param name="value"></param>
+        /// <param name="config"></param>
         public void Serialize(ref JT808MessagePackWriter writer, JT808_0x9101 value, IJT808Config config)
         {
             writer.Skip(1, out int position);
-            writer.WriteString(value.ServerIPAddress);
+            writer.WriteString(value.ServerIp);
             writer.WriteByteReturn((byte)(writer.GetCurrentPosition() - position - 1), position);
-            writer.WriteUInt16(value.ServerVideoChannelTcpPort);
-            writer.WriteUInt16(value.ServerVideoChannelUdpPort);
-            writer.WriteByte(value.LogicalChannelNo);
+            writer.WriteUInt16(value.TcpPort);
+            writer.WriteUInt16(value.UdpPort);
+            writer.WriteByte(value.ChannelNo);
             writer.WriteByte(value.DataType);
             writer.WriteByte(value.StreamType);
         }
diff --git a/src/JT808.Protocol.Extensions.JT1078/MessageBody/JT808_0x9102.cs b/src/JT808.Protocol.Extensions.JT1078/MessageBody/JT808_0x9102.cs
index cd73d2a..fd4a5e1 100644
--- a/src/JT808.Protocol.Extensions.JT1078/MessageBody/JT808_0x9102.cs
+++ b/src/JT808.Protocol.Extensions.JT1078/MessageBody/JT808_0x9102.cs
@@ -9,16 +9,18 @@ using System.Text.Json;
 namespace JT808.Protocol.Extensions.JT1078.MessageBody
 {
     /// <summary>
-    /// 音视频实时传输控制
+    /// 音视频实时传输控制(LiveControl直播控制)
     /// </summary>
-    public class JT808_0x9102: JT808Bodies, IJT808MessagePackFormatter<JT808_0x9102>, IJT808Analyze
+    public class JT808_0x9102 : JT808Bodies, IJT808MessagePackFormatter<JT808_0x9102>, IJT808Analyze
     {
+#pragma warning disable CS1591 // 缺少对公共可见类型或成员的 XML 注释
         public override string Description => "音视频实时传输控制";
         public override ushort MsgId => 0x9102;
+#pragma warning restore CS1591 // 缺少对公共可见类型或成员的 XML 注释
         /// <summary>
         /// 逻辑通道号
         /// </summary>
-        public byte LogicalChannelNo { get; set; }
+        public byte ChannelNo { get; set; }
         /// <summary>
         /// 控制指令
         /// 平台可以通过该指令对设备的实时音视频进行控制:
@@ -43,106 +45,98 @@ namespace JT808.Protocol.Extensions.JT1078.MessageBody
         /// 0:主码流
         /// 1:子码流
         /// </summary>
-        public byte SwitchStreamType { get; set; }
+        public byte StreamType { get; set; }
 
+        /// <summary>
+        /// 格式分析
+        /// </summary>
+        /// <param name="reader"></param>
+        /// <param name="writer"></param>
+        /// <param name="config"></param>
         public void Analyze(ref JT808MessagePackReader reader, Utf8JsonWriter writer, IJT808Config config)
         {
             JT808_0x9102 value = new JT808_0x9102();
-            value.LogicalChannelNo = reader.ReadByte();
-            writer.WriteString($"[{value.LogicalChannelNo.ReadNumber()}]逻辑通道号", LogicalChannelNoDisplay(value.LogicalChannelNo));
+            value.ChannelNo = reader.ReadByte();
+            writer.WriteString($"[{value.ChannelNo.ReadNumber()}]逻辑通道号", LogicalChannelNoDisplay(value.ChannelNo));
             value.ControlCmd = reader.ReadByte();
             writer.WriteString($"[{value.ControlCmd.ReadNumber()}]控制指令", ControlCmdDisplay(value.ControlCmd));
             value.CloseAVData = reader.ReadByte();
             writer.WriteString($"[{value.CloseAVData.ReadNumber()}]关闭音视频类型", CloseAVDataDisplay(value.CloseAVData));
-            value.SwitchStreamType = reader.ReadByte();
-            writer.WriteString($"[{value.SwitchStreamType.ReadNumber()}]切换码流类型", value.SwitchStreamType==0?"主码流":"子码流");
+            value.StreamType = reader.ReadByte();
+            writer.WriteString($"[{value.StreamType.ReadNumber()}]切换码流类型", value.StreamType == 0 ? "主码流" : "子码流");
 
-            string CloseAVDataDisplay(byte CloseAVData) {
-                switch (CloseAVData)
+            string CloseAVDataDisplay(byte CloseAVData)
+            {
+                return CloseAVData switch
                 {
-                    case 0:
-                        return "关闭该通道有关的音视频数据";
-                    case 1:
-                        return "只关闭该通道有关的音频,保留该通道有关的视频";
-                    case 2:
-                        return "只关闭该通道有关的视频,保留该通道有关的音频";
-                    default:
-                        return "未知";
-                }
+                    0 => "关闭该通道有关的音视频数据",
+                    1 => "只关闭该通道有关的音频,保留该通道有关的视频",
+                    2 => "只关闭该通道有关的视频,保留该通道有关的音频",
+                    _ => "未知",
+                };
             }
-            string ControlCmdDisplay(byte ControlCmd) {
-                switch (ControlCmd)
+            string ControlCmdDisplay(byte ControlCmd)
+            {
+                return ControlCmd switch
                 {
-                    case 0:
-                        return "关闭音视频传输指令";
-                    case 1:
-                        return "切换码流(增加暂停和继续)";
-                    case 2:
-                        return "暂停该通道所有流的发送";
-                    case 3:
-                        return "恢复暂停前流的发送,与暂停前的流类型一致";
-                    case 4:
-                        return "关闭双向对讲";
-                    default:
-                        return "未知";
-                }
+                    0 => "关闭音视频传输指令",
+                    1 => "切换码流(增加暂停和继续)",
+                    2 => "暂停该通道所有流的发送",
+                    3 => "恢复暂停前流的发送,与暂停前的流类型一致",
+                    4 => "关闭双向对讲",
+                    _ => "未知",
+                };
             }
             string LogicalChannelNoDisplay(byte LogicalChannelNo)
             {
-                switch (LogicalChannelNo)
+                return LogicalChannelNo switch
                 {
-                    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 "预留";
-                }
+                    1 => "驾驶员",
+                    2 => "车辆正前方",
+                    3 => "车前门",
+                    4 => "车厢前部",
+                    5 => "车厢后部",
+                    7 => "行李舱",
+                    8 => "车辆左侧",
+                    9 => "车辆右侧",
+                    10 => "车辆正后方",
+                    11 => "车厢中部",
+                    12 => "车中门",
+                    13 => "驾驶席车门",
+                    33 => "驾驶员",
+                    36 => "车厢前部",
+                    37 => "车厢后部",
+                    _ => "预留",
+                };
             }
         }
-
+        /// <summary>
+        /// 反序列化
+        /// </summary>
+        /// <param name="reader"></param>
+        /// <param name="config"></param>
+        /// <returns></returns>
         public JT808_0x9102 Deserialize(ref JT808MessagePackReader reader, IJT808Config config)
         {
-            JT808_0x9102 jT808_0X9102 = new JT808_0x9102();
-            jT808_0X9102.LogicalChannelNo = reader.ReadByte();
+            var jT808_0X9102 = new JT808_0x9102();
+            jT808_0X9102.ChannelNo = reader.ReadByte();
             jT808_0X9102.ControlCmd = reader.ReadByte();
             jT808_0X9102.CloseAVData = reader.ReadByte();
-            jT808_0X9102.SwitchStreamType = reader.ReadByte();
+            jT808_0X9102.StreamType = reader.ReadByte();
             return jT808_0X9102;
         }
-
+        /// <summary>
+        /// 序列化
+        /// </summary>
+        /// <param name="writer"></param>
+        /// <param name="value"></param>
+        /// <param name="config"></param>
         public void Serialize(ref JT808MessagePackWriter writer, JT808_0x9102 value, IJT808Config config)
         {
-            writer.WriteByte(value.LogicalChannelNo);
+            writer.WriteByte(value.ChannelNo);
             writer.WriteByte(value.ControlCmd);
             writer.WriteByte(value.CloseAVData);
-            writer.WriteByte(value.SwitchStreamType);
+            writer.WriteByte(value.StreamType);
         }
     }
 }
diff --git a/src/JT808.Protocol.Extensions.JT1078/MessageBody/JT808_0x9105.cs b/src/JT808.Protocol.Extensions.JT1078/MessageBody/JT808_0x9105.cs
index 18f0044..9f10bc9 100644
--- a/src/JT808.Protocol.Extensions.JT1078/MessageBody/JT808_0x9105.cs
+++ b/src/JT808.Protocol.Extensions.JT1078/MessageBody/JT808_0x9105.cs
@@ -13,75 +13,79 @@ namespace JT808.Protocol.Extensions.JT1078.MessageBody
     /// </summary>
     public class JT808_0x9105 : JT808Bodies, IJT808MessagePackFormatter<JT808_0x9105>, IJT808Analyze
     {
+#pragma warning disable CS1591 // 缺少对公共可见类型或成员的 XML 注释
         public override string Description => "实时音视频传输状态通知";
         public override ushort MsgId => 0x9105;
+#pragma warning restore CS1591 // 缺少对公共可见类型或成员的 XML 注释
         /// <summary>
         /// 逻辑通道号
         /// </summary>
-        public byte LogicChannelNo { get; set; }
+        public byte ChannelNo { get; set; }
         /// <summary>
-        /// 丢包率
+        /// 丢包率  
+        /// 当前传输通道的丢包率,数值乘以100之后取整部分
         /// </summary>
-        public byte DropRate  { get; set; }
+        public byte DropRate { get; set; }
 
+        /// <summary>
+        /// 
+        /// </summary>
+        /// <param name="reader"></param>
+        /// <param name="writer"></param>
+        /// <param name="config"></param>
         public void Analyze(ref JT808MessagePackReader reader, Utf8JsonWriter writer, IJT808Config config)
         {
             JT808_0x9105 value = new JT808_0x9105();
-            value.LogicChannelNo = reader.ReadByte();
-            writer.WriteString($"[{value.LogicChannelNo.ReadNumber()}]逻辑通道号", LogicalChannelNoDisplay(value.LogicChannelNo));
+            value.ChannelNo = reader.ReadByte();
+            writer.WriteString($"[{value.ChannelNo.ReadNumber()}]逻辑通道号", LogicalChannelNoDisplay(value.ChannelNo));
             value.DropRate = reader.ReadByte();
             writer.WriteNumber($"[{value.DropRate.ReadNumber()}]丢包率", value.DropRate);
             string LogicalChannelNoDisplay(byte LogicalChannelNo)
             {
-                switch (LogicalChannelNo)
+                return LogicalChannelNo switch
                 {
-                    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 "预留";
-                }
+                    1 => "驾驶员",
+                    2 => "车辆正前方",
+                    3 => "车前门",
+                    4 => "车厢前部",
+                    5 => "车厢后部",
+                    7 => "行李舱",
+                    8 => "车辆左侧",
+                    9 => "车辆右侧",
+                    10 => "车辆正后方",
+                    11 => "车厢中部",
+                    12 => "车中门",
+                    13 => "驾驶席车门",
+                    33 => "驾驶员",
+                    36 => "车厢前部",
+                    37 => "车厢后部",
+                    _ => "预留",
+                };
             }
         }
 
+        /// <summary>
+        /// 
+        /// </summary>
+        /// <param name="reader"></param>
+        /// <param name="config"></param>
+        /// <returns></returns>
         public JT808_0x9105 Deserialize(ref JT808MessagePackReader reader, IJT808Config config)
         {
             JT808_0x9105 jT808_0x9105 = new JT808_0x9105();
-            jT808_0x9105.LogicChannelNo = reader.ReadByte();
+            jT808_0x9105.ChannelNo = reader.ReadByte();
             jT808_0x9105.DropRate = reader.ReadByte();
             return jT808_0x9105;
         }
-
+        /// <summary>
+        /// 
+        /// </summary>
+        /// <param name="writer"></param>
+        /// <param name="value"></param>
+        /// <param name="config"></param>
         public void Serialize(ref JT808MessagePackWriter writer, JT808_0x9105 value, IJT808Config config)
         {
-            writer.WriteByte(value.LogicChannelNo);
+            writer.WriteByte(value.ChannelNo);
             writer.WriteByte(value.DropRate);
         }
     }
diff --git a/src/JT808.Protocol.Extensions.JT1078/MessageBody/JT808_0x9201.cs b/src/JT808.Protocol.Extensions.JT1078/MessageBody/JT808_0x9201.cs
index f81cf33..3aeff31 100644
--- a/src/JT808.Protocol.Extensions.JT1078/MessageBody/JT808_0x9201.cs
+++ b/src/JT808.Protocol.Extensions.JT1078/MessageBody/JT808_0x9201.cs
@@ -9,12 +9,14 @@ using System.Text.Json;
 namespace JT808.Protocol.Extensions.JT1078.MessageBody
 {
     /// <summary>
-    /// 平台下发远程录像回放请求
+    /// 平台下发远程录像回放请求(vod点播请求)
     /// </summary>
     public class JT808_0x9201 : JT808Bodies, IJT808MessagePackFormatter<JT808_0x9201>, IJT808Analyze
     {
+#pragma warning disable CS1591 // 缺少对公共可见类型或成员的 XML 注释
         public override string Description => "平台下发远程录像回放请求";
         public override ushort MsgId => 0x9201;
+#pragma warning restore CS1591 // 缺少对公共可见类型或成员的 XML 注释
         /// <summary>
         /// 服务器IP地址长度
         /// </summary>
@@ -24,49 +26,77 @@ namespace JT808.Protocol.Extensions.JT1078.MessageBody
         /// </summary>
         public string ServerIp { get; set; }
         /// <summary>
-        /// 服务器音视频通道监听端口号TCP
+        /// 视频服务器TCP端口号,不使用TCP协议传输时保持默认值0即可(TCP和UDP二选一,当TCP和UDP均非默认值时一般以TCP为准)
         /// </summary>
         public ushort TcpPort { get; set; }
         /// <summary>
-        /// 服务器音视频通道监听端口号UDP
+        /// 视频服务器UDP端口号,不使用UDP协议传输时保持默认值0即可(TCP和UDP二选一,当TCP和UDP均非默认值时一般以TCP为准)
         /// </summary>
         public ushort UdpPort { get; set; }
         /// <summary>
         /// 逻辑通道号
         /// </summary>
-        public byte LogicChannelNo { get; set; }
+        public byte ChannelNo { get; set; }
         /// <summary>
-        /// 音视频类型
+        /// 音视频类型(媒体类型)
+        /// 0:audio and video
+        /// 1:audio
+        /// 2:video
+        /// 3:audio or video
         /// </summary>
-        public byte AVItemType { get; set; }
+        public byte MediaType { get; set; }
         /// <summary>
         /// 码流类型
+        /// 0:主或子码流
+        /// 1:主
+        /// 2:子
+        /// 如果此通道只传输音频,置为0
         /// </summary>
         public byte StreamType { get; set; }
         /// <summary>
         /// 存储器类型
+        /// 0:主或灾备存储器
+        /// 1:主存储器
+        /// 2:灾备存储器
         /// </summary>
-        public byte MemType { get; set; }
+        public byte MemoryType { get; set; }
         /// <summary>
         /// 回放方式
+        /// 0:正常
+        /// 1:快进
+        /// 2:关键帧快退回放
+        /// 3:关键帧播放
+        /// 4:单帧上传
         /// </summary>
-        public byte PlayBackWay { get; set; }
+        public byte PlaybackWay { get; set; }
         /// <summary>
-        /// 快进或快退倍数
+        /// 快进或快退倍数,当<see cref="PlaybackWay"/>为1和2时,此字段有效,否则置0
+        /// 0:无效
+        /// 1:1倍
+        /// 2:2倍
+        /// 3:4倍
+        /// 4:8倍
+        /// 5:16倍
         /// </summary>
-        public byte FastForwardOrFastRewindMultiples { get; set; }
+        public byte PlaySpeed { get; set; }
         /// <summary>
-        /// 起始时间
+        /// 开始时间,当<see cref="PlaybackWay"/>为4时,该字段表示单帧上传时间
         /// </summary>
         public DateTime BeginTime { get; set; }
         /// <summary>
-        /// 结束时间
+        /// 结束时间,当<see cref="PlaybackWay"/>为4时,该字段无效
         /// </summary>
         public DateTime EndTime { get; set; }
 
+        /// <summary>
+        /// 格式分析
+        /// </summary>
+        /// <param name="reader"></param>
+        /// <param name="writer"></param>
+        /// <param name="config"></param>
         public void Analyze(ref JT808MessagePackReader reader, Utf8JsonWriter writer, IJT808Config config)
         {
-            JT808_0x9201 value = new JT808_0x9201();
+            var value = new JT808_0x9201();
             value.ServerIpLength = reader.ReadByte();
             writer.WriteNumber($"[{value.ServerIpLength.ReadNumber()}]服务器IP地址长度", value.ServerIpLength);
             string ipHex = reader.ReadVirtualArray(value.ServerIpLength).ToArray().ToHexString();
@@ -76,144 +106,107 @@ namespace JT808.Protocol.Extensions.JT1078.MessageBody
             writer.WriteNumber($"[{value.TcpPort.ReadNumber()}]服务器视频通道监听端口号(TCP)", value.TcpPort);
             value.UdpPort = reader.ReadUInt16();
             writer.WriteNumber($"[{value.UdpPort.ReadNumber()}]服务器视频通道监听端口号(UDP)", value.UdpPort);
-            value.LogicChannelNo = reader.ReadByte();
-            writer.WriteString($"[{value.LogicChannelNo.ReadNumber()}]逻辑通道号", LogicalChannelNoDisplay(value.LogicChannelNo));
-            value.AVItemType = reader.ReadByte();
-            writer.WriteString($"[{value.AVItemType.ReadNumber()}]音视频类型", AVItemTypeDisplay(value.AVItemType));
+            value.ChannelNo = reader.ReadByte();
+            writer.WriteString($"[{value.ChannelNo.ReadNumber()}]逻辑通道号", LogicalChannelNoDisplay(value.ChannelNo));
+            value.MediaType = reader.ReadByte();
+            writer.WriteString($"[{value.MediaType.ReadNumber()}]音视频类型", AVItemTypeDisplay(value.MediaType));
             value.StreamType = reader.ReadByte();
             writer.WriteString($"[{value.StreamType.ReadNumber()}]码流类型", StreamTypeDisplay(value.StreamType));
-            value.MemType = reader.ReadByte();
-            writer.WriteString($"[{value.MemType.ReadNumber()}]存储器类型", MemTypeDisplay(value.MemType));
-            value.PlayBackWay = reader.ReadByte();
-            writer.WriteString($"[{value.PlayBackWay.ReadNumber()}]回访方式", PlayBackWayDisplay(value.PlayBackWay));
-            value.FastForwardOrFastRewindMultiples = reader.ReadByte();
-            writer.WriteString($"[{value.FastForwardOrFastRewindMultiples.ReadNumber()}]快进或快退倍数", FastForwardOrFastRewindMultiplesDisplay(value.FastForwardOrFastRewindMultiples));
+            value.MemoryType = reader.ReadByte();
+            writer.WriteString($"[{value.MemoryType.ReadNumber()}]存储器类型", MemTypeDisplay(value.MemoryType));
+            value.PlaybackWay = reader.ReadByte();
+            writer.WriteString($"[{value.PlaybackWay.ReadNumber()}]回访方式", PlayBackWayDisplay(value.PlaybackWay));
+            value.PlaySpeed = reader.ReadByte();
+            writer.WriteString($"[{value.PlaySpeed.ReadNumber()}]快进或快退倍数", FastForwardOrFastRewindMultiplesDisplay(value.PlaySpeed));
             value.BeginTime = reader.ReadDateTime6();
-            writer.WriteString($"[{value.BeginTime.ToString("yyMMddHHmmss")}]起始时间", value.BeginTime.ToString("yyyy-MM-dd HH:mm:ss"));
+            writer.WriteString($"[{value.BeginTime:yyMMddHHmmss}]起始时间", value.BeginTime.ToString("yyyy-MM-dd HH:mm:ss"));
             value.EndTime = reader.ReadDateTime6();
-            writer.WriteString($"[{value.EndTime.ToString("yyMMddHHmmss")}]结束时间", value.EndTime.ToString("yyyy-MM-dd HH:mm:ss"));
-            string AVItemTypeDisplay(byte AVItemType)
+            writer.WriteString($"[{value.EndTime:yyMMddHHmmss}]结束时间", value.EndTime.ToString("yyyy-MM-dd HH:mm:ss"));
+            static string AVItemTypeDisplay(byte AVItemType)
             {
-                switch (AVItemType)
+                return AVItemType switch
                 {
-                    case 0:
-                        return "音视频";
-                    case 1:
-                        return "音频";
-                    case 2:
-                        return "视频";
-                    case 3:
-                        return "音频或视频";
-                    default:
-                        return "未知";
-                }
+                    0 => "音视频",
+                    1 => "音频",
+                    2 => "视频",
+                    3 => "音频或视频",
+                    _ => "未知",
+                };
             }
-            string StreamTypeDisplay(byte StreamType)
+            static string StreamTypeDisplay(byte StreamType)
             {
-                switch (StreamType)
+                return StreamType switch
                 {
-                    case 0:
-                        return "主码流或子码流";
-                    case 1:
-                        return "主码流";
-                    case 2:
-                        return "子码流";
-                    default:
-                        return "未知";
-                }
+                    0 => "主码流或子码流",
+                    1 => "主码流",
+                    2 => "子码流",
+                    _ => "未知",
+                };
             }
-            string MemTypeDisplay(byte MemType)
+            static string MemTypeDisplay(byte MemType)
             {
-                switch (MemType)
+                return MemType switch
                 {
-                    case 0:
-                        return "主存储器或灾备服务器";
-                    case 1:
-                        return "主存储器";
-                    case 2:
-                        return "灾备服务器";
-                    default:
-                        return "未知";
-                }
+                    0 => "主存储器或灾备服务器",
+                    1 => "主存储器",
+                    2 => "灾备服务器",
+                    _ => "未知",
+                };
             }
-            string PlayBackWayDisplay(byte PlayBackWay)
+            static string PlayBackWayDisplay(byte PlayBackWay)
             {
-                switch (PlayBackWay)
+                return PlayBackWay switch
                 {
-                    case 0:
-                        return "正常回放";
-                    case 1:
-                        return "快进回放";
-                    case 2:
-                        return "关键帧快退回访";
-                    case 3:
-                        return "关键帧播放";
-                    case 4:
-                        return "单帧上传";
-                    default:
-                        return "未知";
-                }
+                    0 => "正常回放",
+                    1 => "快进回放",
+                    2 => "关键帧快退回访",
+                    3 => "关键帧播放",
+                    4 => "单帧上传",
+                    _ => "未知",
+                };
             }
-            string FastForwardOrFastRewindMultiplesDisplay(byte FastForwardOrFastRewindMultiples)
+            static string FastForwardOrFastRewindMultiplesDisplay(byte FastForwardOrFastRewindMultiples)
             {
-                switch (FastForwardOrFastRewindMultiples)
+                return FastForwardOrFastRewindMultiples switch
                 {
-                    case 0:
-                        return "无效";
-                    case 1:
-                        return "1倍";
-                    case 2:
-                        return "2倍";
-                    case 3:
-                        return "4倍";
-                    case 4:
-                        return "8倍";
-                    case 5:
-                        return "16倍";
-                    default:
-                        return "未知";
-                }
+                    0 => "无效",
+                    1 => "1倍",
+                    2 => "2倍",
+                    3 => "4倍",
+                    4 => "8倍",
+                    5 => "16倍",
+                    _ => "未知",
+                };
             }
-            string LogicalChannelNoDisplay(byte LogicalChannelNo)
+            static string LogicalChannelNoDisplay(byte LogicalChannelNo)
             {
-                switch (LogicalChannelNo)
+                return LogicalChannelNo switch
                 {
-                    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 "预留";
-                }
+                    1 => "驾驶员",
+                    2 => "车辆正前方",
+                    3 => "车前门",
+                    4 => "车厢前部",
+                    5 => "车厢后部",
+                    7 => "行李舱",
+                    8 => "车辆左侧",
+                    9 => "车辆右侧",
+                    10 => "车辆正后方",
+                    11 => "车厢中部",
+                    12 => "车中门",
+                    13 => "驾驶席车门",
+                    33 => "驾驶员",
+                    36 => "车厢前部",
+                    37 => "车厢后部",
+                    _ => "预留",
+                };
             }
         }
-
+        /// <summary>
+        ///  反序列化
+        /// </summary>
+        /// <param name="reader"></param>
+        /// <param name="config"></param>
+        /// <returns></returns>
         public JT808_0x9201 Deserialize(ref JT808MessagePackReader reader, IJT808Config config)
         {
             JT808_0x9201 jT808_0x9201 = new JT808_0x9201();
@@ -221,17 +214,23 @@ namespace JT808.Protocol.Extensions.JT1078.MessageBody
             jT808_0x9201.ServerIp = reader.ReadString(jT808_0x9201.ServerIpLength);
             jT808_0x9201.TcpPort = reader.ReadUInt16();
             jT808_0x9201.UdpPort = reader.ReadUInt16();
-            jT808_0x9201.LogicChannelNo = reader.ReadByte();
-            jT808_0x9201.AVItemType = reader.ReadByte();
+            jT808_0x9201.ChannelNo = reader.ReadByte();
+            jT808_0x9201.MediaType = reader.ReadByte();
             jT808_0x9201.StreamType = reader.ReadByte();
-            jT808_0x9201.MemType = reader.ReadByte();
-            jT808_0x9201.PlayBackWay = reader.ReadByte();
-            jT808_0x9201.FastForwardOrFastRewindMultiples = reader.ReadByte();
+            jT808_0x9201.MemoryType = reader.ReadByte();
+            jT808_0x9201.PlaybackWay = reader.ReadByte();
+            jT808_0x9201.PlaySpeed = reader.ReadByte();
             jT808_0x9201.BeginTime = reader.ReadDateTime6();
             jT808_0x9201.EndTime = reader.ReadDateTime6();
             return jT808_0x9201;
         }
 
+        /// <summary>
+        /// 序列化
+        /// </summary>
+        /// <param name="writer"></param>
+        /// <param name="value"></param>
+        /// <param name="config"></param>
         public void Serialize(ref JT808MessagePackWriter writer, JT808_0x9201 value, IJT808Config config)
         {
             writer.Skip(1, out int position);
@@ -239,12 +238,12 @@ namespace JT808.Protocol.Extensions.JT1078.MessageBody
             writer.WriteByteReturn((byte)(writer.GetCurrentPosition() - position - 1), position);//计算完字符串后,回写字符串长度
             writer.WriteUInt16(value.TcpPort);
             writer.WriteUInt16(value.UdpPort);
-            writer.WriteByte(value.LogicChannelNo);
-            writer.WriteByte(value.AVItemType);
+            writer.WriteByte(value.ChannelNo);
+            writer.WriteByte(value.MediaType);
             writer.WriteByte(value.StreamType);
-            writer.WriteByte(value.MemType);
-            writer.WriteByte(value.PlayBackWay);
-            writer.WriteByte(value.FastForwardOrFastRewindMultiples);
+            writer.WriteByte(value.MemoryType);
+            writer.WriteByte(value.PlaybackWay);
+            writer.WriteByte(value.PlaySpeed);
             writer.WriteDateTime6(value.BeginTime);
             writer.WriteDateTime6(value.EndTime);
         }
diff --git a/src/JT808.Protocol.Extensions.JT1078/MessageBody/JT808_0x9202.cs b/src/JT808.Protocol.Extensions.JT1078/MessageBody/JT808_0x9202.cs
index 1278be5..f7a67fe 100644
--- a/src/JT808.Protocol.Extensions.JT1078/MessageBody/JT808_0x9202.cs
+++ b/src/JT808.Protocol.Extensions.JT1078/MessageBody/JT808_0x9202.cs
@@ -9,137 +9,136 @@ using System.Text.Json;
 namespace JT808.Protocol.Extensions.JT1078.MessageBody
 {
     /// <summary>
-    /// 平台下发远程录像回放控制
+    /// 平台下发远程录像回放控制(VodControl点播控制)
     /// </summary>
     public class JT808_0x9202 : JT808Bodies, IJT808MessagePackFormatter<JT808_0x9202>, IJT808Analyze
     {
+#pragma warning disable CS1591 // 缺少对公共可见类型或成员的 XML 注释
         public override string Description => "平台下发远程录像回放控制";
         public override ushort MsgId => 0x9202;
+#pragma warning restore CS1591 // 缺少对公共可见类型或成员的 XML 注释
         /// <summary>
         /// 音视频通道号
         /// </summary>
-        public byte AVChannelNo { get; set; }
+        public byte ChannelNo { get; set; }
         /// <summary>
         /// 回放控制
+        /// 0:开始
+        /// 1:暂停
+        /// 2:结束
+        /// 3:快进
+        /// 4:关键帧快退播放
+        /// 5:拖动(到指定位置)
+        /// 6:关键帧播放
         /// </summary>
-        public byte PlayBackControl { get; set; }
+        public byte PlayControl { get; set; }
         /// <summary>
-        /// 快进或快退倍数
+        /// 快进或快退倍数,当<see cref="PlayControl"/>为3和4时,此字段有效,否则置0
+        /// 0:无效
+        /// 1:1倍
+        /// 2:2倍
+        /// 3:4倍
+        /// 4:8倍
+        /// 5:16倍
         /// </summary>
-        public byte FastForwardOrFastRewindMultiples { get; set; }
+        public byte PlaySpeed { get; set; }
         /// <summary>
-        /// 拖动回放位置
+        /// 拖动回放位置,当<see cref="PlayControl"/>为5时有效(必须)
         /// </summary>
-        public DateTime DragPlaybackPosition { get; set; }
-
+        public DateTime DragPlayPosition { get; set; }
+        /// <summary>
+        /// 
+        /// </summary>
+        /// <param name="reader"></param>
+        /// <param name="writer"></param>
+        /// <param name="config"></param>
         public void Analyze(ref JT808MessagePackReader reader, Utf8JsonWriter writer, IJT808Config config)
         {
             JT808_0x9202 value = new JT808_0x9202();
-            value.AVChannelNo = reader.ReadByte();
-            writer.WriteString($"[{value.AVChannelNo.ReadNumber()}]音视频通道号", AVChannelNoDisplay(value.AVChannelNo));
-            value.PlayBackControl = reader.ReadByte();
-            writer.WriteString($"[{value.PlayBackControl.ReadNumber()}]回放控制", PlayBackControlDisplay(value.PlayBackControl));
-            value.FastForwardOrFastRewindMultiples = reader.ReadByte();
-            writer.WriteString($"[{value.FastForwardOrFastRewindMultiples.ReadNumber()}]快进或快退倍数", FastForwardOrFastRewindMultiplesDisplay(value.FastForwardOrFastRewindMultiples));
-            value.DragPlaybackPosition = reader.ReadDateTime6();
-            writer.WriteString($"[{value.DragPlaybackPosition.ToString("yyMMddHHmmss")}]拖动回放位置", value.DragPlaybackPosition.ToString("yyyy-MM-dd HH:mm:ss"));
-            string AVChannelNoDisplay(byte LogicalChannelNo)
+            value.ChannelNo = reader.ReadByte();
+            writer.WriteString($"[{value.ChannelNo.ReadNumber()}]音视频通道号", AVChannelNoDisplay(value.ChannelNo));
+            value.PlayControl = reader.ReadByte();
+            writer.WriteString($"[{value.PlayControl.ReadNumber()}]回放控制", PlayBackControlDisplay(value.PlayControl));
+            value.PlaySpeed = reader.ReadByte();
+            writer.WriteString($"[{value.PlaySpeed.ReadNumber()}]快进或快退倍数", FastForwardOrFastRewindMultiplesDisplay(value.PlaySpeed));
+            value.DragPlayPosition = reader.ReadDateTime6();
+            writer.WriteString($"[{value.DragPlayPosition.ToString("yyMMddHHmmss")}]拖动回放位置", value.DragPlayPosition.ToString("yyyy-MM-dd HH:mm:ss"));
+            static string AVChannelNoDisplay(byte LogicalChannelNo)
             {
-                switch (LogicalChannelNo)
+                return LogicalChannelNo switch
                 {
-                    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 "预留";
-                }
+                    1 => "驾驶员",
+                    2 => "车辆正前方",
+                    3 => "车前门",
+                    4 => "车厢前部",
+                    5 => "车厢后部",
+                    7 => "行李舱",
+                    8 => "车辆左侧",
+                    9 => "车辆右侧",
+                    10 => "车辆正后方",
+                    11 => "车厢中部",
+                    12 => "车中门",
+                    13 => "驾驶席车门",
+                    33 => "驾驶员",
+                    36 => "车厢前部",
+                    37 => "车厢后部",
+                    _ => "预留",
+                };
             }
-            string PlayBackControlDisplay(byte PlayBackControl) {
-                switch (PlayBackControl)
+            static string PlayBackControlDisplay(byte PlayBackControl) {
+                return PlayBackControl switch
                 {
-                    case 0:
-                        return "开始回放";
-                    case 1:
-                        return "暂停回放";
-                    case 2:
-                        return "结束回放";
-                    case 3:
-                        return "快进回放";
-                    case 4:
-                        return "关键帧快退回放";
-                    case 5:
-                        return "拖动回放";
-                    case 6:
-                        return "关键帧播放";
-                    default:
-                        return "未知";
-                }
+                    0 => "开始回放",
+                    1 => "暂停回放",
+                    2 => "结束回放",
+                    3 => "快进回放",
+                    4 => "关键帧快退回放",
+                    5 => "拖动回放",
+                    6 => "关键帧播放",
+                    _ => "未知",
+                };
             }
-            string FastForwardOrFastRewindMultiplesDisplay(byte FastForwardOrFastRewindMultiples)
+            static string FastForwardOrFastRewindMultiplesDisplay(byte FastForwardOrFastRewindMultiples)
             {
-                switch (FastForwardOrFastRewindMultiples)
+                return FastForwardOrFastRewindMultiples switch
                 {
-                    case 0:
-                        return "无效";
-                    case 1:
-                        return "1倍";
-                    case 2:
-                        return "2倍";
-                    case 3:
-                        return "4倍";
-                    case 4:
-                        return "8倍";
-                    case 5:
-                        return "16倍";
-                    default:
-                        return "未知";
-                }
+                    0 => "无效",
+                    1 => "1倍",
+                    2 => "2倍",
+                    3 => "4倍",
+                    4 => "8倍",
+                    5 => "16倍",
+                    _ => "未知",
+                };
             }
         }
-
+        /// <summary>
+        /// 
+        /// </summary>
+        /// <param name="reader"></param>
+        /// <param name="config"></param>
+        /// <returns></returns>
         public JT808_0x9202 Deserialize(ref JT808MessagePackReader reader, IJT808Config config)
         {
-            JT808_0x9202 jT808_0x9202 = new JT808_0x9202();
-            jT808_0x9202.AVChannelNo = reader.ReadByte();
-            jT808_0x9202.PlayBackControl = reader.ReadByte();
-            jT808_0x9202.FastForwardOrFastRewindMultiples = reader.ReadByte();
-            jT808_0x9202.DragPlaybackPosition = reader.ReadDateTime6();
+            var jT808_0x9202 = new JT808_0x9202();
+            jT808_0x9202.ChannelNo = reader.ReadByte();
+            jT808_0x9202.PlayControl = reader.ReadByte();
+            jT808_0x9202.PlaySpeed = reader.ReadByte();
+            jT808_0x9202.DragPlayPosition = reader.ReadDateTime6();
             return jT808_0x9202;
         }
-
+        /// <summary>
+        /// 
+        /// </summary>
+        /// <param name="writer"></param>
+        /// <param name="value"></param>
+        /// <param name="config"></param>
         public void Serialize(ref JT808MessagePackWriter writer, JT808_0x9202 value, IJT808Config config)
         {
-            writer.WriteByte(value.AVChannelNo);
-            writer.WriteByte(value.PlayBackControl);
-            writer.WriteByte(value.FastForwardOrFastRewindMultiples);
-            writer.WriteDateTime6(value.DragPlaybackPosition);
+            writer.WriteByte(value.ChannelNo);
+            writer.WriteByte(value.PlayControl);
+            writer.WriteByte(value.PlaySpeed);
+            writer.WriteDateTime6(value.DragPlayPosition);
         }
     }
 }
diff --git a/src/JT808.Protocol.Extensions.JT1078/MessageBody/JT808_0x9205.cs b/src/JT808.Protocol.Extensions.JT1078/MessageBody/JT808_0x9205.cs
index a88b5f1..a882789 100644
--- a/src/JT808.Protocol.Extensions.JT1078/MessageBody/JT808_0x9205.cs
+++ b/src/JT808.Protocol.Extensions.JT1078/MessageBody/JT808_0x9205.cs
@@ -13,12 +13,14 @@ namespace JT808.Protocol.Extensions.JT1078.MessageBody
     /// </summary>
     public class JT808_0x9205 : JT808Bodies, IJT808MessagePackFormatter<JT808_0x9205>, IJT808Analyze
     {
+#pragma warning disable CS1591 // 缺少对公共可见类型或成员的 XML 注释
         public override string Description => "查询资源列表";
         public override ushort MsgId => 0x9205;
+#pragma warning restore CS1591 // 缺少对公共可见类型或成员的 XML 注释
         /// <summary>
         /// 逻辑通道号
         /// </summary>
-        public byte LogicChannelNo { get; set; }
+        public byte ChannelNo { get; set; }
         /// <summary>
         /// 开始时间
         /// </summary>
@@ -33,127 +35,108 @@ namespace JT808.Protocol.Extensions.JT1078.MessageBody
         public ulong AlarmFlag { get; set; }
         /// <summary>
         /// 音视频资源类型
+        /// 0:audio and video
+        /// 1:audio
+        /// 2:video
+        /// 3:audio or video
         /// </summary>
-        public byte AVResourceType { get; set; }
+        public byte MediaType { get; set; }
         /// <summary>
         /// 码流类型
+        /// 0:主或子码流
+        /// 1:主
+        /// 2:子
         /// </summary>
         public byte StreamType { get; set; }
         /// <summary>
         /// 存储器类型
+        /// 0:主或灾备存储器
+        /// 1:主存储器
+        /// 2:灾备存储器
         /// </summary>
         public byte MemoryType { get; set; }
-
+#pragma warning disable CS1591 // 缺少对公共可见类型或成员的 XML 注释
         public void Analyze(ref JT808MessagePackReader reader, Utf8JsonWriter writer, IJT808Config config)
         {
             JT808_0x9205 value = new JT808_0x9205();
-            value.LogicChannelNo = reader.ReadByte();
-            writer.WriteString($"[{value.LogicChannelNo.ReadNumber()}]逻辑通道号", LogicalChannelNoDisplay(value.LogicChannelNo));
+            value.ChannelNo = reader.ReadByte();
+            writer.WriteString($"[{value.ChannelNo.ReadNumber()}]逻辑通道号", LogicalChannelNoDisplay(value.ChannelNo));
             value.BeginTime = reader.ReadDateTime6();
             writer.WriteString($"[{value.BeginTime.ToString("yyMMddHHmmss")}]起始时间", value.BeginTime.ToString("yyyy-MM-dd HH:mm:ss"));
             value.EndTime = reader.ReadDateTime6();
             writer.WriteString($"[{value.EndTime.ToString("yyMMddHHmmss")}]起始时间", value.EndTime.ToString("yyyy-MM-dd HH:mm:ss"));
             value.AlarmFlag = reader.ReadUInt64();
             writer.WriteNumber($"[{value.AlarmFlag.ReadNumber()}]报警标志", value.AlarmFlag);
-            value.AVResourceType = reader.ReadByte();
-            writer.WriteString($"[{value.AVResourceType.ReadNumber()}]音视频类型", AVResourceTypeDisplay(value.AVResourceType));
+            value.MediaType = reader.ReadByte();
+            writer.WriteString($"[{value.MediaType.ReadNumber()}]音视频类型", AVResourceTypeDisplay(value.MediaType));
             value.StreamType = reader.ReadByte();
             writer.WriteString($"[{value.StreamType.ReadNumber()}]码流类型", StreamTypeDisplay(value.StreamType));
             value.MemoryType = reader.ReadByte();
             writer.WriteString($"[{value.MemoryType.ReadNumber()}]存储器类型", MemoryTypeDisplay(value.MemoryType));
 
-            string AVResourceTypeDisplay(byte AVResourceType)
+            static string AVResourceTypeDisplay(byte AVResourceType)
             {
-                switch (AVResourceType)
+                return AVResourceType switch
                 {
-                    case 0:
-                        return "音视频";
-                    case 1:
-                        return "音频";
-                    case 2:
-                        return "视频";
-                    case 3:
-                        return "音频或视频";
-                    default:
-                        return "未知";
-                }
+                    0 => "音视频",
+                    1 => "音频",
+                    2 => "视频",
+                    3 => "音频或视频",
+                    _ => "未知",
+                };
             }
-            string StreamTypeDisplay(byte StreamType)
+            static string StreamTypeDisplay(byte StreamType)
             {
-                switch (StreamType)
+                return StreamType switch
                 {
-                    case 0:
-                        return "所有码流";
-                    case 1:
-                        return "主码流";
-                    case 2:
-                        return "子码流";
-                    default:
-                        return "未知";
-                }
+                    0 => "所有码流",
+                    1 => "主码流",
+                    2 => "子码流",
+                    _ => "未知",
+                };
             }
-            string MemoryTypeDisplay(byte MemType)
+            static string MemoryTypeDisplay(byte MemType)
             {
-                switch (MemType)
+                return MemType switch
                 {
-                    case 0:
-                        return "所有存储器";
-                    case 1:
-                        return "主存储器";
-                    case 2:
-                        return "灾备服务器";
-                    default:
-                        return "未知";
-                }
+                    0 => "所有存储器",
+                    1 => "主存储器",
+                    2 => "灾备服务器",
+                    _ => "未知",
+                };
             }
-            string LogicalChannelNoDisplay(byte LogicalChannelNo)
+            static string LogicalChannelNoDisplay(byte LogicalChannelNo)
             {
-                switch (LogicalChannelNo)
+                return LogicalChannelNo switch
                 {
-                    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 "预留";
-                }
+                    1 => "驾驶员",
+                    2 => "车辆正前方",
+                    3 => "车前门",
+                    4 => "车厢前部",
+                    5 => "车厢后部",
+                    7 => "行李舱",
+                    8 => "车辆左侧",
+                    9 => "车辆右侧",
+                    10 => "车辆正后方",
+                    11 => "车厢中部",
+                    12 => "车中门",
+                    13 => "驾驶席车门",
+                    33 => "驾驶员",
+                    36 => "车厢前部",
+                    37 => "车厢后部",
+                    _ => "预留",
+                };
             }
         }
 
         public JT808_0x9205 Deserialize(ref JT808MessagePackReader reader, IJT808Config config)
         {
-            JT808_0x9205 jT808_0x9205 = new JT808_0x9205();
-            jT808_0x9205.LogicChannelNo = reader.ReadByte();
+            var jT808_0x9205 = new JT808_0x9205();
+            jT808_0x9205.ChannelNo = reader.ReadByte();
             jT808_0x9205.BeginTime = reader.ReadDateTime6();
             jT808_0x9205.EndTime = reader.ReadDateTime6();
             jT808_0x9205.AlarmFlag = reader.ReadUInt64();
-            jT808_0x9205.AVResourceType = reader.ReadByte();
+            jT808_0x9205.MediaType = reader.ReadByte();
             jT808_0x9205.StreamType = reader.ReadByte();
             jT808_0x9205.MemoryType = reader.ReadByte();
             return jT808_0x9205;
@@ -161,13 +144,14 @@ namespace JT808.Protocol.Extensions.JT1078.MessageBody
 
         public void Serialize(ref JT808MessagePackWriter writer, JT808_0x9205 value, IJT808Config config)
         {
-            writer.WriteByte(value.LogicChannelNo);
+            writer.WriteByte(value.ChannelNo);
             writer.WriteDateTime6(value.BeginTime);
             writer.WriteDateTime6(value.EndTime);
             writer.WriteUInt64(value.AlarmFlag);
-            writer.WriteByte(value.AVResourceType);
+            writer.WriteByte(value.MediaType);
             writer.WriteByte(value.StreamType);
             writer.WriteByte(value.MemoryType);
         }
+#pragma warning restore CS1591 // 缺少对公共可见类型或成员的 XML 注释
     }
 }
diff --git a/src/JT808.Protocol.Extensions.JT1078/MessageBody/JT808_0x9206.cs b/src/JT808.Protocol.Extensions.JT1078/MessageBody/JT808_0x9206.cs
index 068b081..5e795f6 100644
--- a/src/JT808.Protocol.Extensions.JT1078/MessageBody/JT808_0x9206.cs
+++ b/src/JT808.Protocol.Extensions.JT1078/MessageBody/JT808_0x9206.cs
@@ -13,12 +13,14 @@ namespace JT808.Protocol.Extensions.JT1078.MessageBody
     /// </summary>
     public class JT808_0x9206 : JT808Bodies, IJT808MessagePackFormatter<JT808_0x9206>, IJT808Analyze
     {
+#pragma warning disable CS1591 // 缺少对公共可见类型或成员的 XML 注释
         public override string Description => "文件上传指令";
         public override ushort MsgId => 0x9206;
+#pragma warning restore CS1591 // 缺少对公共可见类型或成员的 XML 注释
         /// <summary>
         /// 服务器IP地址服务
         /// </summary>
-        public byte ServerIpLength { get; set; }
+        public byte ServerIpLength { get;internal set; }
         /// <summary>
         /// 服务器IP地址
         /// </summary>
@@ -30,7 +32,7 @@ namespace JT808.Protocol.Extensions.JT1078.MessageBody
         /// <summary>
         /// 用户名长度
         /// </summary>
-        public byte UserNameLength { get; set; }
+        public byte UserNameLength { get; internal set; }
         /// <summary>
         /// 用户名
         /// </summary>
@@ -38,7 +40,7 @@ namespace JT808.Protocol.Extensions.JT1078.MessageBody
         /// <summary>
         /// 密码长度
         /// </summary>
-        public byte PasswordLength { get; set; }
+        public byte PasswordLength { get; internal set; }
         /// <summary>
         /// 密码
         /// </summary>
@@ -46,7 +48,7 @@ namespace JT808.Protocol.Extensions.JT1078.MessageBody
         /// <summary>
         /// 文件上传路径长度
         /// </summary>
-        public byte FileUploadPathLength { get; set; }
+        public byte FileUploadPathLength { get; internal set; }
         /// <summary>
         /// 文件上传路径
         /// </summary>
@@ -54,7 +56,7 @@ namespace JT808.Protocol.Extensions.JT1078.MessageBody
         /// <summary>
         /// 逻辑通道号
         /// </summary>
-        public byte LogicChannelNo { get; set; }
+        public byte ChannelNo { get; set; }
         /// <summary>
         /// 起始时间
         /// </summary>
@@ -70,7 +72,7 @@ namespace JT808.Protocol.Extensions.JT1078.MessageBody
         /// <summary>
         /// 音视频资源类型
         /// </summary>
-        public byte AVResourceType { get; set; }
+        public byte MediaType { get; set; }
         /// <summary>
         /// 码流类型
         /// </summary>
@@ -84,6 +86,7 @@ namespace JT808.Protocol.Extensions.JT1078.MessageBody
         /// </summary>
         public byte TaskExcuteCondition { get; set; }
 
+#pragma warning disable CS1591 // 缺少对公共可见类型或成员的 XML 注释
         public void Analyze(ref JT808MessagePackReader reader, Utf8JsonWriter writer, IJT808Config config)
         {
             JT808_0x9206 value = new JT808_0x9206();
@@ -110,16 +113,16 @@ namespace JT808.Protocol.Extensions.JT1078.MessageBody
             value.FileUploadPath = reader.ReadString(value.FileUploadPathLength);
             writer.WriteString($"[{fileUploadPathHex}]文件上传路径", value.FileUploadPath);
 
-            value.LogicChannelNo = reader.ReadByte();
-            writer.WriteString($"[{value.LogicChannelNo.ReadNumber()}]逻辑通道号", LogicalChannelNoDisplay(value.LogicChannelNo));
+            value.ChannelNo = reader.ReadByte();
+            writer.WriteString($"[{value.ChannelNo.ReadNumber()}]逻辑通道号", LogicalChannelNoDisplay(value.ChannelNo));
             value.BeginTime = reader.ReadDateTime6();
             writer.WriteString($"[{value.BeginTime.ToString("yyMMddHHmmss")}]起始时间", value.BeginTime.ToString("yyyy-MM-dd HH:mm:ss"));
             value.EndTime = reader.ReadDateTime6();
             writer.WriteString($"[{value.EndTime.ToString("yyMMddHHmmss")}]起始时间", value.EndTime.ToString("yyyy-MM-dd HH:mm:ss"));
             value.AlarmFlag = reader.ReadUInt32();
             writer.WriteNumber($"[{value.AlarmFlag.ReadNumber()}]报警标志", value.AlarmFlag);
-            value.AVResourceType = reader.ReadByte();
-            writer.WriteString($"[{value.AVResourceType.ReadNumber()}]音视频类型", AVResourceTypeDisplay(value.AVResourceType));
+            value.MediaType = reader.ReadByte();
+            writer.WriteString($"[{value.MediaType.ReadNumber()}]音视频类型", AVResourceTypeDisplay(value.MediaType));
             value.StreamType = reader.ReadByte();
             writer.WriteString($"[{value.StreamType.ReadNumber()}]码流类型", StreamTypeDisplay(value.StreamType));
             value.MemoryPositon = reader.ReadByte();
@@ -127,90 +130,61 @@ namespace JT808.Protocol.Extensions.JT1078.MessageBody
             value.TaskExcuteCondition = reader.ReadByte();
             writer.WriteString($"[{value.TaskExcuteCondition.ReadNumber()}]任务执行条件", TaskExcuteConditionDisplay(value.TaskExcuteCondition));
 
-            string AVResourceTypeDisplay(byte AVResourceType)
+            static string AVResourceTypeDisplay(byte AVResourceType)
             {
-                switch (AVResourceType)
+                return AVResourceType switch
                 {
-                    case 0:
-                        return "音视频";
-                    case 1:
-                        return "音频";
-                    case 2:
-                        return "视频";
-                    case 3:
-                        return "音频或视频";
-                    default:
-                        return "未知";
-                }
+                    0 => "音视频",
+                    1 => "音频",
+                    2 => "视频",
+                    3 => "音频或视频",
+                    _ => "未知",
+                };
             }
-            string StreamTypeDisplay(byte StreamType)
+            static string StreamTypeDisplay(byte StreamType)
             {
-                switch (StreamType)
+                return StreamType switch
                 {
-                    case 0:
-                        return "所有码流";
-                    case 1:
-                        return "主码流";
-                    case 2:
-                        return "子码流";
-                    default:
-                        return "未知";
-                }
+                    0 => "所有码流",
+                    1 => "主码流",
+                    2 => "子码流",
+                    _ => "未知",
+                };
             }
-            string MemoryPositonDisplay(byte MemoryPositon)
+            static string MemoryPositonDisplay(byte MemoryPositon)
             {
-                switch (MemoryPositon)
+                return MemoryPositon switch
                 {
-                    case 0:
-                        return "主存储器或灾备服务器";
-                    case 1:
-                        return "主存储器";
-                    case 2:
-                        return "灾备服务器";
-                    default:
-                        return "未知";
-                }
+                    0 => "主存储器或灾备服务器",
+                    1 => "主存储器",
+                    2 => "灾备服务器",
+                    _ => "未知",
+                };
             }
-            string LogicalChannelNoDisplay(byte LogicalChannelNo)
+            static string LogicalChannelNoDisplay(byte LogicalChannelNo)
             {
-                switch (LogicalChannelNo)
+                return LogicalChannelNo switch
                 {
-                    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 "预留";
-                }
+                    1 => "驾驶员",
+                    2 => "车辆正前方",
+                    3 => "车前门",
+                    4 => "车厢前部",
+                    5 => "车厢后部",
+                    7 => "行李舱",
+                    8 => "车辆左侧",
+                    9 => "车辆右侧",
+                    10 => "车辆正后方",
+                    11 => "车厢中部",
+                    12 => "车中门",
+                    13 => "驾驶席车门",
+                    33 => "驾驶员",
+                    36 => "车厢前部",
+                    37 => "车厢后部",
+                    _ => "预留",
+                };
             }
-            string TaskExcuteConditionDisplay(byte TaskExcuteCondition) {
-                string taskExcuteConditionDisplay = string.Empty;
+            static string TaskExcuteConditionDisplay(byte TaskExcuteCondition) {
+                var taskExcuteConditionDisplay = string.Empty;
                 taskExcuteConditionDisplay += (TaskExcuteCondition & 0x01) == 1 ? ",WIFI":"";
                 taskExcuteConditionDisplay += (TaskExcuteCondition & 0x01) == 1 ? ",LAN" : "";
                 taskExcuteConditionDisplay += (TaskExcuteCondition & 0x01) == 1 ? ",3G/4G" : "";
@@ -220,7 +194,7 @@ namespace JT808.Protocol.Extensions.JT1078.MessageBody
 
         public JT808_0x9206 Deserialize(ref JT808MessagePackReader reader, IJT808Config config)
         {
-            JT808_0x9206 jT808_0x9206 = new JT808_0x9206();
+            var jT808_0x9206 = new JT808_0x9206();
             jT808_0x9206.ServerIpLength = reader.ReadByte();
             jT808_0x9206.ServerIp = reader.ReadString(jT808_0x9206.ServerIpLength);
             jT808_0x9206.Port = reader.ReadUInt16();
@@ -230,11 +204,11 @@ namespace JT808.Protocol.Extensions.JT1078.MessageBody
             jT808_0x9206.Password = reader.ReadString(jT808_0x9206.PasswordLength);
             jT808_0x9206.FileUploadPathLength = reader.ReadByte();
             jT808_0x9206.FileUploadPath = reader.ReadString(jT808_0x9206.FileUploadPathLength);
-            jT808_0x9206.LogicChannelNo = reader.ReadByte();
+            jT808_0x9206.ChannelNo = reader.ReadByte();
             jT808_0x9206.BeginTime = reader.ReadDateTime6();
             jT808_0x9206.EndTime = reader.ReadDateTime6();
             jT808_0x9206.AlarmFlag = reader.ReadUInt32();
-            jT808_0x9206.AVResourceType = reader.ReadByte();
+            jT808_0x9206.MediaType = reader.ReadByte();
             jT808_0x9206.StreamType = reader.ReadByte();
             jT808_0x9206.MemoryPositon = reader.ReadByte();
             jT808_0x9206.TaskExcuteCondition = reader.ReadByte();
@@ -256,14 +230,15 @@ namespace JT808.Protocol.Extensions.JT1078.MessageBody
             writer.Skip(1, out int fileUploadPathLengthLengthposition);
             writer.WriteString(value.FileUploadPath);
             writer.WriteByteReturn((byte)(writer.GetCurrentPosition() - fileUploadPathLengthLengthposition - 1), fileUploadPathLengthLengthposition);
-            writer.WriteByte(value.LogicChannelNo);
+            writer.WriteByte(value.ChannelNo);
             writer.WriteDateTime6(value.BeginTime);
             writer.WriteDateTime6(value.EndTime);
             writer.WriteUInt32(value.AlarmFlag);
-            writer.WriteByte(value.AVResourceType);
+            writer.WriteByte(value.MediaType);
             writer.WriteByte(value.StreamType);
             writer.WriteByte(value.MemoryPositon);
             writer.WriteByte(value.TaskExcuteCondition);
         }
+#pragma warning restore CS1591 // 缺少对公共可见类型或成员的 XML 注释
     }
 }
diff --git a/src/JT808.Protocol.Extensions.JT1078/MessageBody/JT808_0x9207.cs b/src/JT808.Protocol.Extensions.JT1078/MessageBody/JT808_0x9207.cs
index 1f54bc5..0867ffd 100644
--- a/src/JT808.Protocol.Extensions.JT1078/MessageBody/JT808_0x9207.cs
+++ b/src/JT808.Protocol.Extensions.JT1078/MessageBody/JT808_0x9207.cs
@@ -13,8 +13,10 @@ namespace JT808.Protocol.Extensions.JT1078.MessageBody
     /// </summary>
     public class JT808_0x9207 : JT808Bodies, IJT808MessagePackFormatter<JT808_0x9207>, IJT808Analyze
     {
+#pragma warning disable CS1591 // 缺少对公共可见类型或成员的 XML 注释
         public override string Description => "文件上传控制";
         public override ushort MsgId => 0x9207;
+#pragma warning restore CS1591 // 缺少对公共可见类型或成员的 XML 注释
         /// <summary>
         /// 流水号
         /// </summary>
@@ -24,6 +26,7 @@ namespace JT808.Protocol.Extensions.JT1078.MessageBody
         /// </summary>
         public byte UploadControl { get; set; }
 
+#pragma warning disable CS1591 // 缺少对公共可见类型或成员的 XML 注释
         public void Analyze(ref JT808MessagePackReader reader, Utf8JsonWriter writer, IJT808Config config)
         {
             JT808_0x9207 value = new JT808_0x9207();
@@ -31,24 +34,20 @@ namespace JT808.Protocol.Extensions.JT1078.MessageBody
             writer.WriteNumber($"[{value.MgsNum.ReadNumber()}]流水号", value.MgsNum);
             value.UploadControl = reader.ReadByte();
             writer.WriteString($"[{value.UploadControl.ReadNumber()}]上传控制", UploadControlDisplay(value.UploadControl));
-            string UploadControlDisplay(byte UploadControl) {
-                switch (UploadControl)
+            static string UploadControlDisplay(byte UploadControl) {
+                return UploadControl switch
                 {
-                    case 0:
-                        return "暂停";
-                    case 1:
-                        return "继续";
-                    case 2:
-                        return "取消";
-                    default:
-                        return "未知";
-                }
+                    0 => "暂停",
+                    1 => "继续",
+                    2 => "取消",
+                    _ => "未知",
+                };
             }
         }
 
         public JT808_0x9207 Deserialize(ref JT808MessagePackReader reader, IJT808Config config)
         {
-            JT808_0x9207 jT808_0x9207 = new JT808_0x9207();
+            var jT808_0x9207 = new JT808_0x9207();
             jT808_0x9207.MgsNum = reader.ReadUInt16();
             jT808_0x9207.UploadControl = reader.ReadByte();
             return jT808_0x9207;
@@ -59,5 +58,6 @@ namespace JT808.Protocol.Extensions.JT1078.MessageBody
             writer.WriteUInt16(value.MgsNum);
             writer.WriteByte(value.UploadControl);
         }
+#pragma warning restore CS1591 // 缺少对公共可见类型或成员的 XML 注释
     }
 }
diff --git a/src/JT808.Protocol.Extensions.JT1078/MessageBody/JT808_0x9301.cs b/src/JT808.Protocol.Extensions.JT1078/MessageBody/JT808_0x9301.cs
index e689e88..bbc7737 100644
--- a/src/JT808.Protocol.Extensions.JT1078/MessageBody/JT808_0x9301.cs
+++ b/src/JT808.Protocol.Extensions.JT1078/MessageBody/JT808_0x9301.cs
@@ -13,91 +13,77 @@ namespace JT808.Protocol.Extensions.JT1078.MessageBody
     /// </summary>
     public class JT808_0x9301 : JT808Bodies, IJT808MessagePackFormatter<JT808_0x9301>, IJT808Analyze
     {
+#pragma warning disable CS1591 // 缺少对公共可见类型或成员的 XML 注释
         public override string Description => "云台旋转";
         public override ushort MsgId => 0x9301;
+#pragma warning restore CS1591 // 缺少对公共可见类型或成员的 XML 注释
         /// <summary>
         /// 逻辑通道号
         /// </summary>
-        public byte LogicChannelNo { get; set; }
+        public byte ChannelNo { get; set; }
         /// <summary>
         /// 方向
+        /// 0:停止
+        /// 1:上
+        /// 2:下
+        /// 3:左
+        /// 4:右
         /// </summary>
         public byte Direction { get; set; }
         /// <summary>
         /// 速度
+        /// 0-255
         /// </summary>
         public byte Speed { get; set; }
-
+#pragma warning disable CS1591 // 缺少对公共可见类型或成员的 XML 注释
         public void Analyze(ref JT808MessagePackReader reader, Utf8JsonWriter writer, IJT808Config config)
         {
             JT808_0x9301 value = new JT808_0x9301();
-            value.LogicChannelNo = reader.ReadByte();
-            writer.WriteString($"[{value.LogicChannelNo.ReadNumber()}]逻辑通道号", LogicalChannelNoDisplay(value.LogicChannelNo));
+            value.ChannelNo = reader.ReadByte();
+            writer.WriteString($"[{value.ChannelNo.ReadNumber()}]逻辑通道号", LogicalChannelNoDisplay(value.ChannelNo));
             value.Direction = reader.ReadByte();
             writer.WriteString($"[{value.Direction.ReadNumber()}]方向", DirectionDisplay(value.Direction));
             value.Speed = reader.ReadByte();
             writer.WriteNumber($"[{value.Speed.ReadNumber()}]速度", value.Speed);
-            string LogicalChannelNoDisplay(byte LogicalChannelNo)
+            static string LogicalChannelNoDisplay(byte LogicalChannelNo)
             {
-                switch (LogicalChannelNo)
+                return LogicalChannelNo switch
                 {
-                    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 "预留";
-                }
+                    1 => "驾驶员",
+                    2 => "车辆正前方",
+                    3 => "车前门",
+                    4 => "车厢前部",
+                    5 => "车厢后部",
+                    7 => "行李舱",
+                    8 => "车辆左侧",
+                    9 => "车辆右侧",
+                    10 => "车辆正后方",
+                    11 => "车厢中部",
+                    12 => "车中门",
+                    13 => "驾驶席车门",
+                    33 => "驾驶员",
+                    36 => "车厢前部",
+                    37 => "车厢后部",
+                    _ => "预留",
+                };
             }
-            string DirectionDisplay(byte Direction) {
-                switch (Direction)
+            static string DirectionDisplay(byte Direction) {
+                return Direction switch
                 {
-                    case 0:
-                        return "停止";
-                    case 1:
-                        return "上";
-                    case 2:
-                        return "下";
-                    case 3:
-                        return "左";
-                    case 4:
-                        return "右";
-                    default:
-                        return "未知";
-                }
+                    0 => "停止",
+                    1 => "上",
+                    2 => "下",
+                    3 => "左",
+                    4 => "右",
+                    _ => "未知",
+                };
             }
         }
 
         public JT808_0x9301 Deserialize(ref JT808MessagePackReader reader, IJT808Config config)
         {
-            JT808_0x9301 jT808_0x9301 = new JT808_0x9301();
-            jT808_0x9301.LogicChannelNo = reader.ReadByte();
+            var jT808_0x9301 = new JT808_0x9301();
+            jT808_0x9301.ChannelNo = reader.ReadByte();
             jT808_0x9301.Direction = reader.ReadByte();
             jT808_0x9301.Speed = reader.ReadByte();
             return jT808_0x9301;
@@ -105,9 +91,10 @@ namespace JT808.Protocol.Extensions.JT1078.MessageBody
 
         public void Serialize(ref JT808MessagePackWriter writer, JT808_0x9301 value, IJT808Config config)
         {
-            writer.WriteByte(value.LogicChannelNo);
+            writer.WriteByte(value.ChannelNo);
             writer.WriteByte(value.Direction);
             writer.WriteByte(value.Speed);
         }
+#pragma warning restore CS1591 // 缺少对公共可见类型或成员的 XML 注释
     }
 }
diff --git a/src/JT808.Protocol.Extensions.JT1078/MessageBody/JT808_0x9302.cs b/src/JT808.Protocol.Extensions.JT1078/MessageBody/JT808_0x9302.cs
index cd8b47a..27802fb 100644
--- a/src/JT808.Protocol.Extensions.JT1078/MessageBody/JT808_0x9302.cs
+++ b/src/JT808.Protocol.Extensions.JT1078/MessageBody/JT808_0x9302.cs
@@ -13,8 +13,11 @@ namespace JT808.Protocol.Extensions.JT1078.MessageBody
     /// </summary>
     public class JT808_0x9302 : JT808Bodies, IJT808MessagePackFormatter<JT808_0x9302>, IJT808Analyze
     {
+#pragma warning disable CS1591 // 缺少对公共可见类型或成员的 XML 注释
         public override string Description => "云台调整焦距控制";
         public override ushort MsgId => 0x9302;
+#pragma warning restore CS1591 // 缺少对公共可见类型或成员的 XML 注释
+
         /// <summary>
         /// 逻辑通道号
         /// </summary>
@@ -23,59 +26,43 @@ namespace JT808.Protocol.Extensions.JT1078.MessageBody
         /// 焦距调整方向
         /// </summary>
         public byte FocusAdjustmentDirection { get; set; }
-
+#pragma warning disable CS1591 // 缺少对公共可见类型或成员的 XML 注释
         public void Analyze(ref JT808MessagePackReader reader, Utf8JsonWriter writer, IJT808Config config)
         {
-            JT808_0x9302 value = new JT808_0x9302();
-
-
+            var value = new JT808_0x9302();
+ 
             value.LogicChannelNo = reader.ReadByte();
             writer.WriteString($"[{value.LogicChannelNo.ReadNumber()}]逻辑通道号", LogicalChannelNoDisplay(value.LogicChannelNo));
             value.FocusAdjustmentDirection = reader.ReadByte();
             writer.WriteString($"[{value.FocusAdjustmentDirection.ReadNumber()}]焦距调整方向", value.FocusAdjustmentDirection==0?"焦距调大":"焦距调小");
-            string LogicalChannelNoDisplay(byte LogicalChannelNo)
+
+            static string LogicalChannelNoDisplay(byte LogicalChannelNo)
             {
-                switch (LogicalChannelNo)
+                return LogicalChannelNo switch
                 {
-                    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 "预留";
-                }
+                    1 => "驾驶员",
+                    2 => "车辆正前方",
+                    3 => "车前门",
+                    4 => "车厢前部",
+                    5 => "车厢后部",
+                    7 => "行李舱",
+                    8 => "车辆左侧",
+                    9 => "车辆右侧",
+                    10 => "车辆正后方",
+                    11 => "车厢中部",
+                    12 => "车中门",
+                    13 => "驾驶席车门",
+                    33 => "驾驶员",
+                    36 => "车厢前部",
+                    37 => "车厢后部",
+                    _ => "预留",
+                };
             }
         }
 
         public JT808_0x9302 Deserialize(ref JT808MessagePackReader reader, IJT808Config config)
         {
-            JT808_0x9302 jT808_0x9302 = new JT808_0x9302();
+            var jT808_0x9302 = new JT808_0x9302();
             jT808_0x9302.LogicChannelNo = reader.ReadByte();
             jT808_0x9302.FocusAdjustmentDirection = reader.ReadByte();
             return jT808_0x9302;
@@ -86,5 +73,6 @@ namespace JT808.Protocol.Extensions.JT1078.MessageBody
             writer.WriteByte(value.LogicChannelNo);
             writer.WriteByte(value.FocusAdjustmentDirection);
         }
+#pragma warning restore CS1591 // 缺少对公共可见类型或成员的 XML 注释
     }
 }
diff --git a/src/JT808.Protocol.Extensions.JT1078/MessageBody/JT808_0x9303.cs b/src/JT808.Protocol.Extensions.JT1078/MessageBody/JT808_0x9303.cs
index b614ac4..7776400 100644
--- a/src/JT808.Protocol.Extensions.JT1078/MessageBody/JT808_0x9303.cs
+++ b/src/JT808.Protocol.Extensions.JT1078/MessageBody/JT808_0x9303.cs
@@ -13,76 +13,64 @@ namespace JT808.Protocol.Extensions.JT1078.MessageBody
     /// </summary>
     public class JT808_0x9303 : JT808Bodies, IJT808MessagePackFormatter<JT808_0x9303>, IJT808Analyze
     {
+#pragma warning disable CS1591 // 缺少对公共可见类型或成员的 XML 注释
         public override string Description => "云台调整光圈控制";
         public override ushort MsgId => 0x9303;
+#pragma warning restore CS1591 // 缺少对公共可见类型或成员的 XML 注释
         /// <summary>
         /// 逻辑通道号
         /// </summary>
-        public byte LogicChannelNo { get; set; }
+        public byte ChannelNo { get; set; }
         /// <summary>
         /// 光圈调整方式
         /// </summary>
         public byte IrisAdjustment  { get; set; }
-
+#pragma warning disable CS1591 // 缺少对公共可见类型或成员的 XML 注释
         public void Analyze(ref JT808MessagePackReader reader, Utf8JsonWriter writer, IJT808Config config)
         {
             JT808_0x9303 value = new JT808_0x9303();
-            value.LogicChannelNo = reader.ReadByte();
-            writer.WriteString($"[{value.LogicChannelNo.ReadNumber()}]逻辑通道号", LogicalChannelNoDisplay(value.LogicChannelNo));
+            value.ChannelNo = reader.ReadByte();
+            writer.WriteString($"[{value.ChannelNo.ReadNumber()}]逻辑通道号", LogicalChannelNoDisplay(value.ChannelNo));
             value.IrisAdjustment = reader.ReadByte();
             writer.WriteString($"[{value.IrisAdjustment.ReadNumber()}]光圈调整方式", value.IrisAdjustment == 0 ? "调大" : "调小");
-            string LogicalChannelNoDisplay(byte LogicalChannelNo)
+
+            static string LogicalChannelNoDisplay(byte LogicalChannelNo)
             {
-                switch (LogicalChannelNo)
+                return LogicalChannelNo switch
                 {
-                    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 "预留";
-                }
+                    1 => "驾驶员",
+                    2 => "车辆正前方",
+                    3 => "车前门",
+                    4 => "车厢前部",
+                    5 => "车厢后部",
+                    7 => "行李舱",
+                    8 => "车辆左侧",
+                    9 => "车辆右侧",
+                    10 => "车辆正后方",
+                    11 => "车厢中部",
+                    12 => "车中门",
+                    13 => "驾驶席车门",
+                    33 => "驾驶员",
+                    36 => "车厢前部",
+                    37 => "车厢后部",
+                    _ => "预留",
+                };
             }
         }
 
         public JT808_0x9303 Deserialize(ref JT808MessagePackReader reader, IJT808Config config)
         {
-            JT808_0x9303 jT808_0x9303 = new JT808_0x9303();
-            jT808_0x9303.LogicChannelNo = reader.ReadByte();
+            var jT808_0x9303 = new JT808_0x9303();
+            jT808_0x9303.ChannelNo = reader.ReadByte();
             jT808_0x9303.IrisAdjustment = reader.ReadByte();
             return jT808_0x9303;
         }
 
         public void Serialize(ref JT808MessagePackWriter writer, JT808_0x9303 value, IJT808Config config)
         {
-            writer.WriteByte(value.LogicChannelNo);
+            writer.WriteByte(value.ChannelNo);
             writer.WriteByte(value.IrisAdjustment);
         }
+#pragma warning restore CS1591 // 缺少对公共可见类型或成员的 XML 注释
     }
 }
diff --git a/src/JT808.Protocol.Extensions.JT1078/MessageBody/JT808_0x9304.cs b/src/JT808.Protocol.Extensions.JT1078/MessageBody/JT808_0x9304.cs
index 1f031c3..8b01d6e 100644
--- a/src/JT808.Protocol.Extensions.JT1078/MessageBody/JT808_0x9304.cs
+++ b/src/JT808.Protocol.Extensions.JT1078/MessageBody/JT808_0x9304.cs
@@ -13,12 +13,13 @@ namespace JT808.Protocol.Extensions.JT1078.MessageBody
     /// </summary>
     public class JT808_0x9304 : JT808Bodies, IJT808MessagePackFormatter<JT808_0x9304>, IJT808Analyze
     {
+#pragma warning disable CS1591 // 缺少对公共可见类型或成员的 XML 注释
         public override string Description => "云台雨刷控制";
         public override ushort MsgId => 0x9304;
         /// <summary>
         /// 逻辑通道号
         /// </summary>
-        public byte LogicChannelNo { get; set; }
+        public byte ChannelNo { get; set; }
         /// <summary>
         /// 启停标识
         /// </summary>
@@ -27,62 +28,48 @@ namespace JT808.Protocol.Extensions.JT1078.MessageBody
         public void Analyze(ref JT808MessagePackReader reader, Utf8JsonWriter writer, IJT808Config config)
         {
             JT808_0x9304 value = new JT808_0x9304();
-            value.LogicChannelNo = reader.ReadByte();
-            writer.WriteString($"[{value.LogicChannelNo.ReadNumber()}]逻辑通道号", LogicalChannelNoDisplay(value.LogicChannelNo));
+            value.ChannelNo = reader.ReadByte();
+            writer.WriteString($"[{value.ChannelNo.ReadNumber()}]逻辑通道号", LogicalChannelNoDisplay(value.ChannelNo));
             value.StartOrStop = reader.ReadByte();
             writer.WriteString($"[{value.StartOrStop.ReadNumber()}]启停标识", value.StartOrStop == 0 ? "停止" : "启动");
-            string LogicalChannelNoDisplay(byte LogicalChannelNo)
+
+            static string LogicalChannelNoDisplay(byte LogicalChannelNo)
             {
-                switch (LogicalChannelNo)
+                return LogicalChannelNo switch
                 {
-                    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 "预留";
-                }
+                    1 => "驾驶员",
+                    2 => "车辆正前方",
+                    3 => "车前门",
+                    4 => "车厢前部",
+                    5 => "车厢后部",
+                    7 => "行李舱",
+                    8 => "车辆左侧",
+                    9 => "车辆右侧",
+                    10 => "车辆正后方",
+                    11 => "车厢中部",
+                    12 => "车中门",
+                    13 => "驾驶席车门",
+                    33 => "驾驶员",
+                    36 => "车厢前部",
+                    37 => "车厢后部",
+                    _ => "预留",
+                };
             }
         }
 
         public JT808_0x9304 Deserialize(ref JT808MessagePackReader reader, IJT808Config config)
         {
-            JT808_0x9304 jT808_0x9304 = new JT808_0x9304();
-            jT808_0x9304.LogicChannelNo = reader.ReadByte();
+            var jT808_0x9304 = new JT808_0x9304();
+            jT808_0x9304.ChannelNo = reader.ReadByte();
             jT808_0x9304.StartOrStop = reader.ReadByte();
             return jT808_0x9304;
         }
 
         public void Serialize(ref JT808MessagePackWriter writer, JT808_0x9304 value, IJT808Config config)
         {
-            writer.WriteByte(value.LogicChannelNo);
+            writer.WriteByte(value.ChannelNo);
             writer.WriteByte(value.StartOrStop);
         }
+#pragma warning restore CS1591 // 缺少对公共可见类型或成员的 XML 注释
     }
 }
diff --git a/src/JT808.Protocol.Extensions.JT1078/MessageBody/JT808_0x9305.cs b/src/JT808.Protocol.Extensions.JT1078/MessageBody/JT808_0x9305.cs
index 5e1919d..aa2aa33 100644
--- a/src/JT808.Protocol.Extensions.JT1078/MessageBody/JT808_0x9305.cs
+++ b/src/JT808.Protocol.Extensions.JT1078/MessageBody/JT808_0x9305.cs
@@ -13,12 +13,13 @@ namespace JT808.Protocol.Extensions.JT1078.MessageBody
     /// </summary>
     public class JT808_0x9305 : JT808Bodies, IJT808MessagePackFormatter<JT808_0x9305>, IJT808Analyze
     {
+#pragma warning disable CS1591 // 缺少对公共可见类型或成员的 XML 注释
         public override string Description => "红外补光控制";
         public override ushort MsgId => 0x9305;
         /// <summary>
         /// 逻辑通道号
         /// </summary>
-        public byte LogicChannelNo { get; set; }
+        public byte ChannelNo { get; set; }
         /// <summary>
         /// 启停标识
         /// </summary>
@@ -27,62 +28,48 @@ namespace JT808.Protocol.Extensions.JT1078.MessageBody
         public void Analyze(ref JT808MessagePackReader reader, Utf8JsonWriter writer, IJT808Config config)
         {
             JT808_0x9305 value = new JT808_0x9305();
-            value.LogicChannelNo = reader.ReadByte();
-            writer.WriteString($"[{value.LogicChannelNo.ReadNumber()}]逻辑通道号", LogicalChannelNoDisplay(value.LogicChannelNo));
+            value.ChannelNo = reader.ReadByte();
+            writer.WriteString($"[{value.ChannelNo.ReadNumber()}]逻辑通道号", LogicalChannelNoDisplay(value.ChannelNo));
             value.StartOrStop = reader.ReadByte();
             writer.WriteString($"[{value.StartOrStop.ReadNumber()}]启停标识", value.StartOrStop == 0 ? "停止" : "启动");
-            string LogicalChannelNoDisplay(byte LogicalChannelNo)
+
+            static string LogicalChannelNoDisplay(byte LogicalChannelNo)
             {
-                switch (LogicalChannelNo)
+                return LogicalChannelNo switch
                 {
-                    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 "预留";
-                }
+                    1 => "驾驶员",
+                    2 => "车辆正前方",
+                    3 => "车前门",
+                    4 => "车厢前部",
+                    5 => "车厢后部",
+                    7 => "行李舱",
+                    8 => "车辆左侧",
+                    9 => "车辆右侧",
+                    10 => "车辆正后方",
+                    11 => "车厢中部",
+                    12 => "车中门",
+                    13 => "驾驶席车门",
+                    33 => "驾驶员",
+                    36 => "车厢前部",
+                    37 => "车厢后部",
+                    _ => "预留",
+                };
             }
         }
 
         public JT808_0x9305 Deserialize(ref JT808MessagePackReader reader, IJT808Config config)
         {
-            JT808_0x9305 jT808_0x9305 = new JT808_0x9305();
-            jT808_0x9305.LogicChannelNo = reader.ReadByte();
+            var jT808_0x9305 = new JT808_0x9305();
+            jT808_0x9305.ChannelNo = reader.ReadByte();
             jT808_0x9305.StartOrStop = reader.ReadByte();
             return jT808_0x9305;
         }
 
         public void Serialize(ref JT808MessagePackWriter writer, JT808_0x9305 value, IJT808Config config)
         {
-            writer.WriteByte(value.LogicChannelNo);
+            writer.WriteByte(value.ChannelNo);
             writer.WriteByte(value.StartOrStop);
         }
+#pragma warning restore CS1591 // 缺少对公共可见类型或成员的 XML 注释
     }
 }
diff --git a/src/JT808.Protocol.Extensions.JT1078/MessageBody/JT808_0x9306.cs b/src/JT808.Protocol.Extensions.JT1078/MessageBody/JT808_0x9306.cs
index 8ac992a..c0f7f79 100644
--- a/src/JT808.Protocol.Extensions.JT1078/MessageBody/JT808_0x9306.cs
+++ b/src/JT808.Protocol.Extensions.JT1078/MessageBody/JT808_0x9306.cs
@@ -13,12 +13,14 @@ namespace JT808.Protocol.Extensions.JT1078.MessageBody
     /// </summary>
     public class JT808_0x9306 : JT808Bodies, IJT808MessagePackFormatter<JT808_0x9306>, IJT808Analyze
     {
+#pragma warning disable CS1591 // 缺少对公共可见类型或成员的 XML 注释
         public override string Description => "云台变倍控制";
+
         public override ushort MsgId => 0x9306;
         /// <summary>
         /// 逻辑通道号
         /// </summary>
-        public byte LogicChannelNo { get; set; }
+        public byte ChannelNo { get; set; }
         /// <summary>
         /// 变倍控制
         /// </summary>
@@ -26,63 +28,49 @@ namespace JT808.Protocol.Extensions.JT1078.MessageBody
 
         public void Analyze(ref JT808MessagePackReader reader, Utf8JsonWriter writer, IJT808Config config)
         {
-            JT808_0x9306 value = new JT808_0x9306();
-            value.LogicChannelNo = reader.ReadByte();
-            writer.WriteString($"[{value.LogicChannelNo.ReadNumber()}]逻辑通道号", LogicalChannelNoDisplay(value.LogicChannelNo));
+            var value = new JT808_0x9306();
+            value.ChannelNo = reader.ReadByte();
+            writer.WriteString($"[{value.ChannelNo.ReadNumber()}]逻辑通道号", LogicalChannelNoDisplay(value.ChannelNo));
             value.ChangeMultipleControl = reader.ReadByte();
             writer.WriteString($"[{value.ChangeMultipleControl.ReadNumber()}]变倍控制", value.ChangeMultipleControl == 0 ? "调大" : "调小");
-            string LogicalChannelNoDisplay(byte LogicalChannelNo)
+
+            static string LogicalChannelNoDisplay(byte LogicalChannelNo)
             {
-                switch (LogicalChannelNo)
+                return LogicalChannelNo switch
                 {
-                    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 "预留";
-                }
+                    1 => "驾驶员",
+                    2 => "车辆正前方",
+                    3 => "车前门",
+                    4 => "车厢前部",
+                    5 => "车厢后部",
+                    7 => "行李舱",
+                    8 => "车辆左侧",
+                    9 => "车辆右侧",
+                    10 => "车辆正后方",
+                    11 => "车厢中部",
+                    12 => "车中门",
+                    13 => "驾驶席车门",
+                    33 => "驾驶员",
+                    36 => "车厢前部",
+                    37 => "车厢后部",
+                    _ => "预留",
+                };
             }
         }
 
         public JT808_0x9306 Deserialize(ref JT808MessagePackReader reader, IJT808Config config)
         {
-            JT808_0x9306 jT808_0x9306 = new JT808_0x9306();
-            jT808_0x9306.LogicChannelNo = reader.ReadByte();
+            var jT808_0x9306 = new JT808_0x9306();
+            jT808_0x9306.ChannelNo = reader.ReadByte();
             jT808_0x9306.ChangeMultipleControl = reader.ReadByte();
             return jT808_0x9306;
         }
 
         public void Serialize(ref JT808MessagePackWriter writer, JT808_0x9306 value, IJT808Config config)
         {
-            writer.WriteByte(value.LogicChannelNo);
+            writer.WriteByte(value.ChannelNo);
             writer.WriteByte(value.ChangeMultipleControl);
         }
+#pragma warning restore CS1591 // 缺少对公共可见类型或成员的 XML 注释
     }
 }