111
k94314517
2025-02-28 04dba6a17f836b5fbdf0eedff8a129c6785fd8a2
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
package org.yzh.protocol.commons.transform.parameter;
 
import io.github.yezhihao.protostar.Schema;
import io.github.yezhihao.protostar.annotation.Field;
import io.netty.buffer.ByteBuf;
 
import java.util.ArrayList;
import java.util.List;
 
/**
 * 音视频通道列表设置
 * @author yezhihao
 * https://gitee.com/yezhihao/jt808-server
 */
public class ParamChannels {
 
    public static final Integer key = 0x0076;
 
    public static final Schema<ParamChannels> SCHEMA = new ParamChannelsSchema();
 
    @Field(desc = "音视频通道总数")
    private byte audioVideoChannels;
    @Field(desc = "音频通道总数")
    private byte audioChannels;
    @Field(desc = "视频通道总数")
    private byte videoChannels;
    @Field(desc = "音视频通道对照表")
    private List<ChannelInfo> channels;
 
    public ParamChannels() {
    }
 
    public byte getAudioVideoChannels() {
        return audioVideoChannels;
    }
 
    public void setAudioVideoChannels(byte audioVideoChannels) {
        this.audioVideoChannels = audioVideoChannels;
    }
 
    public byte getAudioChannels() {
        return audioChannels;
    }
 
    public void setAudioChannels(byte audioChannels) {
        this.audioChannels = audioChannels;
    }
 
    public byte getVideoChannels() {
        return videoChannels;
    }
 
    public void setVideoChannels(byte videoChannels) {
        this.videoChannels = videoChannels;
    }
 
    public List<ChannelInfo> getChannels() {
        return channels;
    }
 
    public void setChannels(List<ChannelInfo> channels) {
        this.channels = channels;
    }
 
    private static class ChannelInfo {
        @Field(desc = "物理通道号(从1开始)")
        private byte channelId;
        @Field(desc = "逻辑通道号(按照JT/T 1076-2016 中的表2)")
        private byte channelNo;
        @Field(desc = "通道类型:0.音视频 1.音频 2.视频")
        private byte channelType;
        @Field(desc = "是否连接云台(类型为0和2时,此字段有效):0.未连接 1.连接")
        private boolean hasPanTilt;
 
        public ChannelInfo() {
        }
 
        public ChannelInfo(byte channelId, byte channelNo, byte channelType, boolean hasPanTilt) {
            this.channelId = channelId;
            this.channelNo = channelNo;
            this.channelType = channelType;
            this.hasPanTilt = hasPanTilt;
        }
 
        public byte getChannelId() {
            return channelId;
        }
 
        public void setChannelId(byte channelId) {
            this.channelId = channelId;
        }
 
        public byte getChannelNo() {
            return channelNo;
        }
 
        public void setChannelNo(byte channelNo) {
            this.channelNo = channelNo;
        }
 
        public byte getChannelType() {
            return channelType;
        }
 
        public void setChannelType(byte channelType) {
            this.channelType = channelType;
        }
 
        public boolean isHasPanTilt() {
            return hasPanTilt;
        }
 
        public void setHasPanTilt(boolean hasPanTilt) {
            this.hasPanTilt = hasPanTilt;
        }
    }
 
    private static class ParamChannelsSchema implements Schema<ParamChannels> {
 
        private ParamChannelsSchema() {
        }
 
        @Override
        public ParamChannels readFrom(ByteBuf input) {
            ParamChannels message = new ParamChannels();
            message.audioVideoChannels = input.readByte();
            message.audioChannels = input.readByte();
            message.videoChannels = input.readByte();
 
            List<ChannelInfo> channels = new ArrayList<>(4);
            while (input.isReadable()) {
                byte channelId = input.readByte();
                byte channelNo = input.readByte();
                byte channelType = input.readByte();
                boolean hasPanTilt = input.readBoolean();
                channels.add(new ChannelInfo(channelId, channelNo, channelType, hasPanTilt));
            }
            message.setChannels(channels);
            return message;
        }
 
        @Override
        public void writeTo(ByteBuf output, ParamChannels message) {
            output.writeByte(message.audioVideoChannels);
            output.writeByte(message.audioChannels);
            output.writeByte(message.videoChannels);
 
            List<ChannelInfo> channelInfos = message.getChannels();
            for (ChannelInfo channelInfo : channelInfos) {
                output.writeByte(channelInfo.channelId);
                output.writeByte(channelInfo.channelNo);
                output.writeByte(channelInfo.channelType);
                output.writeBoolean(channelInfo.hasPanTilt);
            }
        }
    }
}