李勇

1.录制回放消息和视频匹配部分忽略屏幕共享的消息;2.处理直播模式时H5的消息处理

@@ -63,7 +63,7 @@ export default class MessageEntrance extends Emiter { @@ -63,7 +63,7 @@ export default class MessageEntrance extends Emiter {
63 super(); 63 super();
64 this.lastClassActiveTime=0;//最后一次课堂激活的时间戳 64 this.lastClassActiveTime=0;//最后一次课堂激活的时间戳
65 //sdk 信息 65 //sdk 信息
66 - GlobalConfig.sdkVersion = "v2.31.1.20171120"; 66 + GlobalConfig.sdkVersion = "v2.31.10.20171122";
67 loger.warn("sdkVersion:" + GlobalConfig.sdkVersion); 67 loger.warn("sdkVersion:" + GlobalConfig.sdkVersion);
68 console.log("sdkVersion:" + GlobalConfig.sdkVersion); 68 console.log("sdkVersion:" + GlobalConfig.sdkVersion);
69 //设置 69 //设置
@@ -644,7 +644,7 @@ export default class MessageEntrance extends Emiter { @@ -644,7 +644,7 @@ export default class MessageEntrance extends Emiter {
644 644
645 645
646 //如果没有名字的时候需要随机生成 646 //如果没有名字的时候需要随机生成
647 - let randUserId =parseInt(Math.random()*1000)+""+parseInt(Math.random()*1000)+""+parseInt(Math.random()*1000); 647 + let randUserId =parseInt(Math.random()*1000)+"_"+parseInt(Math.random()*1000)+"_"+parseInt(Math.random()*1000);
648 if (GlobalConfig.userRole == ApeConsts.host) { 648 if (GlobalConfig.userRole == ApeConsts.host) {
649 randUserId = "T" + randUserId; 649 randUserId = "T" + randUserId;
650 } else if (GlobalConfig.userRole == ApeConsts.assistant) { 650 } else if (GlobalConfig.userRole == ApeConsts.assistant) {
@@ -1051,6 +1051,13 @@ export default class MessageEntrance extends Emiter { @@ -1051,6 +1051,13 @@ export default class MessageEntrance extends Emiter {
1051 1051
1052 //开始MCU选点操作 1052 //开始MCU选点操作
1053 _getFastestMcuServer(_callback) { 1053 _getFastestMcuServer(_callback) {
  1054 + //不再做MCU http测速
  1055 + if (_callback) {
  1056 + _callback(null);
  1057 + }
  1058 + return;
  1059 +
  1060 + //正常的测试流程
1054 if (_ipManager) { 1061 if (_ipManager) {
1055 _ipManager.getFastestMcuServer(GlobalConfig.mcuListFinal, _callback); 1062 _ipManager.getFastestMcuServer(GlobalConfig.mcuListFinal, _callback);
1056 } else { 1063 } else {
@@ -1184,7 +1191,7 @@ export default class MessageEntrance extends Emiter { @@ -1184,7 +1191,7 @@ export default class MessageEntrance extends Emiter {
1184 1191
1185 //判断是否需要获取加入音视频通话频道的channelKey 1192 //判断是否需要获取加入音视频通话频道的channelKey
1186 if (GlobalConfig.appCertificate) { 1193 if (GlobalConfig.appCertificate) {
1187 - loger.log("加入视频通话模块->需要先获取channelKey") 1194 + //loger.log("加入视频通话模块->需要先获取channelKey")
1188 //获取channelKey 1195 //获取channelKey
1189 _sass.getChannelKeyToken((_data)=> { 1196 _sass.getChannelKeyToken((_data)=> {
1190 //{"code":200,"channelKey":"005AQAoAEQzQUQxNzFDOEQwOEU3OTVGMjlCMzZDRUZENTNGOTU0RDY4N0ZGMUEQANylukzO70ocgrNX9hlkNNWvpLBZ9buDAy/fuVkAAA==","uid":"751373669"} 1197 //{"code":200,"channelKey":"005AQAoAEQzQUQxNzFDOEQwOEU3OTVGMjlCMzZDRUZENTNGOTU0RDY4N0ZGMUEQANylukzO70ocgrNX9hlkNNWvpLBZ9buDAy/fuVkAAA==","uid":"751373669"}
@@ -1194,7 +1201,7 @@ export default class MessageEntrance extends Emiter { @@ -1194,7 +1201,7 @@ export default class MessageEntrance extends Emiter {
1194 this._joinClassSuccessSeting(); 1201 this._joinClassSuccessSeting();
1195 }) 1202 })
1196 } else { 1203 } else {
1197 - loger.log("加入视频通话模块->不需要获取channelKey") 1204 + //loger.log("加入视频通话模块->不需要获取channelKey")
1198 this._joinClassSuccessSeting(); 1205 this._joinClassSuccessSeting();
1199 } 1206 }
1200 } 1207 }
@@ -1283,7 +1290,7 @@ export default class MessageEntrance extends Emiter { @@ -1283,7 +1290,7 @@ export default class MessageEntrance extends Emiter {
1283 this._emit(MessageTypes.CLASS_JOIN_SUCCESS, joinClassSuccessCallBackData); 1290 this._emit(MessageTypes.CLASS_JOIN_SUCCESS, joinClassSuccessCallBackData);
1284 1291
1285 //主讲人和老师可以设置旁录 1292 //主讲人和老师可以设置旁录
1286 - if (GlobalConfig.appId && !GlobalConfig.openFlash) { 1293 + if (GlobalConfig.appId && !GlobalConfig.openFlash&&GlobalConfig.deviceType!=GlobalConfig.deviceH5) {
1287 //加入之前先设置旁录地址,老师和主讲人开启旁路 1294 //加入之前先设置旁录地址,老师和主讲人开启旁路
1288 if (_webRtc && GlobalConfig.isTeachOrAssistant) { 1295 if (_webRtc && GlobalConfig.isTeachOrAssistant) {
1289 let curTimestamp = new Date().getTime(); 1296 let curTimestamp = new Date().getTime();
@@ -2568,7 +2575,7 @@ export default class MessageEntrance extends Emiter { @@ -2568,7 +2575,7 @@ export default class MessageEntrance extends Emiter {
2568 docJoinChannelSuccess() { 2575 docJoinChannelSuccess() {
2569 let interval=new Date().getTime()-parseInt(this.lastClassActiveTime); 2576 let interval=new Date().getTime()-parseInt(this.lastClassActiveTime);
2570 interval=interval/1000; 2577 interval=interval/1000;
2571 - loger.log("最后一次记录的时间->"+this.lastClassActiveTime,"当前时间:"+new Date().getTime(),"间隔:"+interval+"秒"); 2578 + //loger.log("最后一次记录的时间->"+this.lastClassActiveTime,"当前时间:"+new Date().getTime(),"间隔:"+interval+"秒");
2572 loger.log("文档加入频道成功->isHost=", GlobalConfig.isHost, "当前总人数:", GlobalConfig.rosterNumber, "sassDoclength=", GlobalConfig.docListPrepare.length); 2579 loger.log("文档加入频道成功->isHost=", GlobalConfig.isHost, "当前总人数:", GlobalConfig.rosterNumber, "sassDoclength=", GlobalConfig.docListPrepare.length);
2573 2580
2574 2581
@@ -83,16 +83,37 @@ class EverSocket extends Emiter { @@ -83,16 +83,37 @@ class EverSocket extends Emiter {
83 loger.warn('发送到MCU的数据文件超过10k-->byteLength->'+len,"type:"+type); 83 loger.warn('发送到MCU的数据文件超过10k-->byteLength->'+len,"type:"+type);
84 return; 84 return;
85 } 85 }
  86 + this.send2mcu(len,type);
  87 + }
  88 + this.websocket.send(data);
  89 + } else {
  90 + loger.warn('WebSocket未建立连接.消息忽略');
  91 + }
  92 + }
86 93
87 - this.sendToMcuList.push("c2s_"+EngineUtils.creatTimestampStr()+"_"+len+"_"+type);  
88 - if(this.sendToMcuList.length>80){ 94 + //统计发送到MCU的数据
  95 + /*
  96 + * len 长度
  97 + * type 类型
  98 + * */
  99 + send2mcu(len,type){
  100 + this.sendToMcuList.push(""+len+":"+type);
  101 + if(this.sendToMcuList.length>=50){
89 loger.log("发送到MCU数据统计->",this.sendToMcuList); 102 loger.log("发送到MCU数据统计->",this.sendToMcuList);
90 this.sendToMcuList=[]; 103 this.sendToMcuList=[];
91 } 104 }
92 } 105 }
93 - this.websocket.send(data);  
94 - } else {  
95 - loger.warn('WebSocket未建立连接.消息忽略'); 106 +
  107 + //统计收到MCU的数据
  108 + /*
  109 + * len 长度
  110 + * type 类型
  111 + * */
  112 + mcu2client(len,type){
  113 + this.receiveFromMcuList.push(""+len+":"+type);
  114 + if(this.receiveFromMcuList.length>50){
  115 + loger.log("收到MCU数据统计->",this.receiveFromMcuList);
  116 + this.receiveFromMcuList=[];
96 } 117 }
97 } 118 }
98 119
@@ -218,18 +239,17 @@ class EverSocket extends Emiter { @@ -218,18 +239,17 @@ class EverSocket extends Emiter {
218 const bufferData = messageEvent.data; 239 const bufferData = messageEvent.data;
219 //loger.log('RECEIVE-->byteLength->',bufferData.byteLength); 240 //loger.log('RECEIVE-->byteLength->',bufferData.byteLength);
220 let len=bufferData.byteLength; 241 let len=bufferData.byteLength;
221 - this.receiveFromMcuList.push("s2c_"+EngineUtils.creatTimestampStr()+"_"+len);  
222 - if(this.receiveFromMcuList.length>80){  
223 - loger.log("收到MCU数据统计->",this.receiveFromMcuList);  
224 - this.receiveFromMcuList=[];  
225 - }  
226 if (len> 0) { 242 if (len> 0) {
227 this._emit(EverSocket.MESSAGE, bufferData); 243 this._emit(EverSocket.MESSAGE, bufferData);
  244 + this.mcu2client(len,"消息");
  245 + }else {
  246 + this.mcu2client(0,"回应");
228 } 247 }
229 } 248 }
230 249
231 _sendPingHandler() { 250 _sendPingHandler() {
232 if (this._connected) { 251 if (this._connected) {
  252 + this.send2mcu(0,"心跳");
233 this.websocket.send(new ArrayBuffer); 253 this.websocket.send(new ArrayBuffer);
234 } else { 254 } else {
235 this._reConnection(); 255 this._reConnection();
@@ -1240,8 +1240,11 @@ class RecordPlayBackParse extends Emiter { @@ -1240,8 +1240,11 @@ class RecordPlayBackParse extends Emiter {
1240 } 1240 }
1241 1241
1242 } 1242 }
  1243 + //****1310721是屏幕共享和外部流 不需要匹配*****
  1244 + if(parseInt(videoChannelInfo.channelId)<1310721){
1243 this.videoPublishMessages.push(videoChannelInfo); 1245 this.videoPublishMessages.push(videoChannelInfo);
1244 } 1246 }
  1247 + }
1245 this.mediaChannleList[videoChannelInfo.channelId][timestamp] = { 1248 this.mediaChannleList[videoChannelInfo.channelId][timestamp] = {
1246 parseData: videoChannelInfo, 1249 parseData: videoChannelInfo,
1247 byteData: data, 1250 byteData: data,
@@ -73,24 +73,13 @@ export default class Ape extends Emiter { @@ -73,24 +73,13 @@ export default class Ape extends Emiter {
73 } 73 }
74 74
75 // 消息处理 75 // 消息处理
76 - _pduMessageHandler(regBuffer,_seekTime) {  
77 - let seekTime=_seekTime||0;//这个只有在录制回放的时候才有  
78 - /* loger.warn('APE->收到消息处理->',GlobalConfig.mcuDelay,GlobalConfig.messageDelay);  
79 - //延迟处理消息(3个条件--->ape允许延迟&&客户端设置需要延迟&&Sass设置的延迟时间大于0)  
80 - if (this._apeDelayed&&GlobalConfig.messageDelay&&GlobalConfig.mcuDelay>0) {  
81 - loger.warn('延迟处理消息->',GlobalConfig.mcuDelay);  
82 - setTimeout(() => {  
83 - this._pduRegAdapterHandler(regBuffer,seekTime);  
84 - }, GlobalConfig.mcuDelay*1000);//mcuDelay单位是秒,这里需要换算为毫秒  
85 - return;  
86 - }  
87 -*/  
88 - //不延迟,立即处理  
89 - this._pduRegAdapterHandler(regBuffer,seekTime); 76 + _pduMessageHandler(regBuffer, _seekTime) {
  77 + let seekTime = _seekTime || 0;//这个只有在录制回放的时候才有
  78 + this._pduRegAdapterHandler(regBuffer, seekTime);
90 } 79 }
91 80
92 // 数据同步处理 81 // 数据同步处理
93 - _pduRegAdapterHandler(regBuffer,seekTime) { 82 + _pduRegAdapterHandler(regBuffer, seekTime) {
94 let regPdu = pdu['RCAdapterPdu'].decode(regBuffer); 83 let regPdu = pdu['RCAdapterPdu'].decode(regBuffer);
95 let regItems = regPdu.item; 84 let regItems = regPdu.item;
96 let regItemSize = regItems.length; 85 let regItemSize = regItems.length;
@@ -103,7 +92,6 @@ export default class Ape extends Emiter { @@ -103,7 +92,6 @@ export default class Ape extends Emiter {
103 let regItemData = regItem.itemData; 92 let regItemData = regItem.itemData;
104 93
105 //根据数据包中的type处理数据是否同步 94 //根据数据包中的type处理数据是否同步
106 -  
107 if (pdu.RCPDU_REG_UPDATE_OBJ !== regItemType) { 95 if (pdu.RCPDU_REG_UPDATE_OBJ !== regItemType) {
108 if (pdu.RCPDU_REG_RESPONSE_OBJ == regItemType) { 96 if (pdu.RCPDU_REG_RESPONSE_OBJ == regItemType) {
109 let regResponsePdu = pdu['RCRegistryResponseObjPdu'].decode(regItemData); 97 let regResponsePdu = pdu['RCRegistryResponseObjPdu'].decode(regItemData);
@@ -124,7 +112,7 @@ export default class Ape extends Emiter { @@ -124,7 +112,7 @@ export default class Ape extends Emiter {
124 case pdu.RCPDU_REG_ROSTER_INSERT_PDU: 112 case pdu.RCPDU_REG_ROSTER_INSERT_PDU:
125 //let rosterInsertData = pdu['RCRegstryRosterInsertItemPdu'].decode(user_data); 113 //let rosterInsertData = pdu['RCRegstryRosterInsertItemPdu'].decode(user_data);
126 //loger.log('RCPDU_REG_ROSTER_INSERT_PDU---->'); 114 //loger.log('RCPDU_REG_ROSTER_INSERT_PDU---->');
127 - console.log(user_data); 115 + try{
128 let rosterInsertData = pdu['RCRegistryRosterInsertItemPdu'].decode(user_data); 116 let rosterInsertData = pdu['RCRegistryRosterInsertItemPdu'].decode(user_data);
129 let rosterInsertItems = rosterInsertData.items; 117 let rosterInsertItems = rosterInsertData.items;
130 let rosterInsertItemsLen = rosterInsertItems.length; 118 let rosterInsertItemsLen = rosterInsertItems.length;
@@ -134,6 +122,9 @@ export default class Ape extends Emiter { @@ -134,6 +122,9 @@ export default class Ape extends Emiter {
134 let recordData = pdu['RCNodeInfoRecordPdu'].decode(record.item_data); 122 let recordData = pdu['RCNodeInfoRecordPdu'].decode(record.item_data);
135 this.rosterInsertHandler(recordId, recordData); 123 this.rosterInsertHandler(recordId, recordData);
136 } 124 }
  125 + }catch (err){
  126 + console.log("RCPDU_REG_ROSTER_INSERT_PDU err",err)
  127 + }
137 break; 128 break;
138 case pdu.RCPDU_REG_ROSTER_DELETE_PDU: 129 case pdu.RCPDU_REG_ROSTER_DELETE_PDU:
139 let rosterDelData = pdu['RCRegistryRosterDeleteItemPdu'].decode(user_data); 130 let rosterDelData = pdu['RCRegistryRosterDeleteItemPdu'].decode(user_data);
@@ -161,7 +152,7 @@ export default class Ape extends Emiter { @@ -161,7 +152,7 @@ export default class Ape extends Emiter {
161 } 152 }
162 153
163 //文档数据数组内部自己处理数组 154 //文档数据数组内部自己处理数组
164 - this.tableInsertApeHandler(tableInsertItems,seekTime); 155 + this.tableInsertApeHandler(tableInsertItems, seekTime);
165 break; 156 break;
166 case pdu.RCPDU_REG_TABLE_DELETE_PDU: 157 case pdu.RCPDU_REG_TABLE_DELETE_PDU:
167 let tableDeleteData = pdu['RCRegistryTableDeleteItemPdu'].decode(user_data); 158 let tableDeleteData = pdu['RCRegistryTableDeleteItemPdu'].decode(user_data);
@@ -178,11 +169,11 @@ export default class Ape extends Emiter { @@ -178,11 +169,11 @@ export default class Ape extends Emiter {
178 169
179 for (let i = 0; i < tableUpdateItemsLen; ++i) { 170 for (let i = 0; i < tableUpdateItemsLen; ++i) {
180 let tableItem = tableUpdateItems[i]; 171 let tableItem = tableUpdateItems[i];
181 - this.tableUpdateHandler(tableItem.owner, tableItem.itemIdx, tableItem.itemData,seekTime); 172 + this.tableUpdateHandler(tableItem.owner, tableItem.itemIdx, tableItem.itemData, seekTime);
182 } 173 }
183 174
184 //白板,文档数据数组内部自己处理数组 175 //白板,文档数据数组内部自己处理数组
185 - this.tableUpdateApeHandler(tableUpdateItems,seekTime); 176 + this.tableUpdateApeHandler(tableUpdateItems, seekTime);
186 break; 177 break;
187 case pdu.RCPDU_REG_QUEUE_UPDATE_PDU: 178 case pdu.RCPDU_REG_QUEUE_UPDATE_PDU:
188 case pdu.RCPDU_REG_QUEUE_DELETE_PDU: 179 case pdu.RCPDU_REG_QUEUE_DELETE_PDU:
@@ -210,15 +201,18 @@ export default class Ape extends Emiter { @@ -210,15 +201,18 @@ export default class Ape extends Emiter {
210 //loger.warn(this._session_name + ' tableInsertHandler 应有子类具体覆盖处理.'); 201 //loger.warn(this._session_name + ' tableInsertHandler 应有子类具体覆盖处理.');
211 } 202 }
212 203
213 - tableUpdateHandler(ownerId, recordId, recordData,seekTime) { 204 + tableUpdateHandler(ownerId, recordId, recordData, seekTime) {
214 //loger.warn(this._session_name + ' tableUpdateHandler 应有子类具体覆盖处理.'); 205 //loger.warn(this._session_name + ' tableUpdateHandler 应有子类具体覆盖处理.');
215 } 206 }
216 - tableUpdateApeHandler(tableUpdateItems,seekTime){ 207 +
  208 + tableUpdateApeHandler(tableUpdateItems, seekTime) {
217 209
218 } 210 }
219 - tableInsertApeHandler(tableInsertItems,seekTime){ 211 +
  212 + tableInsertApeHandler(tableInsertItems, seekTime) {
220 213
221 } 214 }
  215 +
222 tableDeleteHandler(tableId, record) { 216 tableDeleteHandler(tableId, record) {
223 //loger.warn(this._session_name + ' tableDelHandler 应有子类具体覆盖处理.'); 217 //loger.warn(this._session_name + ' tableDelHandler 应有子类具体覆盖处理.');
224 } 218 }
@@ -230,10 +224,12 @@ export default class Ape extends Emiter { @@ -230,10 +224,12 @@ export default class Ape extends Emiter {
230 onJoinSessionHandlerSuccess() { 224 onJoinSessionHandlerSuccess() {
231 //loger.warn(this._session_name + ' onJoinSessionHandlerSuccess 应有子类具体覆盖处理.'); 225 //loger.warn(this._session_name + ' onJoinSessionHandlerSuccess 应有子类具体覆盖处理.');
232 } 226 }
  227 +
233 //录制状态发生改变后ape模块数据更新 228 //录制状态发生改变后ape模块数据更新
234 - updaterRecordApeStatus(_data){ 229 + updaterRecordApeStatus(_data) {
235 loger.warn(this._session_name + 'updaterRecordApeStatus->应有子类具体覆盖处理.'); 230 loger.warn(this._session_name + 'updaterRecordApeStatus->应有子类具体覆盖处理.');
236 } 231 }
  232 +
237 // 加入Session处理 233 // 加入Session处理
238 _joinSessionHandler(data) { 234 _joinSessionHandler(data) {
239 //loger.log(this._session_name, ' -> 加入Session'); 235 //loger.log(this._session_name, ' -> 加入Session');
@@ -331,17 +327,11 @@ export default class Ape extends Emiter { @@ -331,17 +327,11 @@ export default class Ape extends Emiter {
331 327
332 send(appPdu) { 328 send(appPdu) {
333 //loger.log('Ape发送数据NORMAL PDU'); 329 //loger.log('Ape发送数据NORMAL PDU');
334 - //console.log(appPdu);  
335 - //loger.log('当前的状态============',GlobalConfig.getCurrentStatus().code);  
336 - /* if (GlobalConfig.getCurrentStatus().code == 0 || GlobalConfig.getCurrentStatus().code == 1) {  
337 - this._emit(MessageTypes.MCU_ERROR, MessageTypes.ERR_APE_SEND_FAILED_NO_JOIN);  
338 - return;  
339 - }*/  
340 - if(!this.mcu||!this.mcu.connected){ 330 + if (!this.mcu || !this.mcu.connected || GlobalConfig.classExit) {
341 this._emit(MessageTypes.MCU_ERROR, MessageTypes.ERR_APE_SEND_FAILED_NO_JOIN); 331 this._emit(MessageTypes.MCU_ERROR, MessageTypes.ERR_APE_SEND_FAILED_NO_JOIN);
342 return; 332 return;
343 } 333 }
344 - if(!this._classInfo){ 334 + if (!this._classInfo) {
345 loger.warn('Ape发送数据NORMAL PDU->失败->ape课堂数据无效->', this._classInfo); 335 loger.warn('Ape发送数据NORMAL PDU->失败->ape课堂数据无效->', this._classInfo);
346 return; 336 return;
347 } 337 }
@@ -364,7 +354,10 @@ export default class Ape extends Emiter { @@ -364,7 +354,10 @@ export default class Ape extends Emiter {
364 354
365 // 发送当前APE(session uniform包) 355 // 发送当前APE(session uniform包)
366 sendUniform(appPdu, top) { 356 sendUniform(appPdu, top) {
367 - if(!this._classInfo){ 357 + if (!this.mcu || !this.mcu.connected || GlobalConfig.classExit) {
  358 +
  359 + }
  360 + if (!this._classInfo) {
368 loger.warn('Ape发送数据UNIFORM PDU->失败->ape课堂数据无效->', this._classInfo); 361 loger.warn('Ape发送数据UNIFORM PDU->失败->ape课堂数据无效->', this._classInfo);
369 return; 362 return;
370 } 363 }
@@ -381,22 +374,21 @@ export default class Ape extends Emiter { @@ -381,22 +374,21 @@ export default class Ape extends Emiter {
381 ); 374 );
382 uniformPdu.data = appPdu.toArrayBuffer(); 375 uniformPdu.data = appPdu.toArrayBuffer();
383 // Mcu发送 376 // Mcu发送
384 - if(this.mcu){ 377 + if (this.mcu) {
385 this.mcu.send(uniformPdu); 378 this.mcu.send(uniformPdu);
386 - }else {  
387 - loger.warn('MCU为空->无法发送消息',uniformPdu); 379 + } else {
  380 + loger.warn('MCU为空->无法发送消息', uniformPdu);
388 } 381 }
389 382
390 } 383 }
391 384
392 sendChatUniform(appPdu, top) { 385 sendChatUniform(appPdu, top) {
393 - //console.log(appPdu);  
394 //loger.log('当前的状态============',GlobalConfig.getCurrentStatus().code); 386 //loger.log('当前的状态============',GlobalConfig.getCurrentStatus().code);
395 - if (GlobalConfig.getCurrentStatus().code == 0 || GlobalConfig.getCurrentStatus().code == 1) { 387 + if (!this.mcu || !this.mcu.connected || GlobalConfig.classExit) {
396 this._emit(MessageTypes.MCU_ERROR, MessageTypes.ERR_APE_SEND_FAILED_NO_JOIN); 388 this._emit(MessageTypes.MCU_ERROR, MessageTypes.ERR_APE_SEND_FAILED_NO_JOIN);
397 return; 389 return;
398 } 390 }
399 - if(!this._classInfo){ 391 + if (!this._classInfo) {
400 loger.warn("课堂数据还未获取,不能发送消息"); 392 loger.warn("课堂数据还未获取,不能发送消息");
401 return; 393 return;
402 } 394 }
@@ -194,16 +194,16 @@ ApeConsts.MUSIC_SESSION_TAG = "mis-tag"; @@ -194,16 +194,16 @@ ApeConsts.MUSIC_SESSION_TAG = "mis-tag";
194 ApeConsts.SCREENSHARING_SESSION_TAG = "scr-tag"; 194 ApeConsts.SCREENSHARING_SESSION_TAG = "scr-tag";
195 ApeConsts.QUESTION_SESSION_TAG = "qst-tag"; 195 ApeConsts.QUESTION_SESSION_TAG = "qst-tag";
196 196
197 -ApeConsts.CONFERENCE_OBJ_ROSTER_ID = ((ApeConsts.CONFERENCE_SESSION_ID << 16) + 1); 197 +ApeConsts.CONFERENCE_OBJ_ROSTER_ID = ((ApeConsts.CONFERENCE_SESSION_ID << 16) + 1);//720897
198 ApeConsts.CONFERENCE_OBJ_ROSTER_NAME = "node list"; 198 ApeConsts.CONFERENCE_OBJ_ROSTER_NAME = "node list";
199 ApeConsts.CONFERENCE_OBJ_ROSTER_TAG = "node list tag"; 199 ApeConsts.CONFERENCE_OBJ_ROSTER_TAG = "node list tag";
200 200
201 -ApeConsts.CONFERENCE_OBJ_QUEUE_ID = ((ApeConsts.CONFERENCE_SESSION_ID << 16) + 2); 201 +ApeConsts.CONFERENCE_OBJ_QUEUE_ID = ((ApeConsts.CONFERENCE_SESSION_ID << 16) + 2);//720898
202 ApeConsts.CONFERENCE_OBJ_QUEUE_NAME = "mic list"; 202 ApeConsts.CONFERENCE_OBJ_QUEUE_NAME = "mic list";
203 ApeConsts.CONFERENCE_OBJ_QUEUE_TAG = "mic list tag"; 203 ApeConsts.CONFERENCE_OBJ_QUEUE_TAG = "mic list tag";
204 204
205 // conference tab pages 205 // conference tab pages
206 -ApeConsts.CONFERENCE_OBJ_TABLE_ID = ((ApeConsts.CONFERENCE_SESSION_ID << 16) + 3); 206 +ApeConsts.CONFERENCE_OBJ_TABLE_ID = ((ApeConsts.CONFERENCE_SESSION_ID << 16) + 3);//720899
207 ApeConsts.CONFERENCE_OBJ_TABLE_NAME = "tabbar list"; 207 ApeConsts.CONFERENCE_OBJ_TABLE_NAME = "tabbar list";
208 ApeConsts.CONFERENCE_OBJ_TABLE_TAG = "tabbar list tag"; 208 ApeConsts.CONFERENCE_OBJ_TABLE_TAG = "tabbar list tag";
209 209
@@ -23,6 +23,7 @@ class ConferApe extends Ape { @@ -23,6 +23,7 @@ class ConferApe extends Ape {
23 ApeConsts.CONFERENCE_SESSION_NAME, 23 ApeConsts.CONFERENCE_SESSION_NAME,
24 ApeConsts.CONFERENCE_SESSION_TAG 24 ApeConsts.CONFERENCE_SESSION_TAG
25 ); 25 );
  26 + this.isSendInsterRoster=false;//这个很重要,每次MCU连接成功之后只发一次
26 this.isLeave=false;//记录自己是否已经离开 27 this.isLeave=false;//记录自己是否已经离开
27 this.rosters = {}; //用户列表 28 this.rosters = {}; //用户列表
28 this.rosterLen = 0;//当前课堂人数 29 this.rosterLen = 0;//当前课堂人数
@@ -57,7 +58,10 @@ class ConferApe extends Ape { @@ -57,7 +58,10 @@ class ConferApe extends Ape {
57 58
58 //加入课堂 59 //加入课堂
59 _joinSessionHandler(_data) { 60 _joinSessionHandler(_data) {
60 - //let nodeInfoRecordPdu = this.mcu.mcuClassInfo.self; 61 + if(this.isSendInsterRoster){
  62 + loger.warn("已经发送过insertRoster,不能再次发送");
  63 + return
  64 + }
61 let nodeInfoRecordPdu = this.getNodeInfo(); 65 let nodeInfoRecordPdu = this.getNodeInfo();
62 66
63 let userDataPdu = new pdu['RCNodeInfoUserDataPdu']; 67 let userDataPdu = new pdu['RCNodeInfoUserDataPdu'];
@@ -67,14 +71,12 @@ class ConferApe extends Ape { @@ -67,14 +71,12 @@ class ConferApe extends Ape {
67 nodeInfoRecordPdu.userData = userDataPdu.toArrayBuffer(); 71 nodeInfoRecordPdu.userData = userDataPdu.toArrayBuffer();
68 nodeInfoRecordPdu.deviceType = GlobalConfig.deviceType; //设备类型 72 nodeInfoRecordPdu.deviceType = GlobalConfig.deviceType; //设备类型
69 73
70 - //loger.log('开始加入->', nodeInfoRecordPdu);  
71 -  
72 let item = new pdu['RCRegistryRosterItemPdu']; 74 let item = new pdu['RCRegistryRosterItemPdu'];
73 item.nodeId = nodeInfoRecordPdu.nodeId; 75 item.nodeId = nodeInfoRecordPdu.nodeId;
74 item.nodeData = nodeInfoRecordPdu.toArrayBuffer(); 76 item.nodeData = nodeInfoRecordPdu.toArrayBuffer();
75 77
76 let rosterUpdateItem = new pdu['RCRegistryRosterInsertItemPdu']; 78 let rosterUpdateItem = new pdu['RCRegistryRosterInsertItemPdu'];
77 - rosterUpdateItem.type = pdu.RCPDU_REG_ROSTER_UPDATE_PDU; 79 + rosterUpdateItem.type =pdu.RCPDU_REG_ROSTER_UPDATE_PDU;// pdu.RCPDU_REG_ROSTER_INSERT_PDU 暂时用update的类型,MCU第一次会当insert处理,目前insert解包出错
78 rosterUpdateItem.items.push(item); 80 rosterUpdateItem.items.push(item);
79 81
80 let updateObjPdu = new pdu['RCRegistryUpdateObjPdu']; 82 let updateObjPdu = new pdu['RCRegistryUpdateObjPdu'];
@@ -91,6 +93,9 @@ class ConferApe extends Ape { @@ -91,6 +93,9 @@ class ConferApe extends Ape {
91 adapterPdu.type = pdu.RCPDU_REG_ADAPTER; 93 adapterPdu.type = pdu.RCPDU_REG_ADAPTER;
92 adapterPdu.item.push(adapterItemPdu); 94 adapterPdu.item.push(adapterItemPdu);
93 this.sendUniform(adapterPdu, true); 95 this.sendUniform(adapterPdu, true);
  96 +
  97 + this.isSendInsterRoster=true;
  98 + loger.log('发送insertRoster->', nodeInfoRecordPdu);
94 } 99 }
95 100
96 //获取角色信息 101 //获取角色信息
@@ -289,7 +294,7 @@ class ConferApe extends Ape { @@ -289,7 +294,7 @@ class ConferApe extends Ape {
289 loger.warn('目前已经是录制状态->当前课堂人数:' + this.rosterLen); 294 loger.warn('目前已经是录制状态->当前课堂人数:' + this.rosterLen);
290 return false; 295 return false;
291 } 296 }
292 - //如果是host或者当前课堂只有1个人 297 + //如果是host或者当前课堂只有1个人,并且不是H5
293 if (this.checkHasRecordControl()) { 298 if (this.checkHasRecordControl()) {
294 loger.warn('开启录制', "isHost", GlobalConfig.isHost, "recordStatus", GlobalConfig.recordStatus, "当前人数:" + this.rosterLen); 299 loger.warn('开启录制', "isHost", GlobalConfig.isHost, "recordStatus", GlobalConfig.recordStatus, "当前人数:" + this.rosterLen);
295 //如果录制的文件名不存在,需要创建一个名字 300 //如果录制的文件名不存在,需要创建一个名字
@@ -619,6 +624,9 @@ class ConferApe extends Ape { @@ -619,6 +624,9 @@ class ConferApe extends Ape {
619 sendUpdaterClassStatusInfo(_param) { 624 sendUpdaterClassStatusInfo(_param) {
620 //{"actionType": 1,isStopAllPublishMedia:false} //actionType课堂状态 isStopAllPublishMedia是否停止当前的所有推流 625 //{"actionType": 1,isStopAllPublishMedia:false} //actionType课堂状态 isStopAllPublishMedia是否停止当前的所有推流
621 //console.log('发送更新课堂信息->'); 626 //console.log('发送更新课堂信息->');
  627 + if(GlobalConfig.classType==ApeConsts.CLASS_TYPE_ZHIBO&&GlobalConfig.isH5==true){
  628 + return;
  629 + }
622 if (_param == null || EngineUtils.isEmptyObject(_param)) { 630 if (_param == null || EngineUtils.isEmptyObject(_param)) {
623 loger.log('发送更新课堂信息->参数错误'); 631 loger.log('发送更新课堂信息->参数错误');
624 this._emit(MessageTypes.MCU_ERROR, MessageTypes.ERR_APE_INTERFACE_PARAM_WRONG); 632 this._emit(MessageTypes.MCU_ERROR, MessageTypes.ERR_APE_INTERFACE_PARAM_WRONG);
@@ -733,6 +741,10 @@ class ConferApe extends Ape { @@ -733,6 +741,10 @@ class ConferApe extends Ape {
733 //更新录制进行时间 741 //更新录制进行时间
734 GlobalConfig.recordTimestamp = GlobalConfig.recordTimestamp + 1; 742 GlobalConfig.recordTimestamp = GlobalConfig.recordTimestamp + 1;
735 if (this.checkHasRecordControl()) { 743 if (this.checkHasRecordControl()) {
  744 +
  745 + if(GlobalConfig.classType==ApeConsts.CLASS_TYPE_ZHIBO&&GlobalConfig.isH5==true){
  746 + return;
  747 + }
736 //以一定的时间间隔同步课堂内所有人的累积上课时间 748 //以一定的时间间隔同步课堂内所有人的累积上课时间
737 if (GlobalConfig.recordTimestamp % GlobalConfig.updateRecordTimeDelay == 0) { 749 if (GlobalConfig.recordTimestamp % GlobalConfig.updateRecordTimeDelay == 0) {
738 //保存数据到Sass 750 //保存数据到Sass
@@ -945,7 +957,6 @@ class ConferApe extends Ape { @@ -945,7 +957,6 @@ class ConferApe extends Ape {
945 } 957 }
946 958
947 rosterInsertHandler(nodeId, nodeData) { 959 rosterInsertHandler(nodeId, nodeData) {
948 - //loger.log("人员进入--->");  
949 if (GlobalConfig.nodeId == nodeId) { 960 if (GlobalConfig.nodeId == nodeId) {
950 loger.log("人员进入课堂模块--->自己"); 961 loger.log("人员进入课堂模块--->自己");
951 } else { 962 } else {
@@ -1026,8 +1037,10 @@ class ConferApe extends Ape { @@ -1026,8 +1037,10 @@ class ConferApe extends Ape {
1026 loger.log("人员加入->", newNodeData); 1037 loger.log("人员加入->", newNodeData);
1027 } 1038 }
1028 1039
  1040 + if(!GlobalConfig.isH5){
1029 this._emit(MessageTypes.CLASS_INSERT_ROSTER, {"nodeId": nodeId, "nodeData": newNodeData}); 1041 this._emit(MessageTypes.CLASS_INSERT_ROSTER, {"nodeId": nodeId, "nodeData": newNodeData});
1030 this.emitRosterChange(); 1042 this.emitRosterChange();
  1043 + }
1031 } else { 1044 } else {
1032 //loger.log("更新人员列表数据,rosterExists已经存在",rosterExists); 1045 //loger.log("更新人员列表数据,rosterExists已经存在",rosterExists);
1033 this.rosterLen = Object.keys(this.rosters).length; 1046 this.rosterLen = Object.keys(this.rosters).length;
@@ -1038,8 +1051,11 @@ class ConferApe extends Ape { @@ -1038,8 +1051,11 @@ class ConferApe extends Ape {
1038 loger.log("人员更新信息->", newNodeData); 1051 loger.log("人员更新信息->", newNodeData);
1039 } 1052 }
1040 } 1053 }
  1054 + if(!GlobalConfig.isH5){
1041 this._emit(MessageTypes.CLASS_UPDATE_ROSTER, {"nodeId": nodeId, "nodeData": newNodeData}); 1055 this._emit(MessageTypes.CLASS_UPDATE_ROSTER, {"nodeId": nodeId, "nodeData": newNodeData});
1042 } 1056 }
  1057 +
  1058 + }
1043 } 1059 }
1044 1060
1045 //踢出用户(_param是新进入的人的信息) 1061 //踢出用户(_param是新进入的人的信息)
@@ -1105,6 +1121,7 @@ class ConferApe extends Ape { @@ -1105,6 +1121,7 @@ class ConferApe extends Ape {
1105 this.rosterLen = Object.keys(this.rosters).length; 1121 this.rosterLen = Object.keys(this.rosters).length;
1106 GlobalConfig.rosterNumber = this.rosterLen;//记录当前的总人数 1122 GlobalConfig.rosterNumber = this.rosterLen;//记录当前的总人数
1107 1123
  1124 + if(!GlobalConfig.isH5) {
1108 this.emitRosterChange(); 1125 this.emitRosterChange();
1109 this._emit(MessageTypes.CLASS_DELETE_ROSTER, {"nodeId": nodeId, "rosterLen": this.rosterLen}); 1126 this._emit(MessageTypes.CLASS_DELETE_ROSTER, {"nodeId": nodeId, "rosterLen": this.rosterLen});
1110 1127
@@ -1124,11 +1141,14 @@ class ConferApe extends Ape { @@ -1124,11 +1141,14 @@ class ConferApe extends Ape {
1124 } 1141 }
1125 } 1142 }
1126 } 1143 }
  1144 + }
1127 1145
1128 //广播当前的人数 1146 //广播当前的人数
1129 emitRosterChange() { 1147 emitRosterChange() {
  1148 + if(!GlobalConfig.isH5){
1130 this._emit(MessageTypes.CLASS_UPDATE_ROSTER_NUM, Object.keys(this.rosters).length); 1149 this._emit(MessageTypes.CLASS_UPDATE_ROSTER_NUM, Object.keys(this.rosters).length);
1131 } 1150 }
  1151 + }
1132 1152
1133 ///////数据的封包和解包///////////////////////////////////////// 1153 ///////数据的封包和解包/////////////////////////////////////////
1134 packPdu(_param, _itemIdx) { 1154 packPdu(_param, _itemIdx) {
@@ -1206,6 +1226,7 @@ class ConferApe extends Ape { @@ -1206,6 +1226,7 @@ class ConferApe extends Ape {
1206 GlobalConfig.rosterNumber = this.rosterLen; 1226 GlobalConfig.rosterNumber = this.rosterLen;
1207 GlobalConfig.rosters = this.rosters; 1227 GlobalConfig.rosters = this.rosters;
1208 this.isLeave=true; 1228 this.isLeave=true;
  1229 + this.isSendInsterRoster=false;
1209 } 1230 }
1210 1231
1211 } 1232 }
@@ -406,6 +406,12 @@ class VideoApe extends Ape { @@ -406,6 +406,12 @@ class VideoApe extends Ape {
406 loger.warn(GlobalConfig.getCurrentStatus()); 406 loger.warn(GlobalConfig.getCurrentStatus());
407 return {"code": ApeConsts.RETURN_FAILED, "data": "已经断开连接"}; 407 return {"code": ApeConsts.RETURN_FAILED, "data": "已经断开连接"};
408 } 408 }
  409 + clearTimeout(this.releaseTimeId);
  410 + if(GlobalConfig.classType==ApeConsts.CLASS_TYPE_ZHIBO&&GlobalConfig.isH5){
  411 + //直播时H5不处理
  412 + return;
  413 + }
  414 +
409 loger.log("释放nodeId占用的所有频道->", nodeId); 415 loger.log("释放nodeId占用的所有频道->", nodeId);
410 let openingChannelInfo = this.mediaModule.getOpeningMediaChannelForNodeId(nodeId); 416 let openingChannelInfo = this.mediaModule.getOpeningMediaChannelForNodeId(nodeId);
411 if (openingChannelInfo.channelId == 0) { 417 if (openingChannelInfo.channelId == 0) {
@@ -423,10 +429,6 @@ class VideoApe extends Ape { @@ -423,10 +429,6 @@ class VideoApe extends Ape {
423 429
424 this.sendTableUpdateHandler(channelInfo); 430 this.sendTableUpdateHandler(channelInfo);
425 //递归检查,800毫秒之后执行 431 //递归检查,800毫秒之后执行
426 - clearTimeout(this.releaseTimeId);  
427 - if(GlobalConfig.classType==ApeConsts.CLASS_TYPE_ZHIBO&&GlobalConfig.isH5){  
428 - return;  
429 - }  
430 this.releaseTimeId = setTimeout(function () { 432 this.releaseTimeId = setTimeout(function () {
431 loger.warn(nodeId, "检查频道是否占用"); 433 loger.warn(nodeId, "检查频道是否占用");
432 this._releaseNodeIdAllChannel(nodeId); 434 this._releaseNodeIdAllChannel(nodeId);
@@ -501,7 +503,10 @@ class VideoApe extends Ape { @@ -501,7 +503,10 @@ class VideoApe extends Ape {
501 //已经离开课堂就不再做处理 503 //已经离开课堂就不再做处理
502 return; 504 return;
503 } 505 }
504 - 506 + if(GlobalConfig.classType==ApeConsts.CLASS_TYPE_ZHIBO&&GlobalConfig.isH5){
  507 + //直播时H5不做处理
  508 + return;
  509 + }
505 let updateModelPdu = this.packPdu(_channelInfo, _channelInfo.channelId);//let updateModelPdu=this.packPdu({},ApeConsts.VIDEO_OBJ_TABLE_ID+2); 510 let updateModelPdu = this.packPdu(_channelInfo, _channelInfo.channelId);//let updateModelPdu=this.packPdu({},ApeConsts.VIDEO_OBJ_TABLE_ID+2);
506 511
507 if (updateModelPdu == null) { 512 if (updateModelPdu == null) {