1
zhanghua
2024-09-26 c775c6953d9759e70f08acbfa8f6d7490aaae3d1
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
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
package com.netsdk.demo.customize.courseRecord.pojo;
 
import com.netsdk.lib.enumeration.EM_CAN_START_STREAM;
import com.netsdk.lib.enumeration.EM_COURSE_STATE;
import com.netsdk.lib.enumeration.EM_IS_RECORD;
import com.netsdk.lib.structure.NET_TIME;
 
import static com.netsdk.demo.customize.courseRecord.CourseRecordChannel.*;
 
/**
 * @author : 47040
 * @since : Created in 2020/9/21 13:43
 */
public class CourseInfo {
    /**
     * 序号 查询时用
     */
    public int idx = 0;
 
    /////////////////////////////////// 起始时间 ////////////////////////////////
    ////////////////////////////////////////////////////////////////////////////
 
    /**
     * 课程开始时间
     */
    public NET_TIME stuStartTime;
    /**
     * 课程结束时间
     */
    public NET_TIME stuEndTime;
    /**
     * 课程日期 (展示用)
     */
    public String courseDate = "";
    /**
     * 课程时间段 (展示用)
     */
    public String coursePeriod = "";
 
    //////////////////////////////// 其他属性 /////////////////////////////////////
    //////////////////////////////////////////////////////////////////////////////
 
    /**
     * 课程名称
     */
    public String courseName = "";
    /**
     * 教师名称
     */
    public String teacherName = "";
    /**
     * 课程简介
     */
    public String introduction;
 
    /////////////////////////////////// 控制模式 /////////////////////////////////////
    /////////////////////////////////////////////////////////////////////////////////
 
    /**
     * 能否被拉流逻辑通道数
     */
    public int nCanStartStreamNum;
    /**
     * 是否要录像逻辑通道号数
     */
    public int nIsRecordNum;
    /**
     * 能否被拉流 {@link EM_CAN_START_STREAM}
     */
    public int[] emCanStartStream = new int[64];
    /**
     * 是否要录像 {@link EM_IS_RECORD}
     */
    public int[] emIsRecord = new int[64];
    /**
     * 视频控制模式(展示用) 直播", "录制", "录播
     */
    public String strVideoCtrlType = "";
 
    ////////////////////////////////////// 录制模式 ///////////////////////////////////
    //////////////////////////////////////////////////////////////////////////////////
 
    /**
     * 组合通道模式; 0: 无效, 1: 电影模式, 2: 常态模式, 3: 精品模式, < 0:自定义模式
     */
    public int nCompositeChannelMode;
    /**
     * 合成模式 (展示用) "电影模式", "多画面模式"
     */
    public String strCompositeChannelMode = "";
 
    /**
     * 是否是资源模式 (展示用)
     */
    public boolean containsResource;
 
    ////////////////////////////////////// 课程状态 ///////////////////////////////////
    /**
     * 课程录像状态 {@link EM_COURSE_STATE}
     */
    public int emCourseState;
    /**
     * 课程状态 (展示用)
     */
    public String strCourseState = "";
 
    /**
     * 依据课程起始时间给出日期和时间段注释
     */
    public void SetStrCourseDateTime() {
        if (stuStartTime == null || stuEndTime == null) {
            return;
        }
        String[] startTimeInfo = stuStartTime.toStringTime().split("\\s+");
        String[] endTimeInfo = stuEndTime.toStringTime().split("\\s+");
        this.courseDate = startTimeInfo[0];
        this.coursePeriod = startTimeInfo[1] + " - " + endTimeInfo[1];
    }
 
    /**
     * 依据拉流和录像配置设置视频控制模式注释
     */
    public void SetStrVideoCtrl() {
        if (emCanStartStream[0] == EM_CAN_START_STREAM.EM_CAN_START_STREAM_ON.getValue() &&
                emIsRecord[0] == EM_IS_RECORD.EM_IS_RECORD_OFF.getValue()) {
            strVideoCtrlType = "直播";
        } else if (emCanStartStream[0] == EM_CAN_START_STREAM.EM_CAN_START_STREAM_OFF.getValue() &&
                emIsRecord[0] == EM_IS_RECORD.EM_IS_RECORD_ON.getValue()) {
            strVideoCtrlType = "录制";
        } else if (emCanStartStream[0] == EM_CAN_START_STREAM.EM_CAN_START_STREAM_ON.getValue() &&
                emIsRecord[0] == EM_IS_RECORD.EM_IS_RECORD_ON.getValue()) {
            strVideoCtrlType = "录播";
        }
 
        // 检查下是不是资源模式
        containsResource = false;
        for (int i = 1; i < 15; i++) {
            if (emCanStartStream[i] == EM_CAN_START_STREAM.EM_CAN_START_STREAM_ON.getValue() ||
                    emCanStartStream[i] == EM_IS_RECORD.EM_IS_RECORD_ON.getValue()) {
                // 是资源模式
                containsResource = true;
                break;
            }
        }
    }
 
    /**
     * 依据下拉框枚举设置正确的录制参数
     */
    public void ParseStrVideoCtrl() {
        // "直播(仅拉流)", "录制(仅录制)", "录播(拉流并录制)"
        nCanStartStreamNum = 15;
        nIsRecordNum = 15;
 
        if ("直播".equals(strVideoCtrlType)) {   // 拉流(全部),不录制(仅合成通道)
 
            CompositeChannelSteamButNoRecord(emCanStartStream, emIsRecord);
 
            if (containsResource) {
                // 资源模式下 拉流/不录制
                ResourceChannelSteamNoRecord(emCanStartStream, emIsRecord);
            } else {
                // 非资源模式下 不拉流/不录制
                ResourceChannelNoSteamNoRecord(emCanStartStream, emIsRecord);
            }
        } else if ("录制".equals(strVideoCtrlType)) {  // 不拉流(全部),录制(仅合成通道)
            CompositeChannelNoSteamButRecord(emCanStartStream, emIsRecord);
 
            if (containsResource) {
                // 资源模式下 不拉流/录制
                ResourceChannelNoSteamRecord(emCanStartStream, emIsRecord);
            } else {
                // 非资源模式下 不拉流/不录制
                ResourceChannelNoSteamNoRecord(emCanStartStream, emIsRecord);
            }
        } else if ("录播".equals(strVideoCtrlType)) { // 拉流(全部),录制(仅合成通道)
            CompositeChannelSteamAndRecord(emCanStartStream, emIsRecord);
 
            if (containsResource) {
                // 资源模式下 拉流/录制
                ResourceChannelSteamRecord(emCanStartStream, emIsRecord);
            } else {
                // 非资源模式下 不拉流/不录制
                ResourceChannelNoSteamNoRecord(emCanStartStream, emIsRecord);
            }
        }
    }
 
    /**
     * 根据合成通道模式数字给出具体注释
     *
     * @param mode 合成通道模式数字
     */
    public void SetStrCompositeMode(int mode) {
        String strMode = "无效";
        switch (mode) {
            // 0: 无效, 1: 电影模式, 2: 常态模式, 3: 精品模式, <0:自定义模式
            case 0:
                strMode = "无效";
                break;
            case 1:
                strMode = "电影模式";
                break;
            case 2:
                strMode = "多画面模式";  // 常态模式
                break;
            case 3:
                strMode = "精品模式";
                break;
            default:
                if (mode < 0) strMode = "自定义模式";
                break;
        }
        strCompositeChannelMode = strMode;
    }
 
    /**
     * 依据下拉框枚举填写正确的参数
     */
    public void ParseStrCompositeMode() {
        // "电影模式", "多画面模式"
        if ("电影模式".equals(strCompositeChannelMode)) {
            nCompositeChannelMode = 1;   // 电影枚举
        } else if ("多画面模式".equals(strCompositeChannelMode)) {
            nCompositeChannelMode = 2;  // 多画面枚举
        }
    }
}