正在显示
6 个修改的文件
包含
112 行增加
和
26 行删除
| @@ -58,7 +58,7 @@ export default class MessageEntrance extends Emiter { | @@ -58,7 +58,7 @@ export default class MessageEntrance extends Emiter { | ||
| 58 | constructor() { | 58 | constructor() { |
| 59 | super(); | 59 | super(); |
| 60 | //sdk 信息 | 60 | //sdk 信息 |
| 61 | - GlobalConfig.sdkVersion = "v1.81.1.20170824"; | 61 | + GlobalConfig.sdkVersion = "v1.81.19.20170828"; |
| 62 | loger.warn("sdkVersion:" + GlobalConfig.sdkVersion); | 62 | loger.warn("sdkVersion:" + GlobalConfig.sdkVersion); |
| 63 | 63 | ||
| 64 | //设置 | 64 | //设置 |
| @@ -399,7 +399,7 @@ export default class MessageEntrance extends Emiter { | @@ -399,7 +399,7 @@ export default class MessageEntrance extends Emiter { | ||
| 399 | //当前的课堂状态信息发生改变,需要保存课堂状态到Sass | 399 | //当前的课堂状态信息发生改变,需要保存课堂状态到Sass |
| 400 | _onClassStatusInfoChange(_param) { | 400 | _onClassStatusInfoChange(_param) { |
| 401 | //如果MCU连接已经断开,不发送 | 401 | //如果MCU连接已经断开,不发送 |
| 402 | - if (GlobalConfig.getCurrentStatus().code != GlobalConfig.statusCode_2.code) { | 402 | + if (!_mcu||!_mcu.connected) { |
| 403 | loger.warn("不能保存课堂状态", GlobalConfig.getCurrentStatus()); | 403 | loger.warn("不能保存课堂状态", GlobalConfig.getCurrentStatus()); |
| 404 | return; | 404 | return; |
| 405 | } | 405 | } |
| @@ -424,14 +424,17 @@ export default class MessageEntrance extends Emiter { | @@ -424,14 +424,17 @@ export default class MessageEntrance extends Emiter { | ||
| 424 | this.classRecordStatusUpdateTimer = setTimeout(function () { | 424 | this.classRecordStatusUpdateTimer = setTimeout(function () { |
| 425 | clearTimeout(this.classRecordStatusUpdateTimer); | 425 | clearTimeout(this.classRecordStatusUpdateTimer); |
| 426 | _this.updaterRecordAllApeStatus(_param); | 426 | _this.updaterRecordAllApeStatus(_param); |
| 427 | - }, 2000); | 427 | + }, 1600); |
| 428 | 428 | ||
| 429 | } | 429 | } |
| 430 | 430 | ||
| 431 | //录制状态发送改变,更新所有模块的当前数据发送到MCU | 431 | //录制状态发送改变,更新所有模块的当前数据发送到MCU |
| 432 | updaterRecordAllApeStatus(_param) { | 432 | updaterRecordAllApeStatus(_param) { |
| 433 | + if(GlobalConfig.isRecordPlayBack){ | ||
| 434 | + return; | ||
| 435 | + } | ||
| 433 | //老师身份和非录制回放的时候执行,录制状态发送改变,需要更新当前的数据,否则已有的消息会录制不上 | 436 | //老师身份和非录制回放的时候执行,录制状态发送改变,需要更新当前的数据,否则已有的消息会录制不上 |
| 434 | - if (GlobalConfig.isHost && !GlobalConfig.isRecordPlayBack) { | 437 | + if (GlobalConfig.isHost||GlobalConfig.rosterNumber<=1) { |
| 435 | loger.warn('录制状态发送改变->更新所有模块的当前数据发送到MCU'); | 438 | loger.warn('录制状态发送改变->更新所有模块的当前数据发送到MCU'); |
| 436 | //目前录制的模块[文档模块、白板模块、视频模块(包含屏幕共享)、音频模块、媒体共享,聊天模块] | 439 | //目前录制的模块[文档模块、白板模块、视频模块(包含屏幕共享)、音频模块、媒体共享,聊天模块] |
| 437 | if (_doc_ape) { | 440 | if (_doc_ape) { |
| @@ -959,7 +962,7 @@ export default class MessageEntrance extends Emiter { | @@ -959,7 +962,7 @@ export default class MessageEntrance extends Emiter { | ||
| 959 | isForce = true; | 962 | isForce = true; |
| 960 | } | 963 | } |
| 961 | 964 | ||
| 962 | - if (GlobalConfig.isHost || isForce) { | 965 | + /* if (GlobalConfig.isHost || isForce) { |
| 963 | //只有加入课堂之后才能保存数据 | 966 | //只有加入课堂之后才能保存数据 |
| 964 | if (GlobalConfig.getCurrentStatus().code == GlobalConfig.statusCode_2.code) { | 967 | if (GlobalConfig.getCurrentStatus().code == GlobalConfig.statusCode_2.code) { |
| 965 | //POST 保存数据 | 968 | //POST 保存数据 |
| @@ -969,7 +972,26 @@ export default class MessageEntrance extends Emiter { | @@ -969,7 +972,26 @@ export default class MessageEntrance extends Emiter { | ||
| 969 | } | 972 | } |
| 970 | } else { | 973 | } else { |
| 971 | loger.log("没有保存课堂状态信息的权限->身份", GlobalConfig.userRole); | 974 | loger.log("没有保存课堂状态信息的权限->身份", GlobalConfig.userRole); |
| 975 | + }*/ | ||
| 976 | + if (GlobalConfig.isHost || isForce||GlobalConfig.rosterNumber<=1) { | ||
| 977 | + //只有加入课堂之后才能保存数据 | ||
| 978 | + /*if (GlobalConfig.getCurrentStatus().code == GlobalConfig.statusCode_2.code) { | ||
| 979 | + //POST 保存数据 | ||
| 980 | + _sass.saveClassStatusInfo({"classStatusInfo": GlobalConfig.classStatusInfo}); //保存课堂状态信息 | ||
| 981 | + } else { | ||
| 982 | + loger.error("不能保存课堂数据", GlobalConfig.getCurrentStatus()); | ||
| 983 | + }*/ | ||
| 984 | + if (_mcu&&_mcu.connected) { | ||
| 985 | + //POST 保存数据 | ||
| 986 | + _sass.saveClassStatusInfo({"classStatusInfo": GlobalConfig.classStatusInfo}); //保存课堂状态信息 | ||
| 987 | + } else { | ||
| 988 | + loger.error("不能保存课堂数据", GlobalConfig.getCurrentStatus()); | ||
| 989 | + } | ||
| 990 | + | ||
| 991 | + } else { | ||
| 992 | + loger.log("没有保存课堂状态信息的权限->身份", GlobalConfig.userRole); | ||
| 972 | } | 993 | } |
| 994 | + | ||
| 973 | } | 995 | } |
| 974 | 996 | ||
| 975 | //保存会态信息成功 | 997 | //保存会态信息成功 |
| @@ -1355,10 +1377,15 @@ export default class MessageEntrance extends Emiter { | @@ -1355,10 +1377,15 @@ export default class MessageEntrance extends Emiter { | ||
| 1355 | loger.warn(GlobalConfig.getCurrentStatus()); | 1377 | loger.warn(GlobalConfig.getCurrentStatus()); |
| 1356 | return; | 1378 | return; |
| 1357 | } | 1379 | } |
| 1358 | - | 1380 | + if(GlobalConfig.isRecordPlayBack){ |
| 1381 | + return; | ||
| 1382 | + } | ||
| 1359 | if (_confer_ape) { | 1383 | if (_confer_ape) { |
| 1360 | //开始录制 | 1384 | //开始录制 |
| 1385 | + setTimeout(()=> { | ||
| 1361 | _confer_ape.startRecord(); | 1386 | _confer_ape.startRecord(); |
| 1387 | + },2000); | ||
| 1388 | + | ||
| 1362 | //开始上课 | 1389 | //开始上课 |
| 1363 | _confer_ape.startClass(_param); | 1390 | _confer_ape.startClass(_param); |
| 1364 | } | 1391 | } |
| @@ -72,6 +72,7 @@ class RecordPlayBackParse extends Emiter { | @@ -72,6 +72,7 @@ class RecordPlayBackParse extends Emiter { | ||
| 72 | let pduMsg = pdu.decode_pdu(data); | 72 | let pduMsg = pdu.decode_pdu(data); |
| 73 | let pduType = pduMsg.get("type"); | 73 | let pduType = pduMsg.get("type"); |
| 74 | let pduData = pduMsg.get("data"); | 74 | let pduData = pduMsg.get("data"); |
| 75 | + | ||
| 75 | //*************非常重要****************** | 76 | //*************非常重要****************** |
| 76 | //客户端发送的所有125消息,MCU收到之后会痛120把消息返回给客户端, | 77 | //客户端发送的所有125消息,MCU收到之后会痛120把消息返回给客户端, |
| 77 | //所以需要把125消息type转换为120,因为MCU在录制的时候是直接录制客户端发送的消息而不是MCU转换之后的 | 78 | //所以需要把125消息type转换为120,因为MCU在录制的时候是直接录制客户端发送的消息而不是MCU转换之后的 |
| @@ -121,10 +122,11 @@ class RecordPlayBackParse extends Emiter { | @@ -121,10 +122,11 @@ class RecordPlayBackParse extends Emiter { | ||
| 121 | 122 | ||
| 122 | //解析和储存,录制回放EverSocket底层消息处理 data-数据;timestamp-数据对应的时间戳 | 123 | //解析和储存,录制回放EverSocket底层消息处理 data-数据;timestamp-数据对应的时间戳 |
| 123 | _parseSaveSocketMsgReceivedHandler(data, timestamp) { | 124 | _parseSaveSocketMsgReceivedHandler(data, timestamp) { |
| 124 | - //loger.log('解析和储存录制回放数据-> '); | 125 | + |
| 125 | let pduMsg = pdu.decode_pdu(data); | 126 | let pduMsg = pdu.decode_pdu(data); |
| 126 | let pduType = pduMsg.get("type"); | 127 | let pduType = pduMsg.get("type"); |
| 127 | let pduData = pduMsg.get("data"); | 128 | let pduData = pduMsg.get("data"); |
| 129 | + | ||
| 128 | //*************非常重要****************** | 130 | //*************非常重要****************** |
| 129 | //客户端发送的所有125消息,MCU收到之后会痛120把消息返回给客户端, | 131 | //客户端发送的所有125消息,MCU收到之后会痛120把消息返回给客户端, |
| 130 | //所以需要把125消息type转换为120,因为MCU在录制的时候是直接录制客户端发送的消息而不是MCU转换之后的 | 132 | //所以需要把125消息type转换为120,因为MCU在录制的时候是直接录制客户端发送的消息而不是MCU转换之后的 |
| @@ -328,10 +330,17 @@ class RecordPlayBackParse extends Emiter { | @@ -328,10 +330,17 @@ class RecordPlayBackParse extends Emiter { | ||
| 328 | } | 330 | } |
| 329 | 331 | ||
| 330 | GlobalConfig.recordPlaybackMaxTime = this._recordPlaybackMaxTime; | 332 | GlobalConfig.recordPlaybackMaxTime = this._recordPlaybackMaxTime; |
| 333 | + console.log('课堂模块',this._conferApeMssages); | ||
| 331 | console.log('音视频通话模块数据',this.mediaChannleList); | 334 | console.log('音视频通话模块数据',this.mediaChannleList); |
| 332 | console.log('媒体共享模块数据',this._mediaShareApeMssages); | 335 | console.log('媒体共享模块数据',this._mediaShareApeMssages); |
| 333 | console.log('伴音模块数据',this._musicShareApeMssages); | 336 | console.log('伴音模块数据',this._musicShareApeMssages); |
| 334 | - loger.log("录制回放数据解析完成,录制回放的总时间长为->", this._recordPlaybackMaxTime); | 337 | + console.log('视频数据',this._videoApeMssages); |
| 338 | + console.log('音频数据',this._audioApeMssages); | ||
| 339 | + console.log('文档数据',this._docApeMssages); | ||
| 340 | + console.log('白板数据',this._whiteApeMssages); | ||
| 341 | + console.log('聊天数据',this._chatApeMssages); | ||
| 342 | + | ||
| 343 | + loger.log("录制回放数据解析完成,录制回放的总时间长为->", this._recordPlaybackMaxTime,"recordTimestamp:"+GlobalConfig.recordTimestamp); | ||
| 335 | this._emit(RecordPlayBackParse.CLASS_JOIN_RECORD_PLAYBACK_SUCCESS, {"recordPlaybackMaxTime": this._recordPlaybackMaxTime}); | 344 | this._emit(RecordPlayBackParse.CLASS_JOIN_RECORD_PLAYBACK_SUCCESS, {"recordPlaybackMaxTime": this._recordPlaybackMaxTime}); |
| 336 | } | 345 | } |
| 337 | 346 | ||
| @@ -342,7 +351,7 @@ class RecordPlayBackParse extends Emiter { | @@ -342,7 +351,7 @@ class RecordPlayBackParse extends Emiter { | ||
| 342 | //没有数据,需要查找当前时间点属于哪一个时间戳关键帧 | 351 | //没有数据,需要查找当前时间点属于哪一个时间戳关键帧 |
| 343 | } else { | 352 | } else { |
| 344 | //把时间点对应的数据发送,同一秒内有存在多个数据的情况 | 353 | //把时间点对应的数据发送,同一秒内有存在多个数据的情况 |
| 345 | - loger.log(_ape,"回放数据->",msgDataArr.length) | 354 | + loger.log(_ape,"回放数据->length:",msgDataArr.length) |
| 346 | for (let i = 0; i < msgDataArr.length; i++) { | 355 | for (let i = 0; i < msgDataArr.length; i++) { |
| 347 | this._everSocketMsgReceivedHandler(msgDataArr[i].byteData, 0); | 356 | this._everSocketMsgReceivedHandler(msgDataArr[i].byteData, 0); |
| 348 | } | 357 | } |
| @@ -470,11 +479,12 @@ class RecordPlayBackParse extends Emiter { | @@ -470,11 +479,12 @@ class RecordPlayBackParse extends Emiter { | ||
| 470 | messageItem = channelInfos[i]; | 479 | messageItem = channelInfos[i]; |
| 471 | if (messageItem) { | 480 | if (messageItem) { |
| 472 | keyFrameSeekTime = (this._recordPlaybackTimestamp - i); | 481 | keyFrameSeekTime = (this._recordPlaybackTimestamp - i); |
| 473 | - loger.log("SEEK->查找音视频模块数据->",messageItem,'keyFrameSeekTime->',keyFrameSeekTime) | 482 | + loger.log("频道:"+k+"->SEEK->查找音视频模块数据->",messageItem,'keyFrameSeekTime->',keyFrameSeekTime) |
| 474 | this._everSocketMsgReceivedHandler(messageItem.byteData, keyFrameSeekTime); | 483 | this._everSocketMsgReceivedHandler(messageItem.byteData, keyFrameSeekTime); |
| 475 | break; | 484 | break; |
| 476 | } | 485 | } |
| 477 | } | 486 | } |
| 487 | + loger.log("频道:"+k+"—>没有查找到数据") | ||
| 478 | } | 488 | } |
| 479 | } | 489 | } |
| 480 | } | 490 | } |
| @@ -677,7 +687,11 @@ class RecordPlayBackParse extends Emiter { | @@ -677,7 +687,11 @@ class RecordPlayBackParse extends Emiter { | ||
| 677 | if(!this.mediaChannleList[videoChannelInfo.channelId]){ | 687 | if(!this.mediaChannleList[videoChannelInfo.channelId]){ |
| 678 | this.mediaChannleList[videoChannelInfo.channelId]={}; | 688 | this.mediaChannleList[videoChannelInfo.channelId]={}; |
| 679 | } | 689 | } |
| 680 | - this.mediaChannleList[videoChannelInfo.channelId][timestamp]={parseData:videoChannelInfo,byteData:data,timestamp: timestamp }; | 690 | + let statusStr="关"; |
| 691 | + if(videoChannelInfo&&videoChannelInfo.status==1){ | ||
| 692 | + statusStr="开"; | ||
| 693 | + } | ||
| 694 | + this.mediaChannleList[videoChannelInfo.channelId][timestamp]={parseData:videoChannelInfo,byteData:data,timestamp: timestamp,status:statusStr}; | ||
| 681 | } catch (err) { | 695 | } catch (err) { |
| 682 | loger.log("RCVideoChannelInfoPdu->unPackPdu->error->" + tableItem.itemIdx + " err:" + err.message); | 696 | loger.log("RCVideoChannelInfoPdu->unPackPdu->error->" + tableItem.itemIdx + " err:" + err.message); |
| 683 | } | 697 | } |
| @@ -689,7 +703,11 @@ class RecordPlayBackParse extends Emiter { | @@ -689,7 +703,11 @@ class RecordPlayBackParse extends Emiter { | ||
| 689 | if(!this.mediaChannleList[audioChannelInfo.channelId]){ | 703 | if(!this.mediaChannleList[audioChannelInfo.channelId]){ |
| 690 | this.mediaChannleList[audioChannelInfo.channelId]={}; | 704 | this.mediaChannleList[audioChannelInfo.channelId]={}; |
| 691 | } | 705 | } |
| 692 | - this.mediaChannleList[audioChannelInfo.channelId][timestamp]={parseData:audioChannelInfo,byteData:data,timestamp: timestamp }; | 706 | + let statusStr="关"; |
| 707 | + if(audioChannelInfo&&audioChannelInfo.status==1){ | ||
| 708 | + statusStr="开"; | ||
| 709 | + } | ||
| 710 | + this.mediaChannleList[audioChannelInfo.channelId][timestamp]={parseData:audioChannelInfo,byteData:data,timestamp: timestamp,status:statusStr}; | ||
| 693 | } catch (err) { | 711 | } catch (err) { |
| 694 | loger.log("RCAudioChannelInfoPdu->unPackPdu->error->" + tableItem.itemIdx + " err:" + err.message); | 712 | loger.log("RCAudioChannelInfoPdu->unPackPdu->error->" + tableItem.itemIdx + " err:" + err.message); |
| 695 | } | 713 | } |
| @@ -94,6 +94,7 @@ export default class Ape extends Emiter { | @@ -94,6 +94,7 @@ export default class Ape extends Emiter { | ||
| 94 | let regPdu = pdu['RCAdapterPdu'].decode(regBuffer); | 94 | let regPdu = pdu['RCAdapterPdu'].decode(regBuffer); |
| 95 | let regItems = regPdu.item; | 95 | let regItems = regPdu.item; |
| 96 | let regItemSize = regItems.length; | 96 | let regItemSize = regItems.length; |
| 97 | + //console.log("RCAdapterPdu数据同步处理",regPdu); | ||
| 97 | //loger.log(this._session_name + '数据同步消息'); | 98 | //loger.log(this._session_name + '数据同步消息'); |
| 98 | //loger.log(this._session_name + '数据同步消息.同步条数', regItemSize,"seekTime->",seekTime); | 99 | //loger.log(this._session_name + '数据同步消息.同步条数', regItemSize,"seekTime->",seekTime); |
| 99 | for (var i = 0; i < regItemSize; ++i) { | 100 | for (var i = 0; i < regItemSize; ++i) { |
| @@ -332,7 +333,11 @@ export default class Ape extends Emiter { | @@ -332,7 +333,11 @@ export default class Ape extends Emiter { | ||
| 332 | //loger.log('Ape发送数据NORMAL PDU'); | 333 | //loger.log('Ape发送数据NORMAL PDU'); |
| 333 | //console.log(appPdu); | 334 | //console.log(appPdu); |
| 334 | //loger.log('当前的状态============',GlobalConfig.getCurrentStatus().code); | 335 | //loger.log('当前的状态============',GlobalConfig.getCurrentStatus().code); |
| 335 | - if (GlobalConfig.getCurrentStatus().code == 0 || GlobalConfig.getCurrentStatus().code == 1) { | 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){ | ||
| 336 | this._emit(MessageTypes.MCU_ERROR, MessageTypes.ERR_APE_SEND_FAILED_NO_JOIN); | 341 | this._emit(MessageTypes.MCU_ERROR, MessageTypes.ERR_APE_SEND_FAILED_NO_JOIN); |
| 337 | return; | 342 | return; |
| 338 | } | 343 | } |
| @@ -391,7 +396,6 @@ export default class Ape extends Emiter { | @@ -391,7 +396,6 @@ export default class Ape extends Emiter { | ||
| 391 | this._emit(MessageTypes.MCU_ERROR, MessageTypes.ERR_APE_SEND_FAILED_NO_JOIN); | 396 | this._emit(MessageTypes.MCU_ERROR, MessageTypes.ERR_APE_SEND_FAILED_NO_JOIN); |
| 392 | return; | 397 | return; |
| 393 | } | 398 | } |
| 394 | - | ||
| 395 | let uniformPdu = pdu.create_uniform_pdu( | 399 | let uniformPdu = pdu.create_uniform_pdu( |
| 396 | appPdu.type, | 400 | appPdu.type, |
| 397 | this._classInfo.nodeId, | 401 | this._classInfo.nodeId, |
| @@ -470,7 +470,7 @@ class AudioApe extends Ape { | @@ -470,7 +470,7 @@ class AudioApe extends Ape { | ||
| 470 | 470 | ||
| 471 | //更新媒体文件模块的录制信息,每次开启录制的时候需要把当前媒体文件的信息更新一次 | 471 | //更新媒体文件模块的录制信息,每次开启录制的时候需要把当前媒体文件的信息更新一次 |
| 472 | updaterRecordApeStatus(_param) { | 472 | updaterRecordApeStatus(_param) { |
| 473 | - console.warn("录制状态发送改变->更新当前的状态->", this.mediaModule.mediaChannels); | 473 | + loger.warn("录制状态发送改变->更新当前的状态->", this.mediaModule.mediaChannels); |
| 474 | for (let i in this.mediaModule.mediaChannels) { | 474 | for (let i in this.mediaModule.mediaChannels) { |
| 475 | let channelInfo = this.mediaModule.mediaChannels[i]; | 475 | let channelInfo = this.mediaModule.mediaChannels[i]; |
| 476 | if (channelInfo) { | 476 | if (channelInfo) { |
| @@ -271,10 +271,10 @@ class ConferApe extends Ape { | @@ -271,10 +271,10 @@ class ConferApe extends Ape { | ||
| 271 | loger.warn('不能再录制,录制时间已经达到最大限制', GlobalConfig.recordTimestamp); | 271 | loger.warn('不能再录制,录制时间已经达到最大限制', GlobalConfig.recordTimestamp); |
| 272 | return; | 272 | return; |
| 273 | } | 273 | } |
| 274 | - | 274 | + loger.warn('检测是否需要开启录制', "isHost", GlobalConfig.isHost, "recordStatus", GlobalConfig.recordStatus,"当前人数:"+this.rosterLen); |
| 275 | //如果是host或者当前课堂只有1个人 | 275 | //如果是host或者当前课堂只有1个人 |
| 276 | if (GlobalConfig.isHost||this.rosterLen<=1) { | 276 | if (GlobalConfig.isHost||this.rosterLen<=1) { |
| 277 | - if(GlobalConfig.recordStatus){ | 277 | + /* if(GlobalConfig.recordStatus){ |
| 278 | loger.warn("课堂已经是录制状态不->不需要再开启,isHost", GlobalConfig.isHost, "recordStatus", GlobalConfig.recordStatus,"当前人数:"+this.rosterLen); | 278 | loger.warn("课堂已经是录制状态不->不需要再开启,isHost", GlobalConfig.isHost, "recordStatus", GlobalConfig.recordStatus,"当前人数:"+this.rosterLen); |
| 279 | }else{ | 279 | }else{ |
| 280 | loger.warn('开启录制', "isHost", GlobalConfig.isHost, "recordStatus", GlobalConfig.recordStatus,"当前人数:"+this.rosterLen); | 280 | loger.warn('开启录制', "isHost", GlobalConfig.isHost, "recordStatus", GlobalConfig.recordStatus,"当前人数:"+this.rosterLen); |
| @@ -282,8 +282,12 @@ class ConferApe extends Ape { | @@ -282,8 +282,12 @@ class ConferApe extends Ape { | ||
| 282 | this.sendConferRecordMsg({"recordStatus": true}); | 282 | this.sendConferRecordMsg({"recordStatus": true}); |
| 283 | this._emit(MessageTypes.CLASS_STATUS_INFO_CHANGE); | 283 | this._emit(MessageTypes.CLASS_STATUS_INFO_CHANGE); |
| 284 | this._emit(MessageTypes.CLASS_RECORD_START); //课堂开始录制 | 284 | this._emit(MessageTypes.CLASS_RECORD_START); //课堂开始录制 |
| 285 | - } | ||
| 286 | - | 285 | + }*/ |
| 286 | + loger.warn('开启录制', "isHost", GlobalConfig.isHost, "recordStatus", GlobalConfig.recordStatus,"当前人数:"+this.rosterLen); | ||
| 287 | + GlobalConfig.classStopTime = EngineUtils.creatTimestampStr(); | ||
| 288 | + this.sendConferRecordMsg({"recordStatus": true}); | ||
| 289 | + this._emit(MessageTypes.CLASS_STATUS_INFO_CHANGE); | ||
| 290 | + this._emit(MessageTypes.CLASS_RECORD_START); //课堂开始录制 | ||
| 287 | } | 291 | } |
| 288 | } | 292 | } |
| 289 | 293 | ||
| @@ -434,7 +438,8 @@ class ConferApe extends Ape { | @@ -434,7 +438,8 @@ class ConferApe extends Ape { | ||
| 434 | this._emit(MessageTypes.CLASS_STATUS_INFO_CHANGE, _param); | 438 | this._emit(MessageTypes.CLASS_STATUS_INFO_CHANGE, _param); |
| 435 | //this.sendUpdaterClassStatusInfo({"actionType": 2, isStopAllPublishMedia: true}); | 439 | //this.sendUpdaterClassStatusInfo({"actionType": 2, isStopAllPublishMedia: true}); |
| 436 | this.sendUpdaterClassStatusInfo({"actionType": ApeConsts.CLASS_STATUS_PAUSE, isStopAllPublishMedia: false}); | 440 | this.sendUpdaterClassStatusInfo({"actionType": ApeConsts.CLASS_STATUS_PAUSE, isStopAllPublishMedia: false}); |
| 437 | - this.stopTimerCounter(); | 441 | + |
| 442 | + //this.stopTimerCounter();//新版的录制规则,尝试暂停不停止计时器 | ||
| 438 | } | 443 | } |
| 439 | 444 | ||
| 440 | //关闭课堂 | 445 | //关闭课堂 |
| @@ -605,6 +610,7 @@ class ConferApe extends Ape { | @@ -605,6 +610,7 @@ class ConferApe extends Ape { | ||
| 605 | } | 610 | } |
| 606 | loger.log('课堂模块初始完成->当前课堂状态:'+ GlobalConfig.classStatus,"recordStatus:"+GlobalConfig.recordStatus); | 611 | loger.log('课堂模块初始完成->当前课堂状态:'+ GlobalConfig.classStatus,"recordStatus:"+GlobalConfig.recordStatus); |
| 607 | this.timerCounter.addTimerCallBack(this.timerCounterUptate.bind(this), 1); | 612 | this.timerCounter.addTimerCallBack(this.timerCounterUptate.bind(this), 1); |
| 613 | + | ||
| 608 | //2秒后执行开始上课和开始录制的判断逻辑 | 614 | //2秒后执行开始上课和开始录制的判断逻辑 |
| 609 | clearTimeout(this.startClassTimer); | 615 | clearTimeout(this.startClassTimer); |
| 610 | this.startClassTimer=setTimeout(()=>{ | 616 | this.startClassTimer=setTimeout(()=>{ |
| @@ -658,9 +664,36 @@ class ConferApe extends Ape { | @@ -658,9 +664,36 @@ class ConferApe extends Ape { | ||
| 658 | this.stopTimerCounter(); | 664 | this.stopTimerCounter(); |
| 659 | return; | 665 | return; |
| 660 | } | 666 | } |
| 661 | - //课堂开始的状态下,课堂进行时间和录制时间都需要更加,录制时间会大于或等于课堂开始的累积时间 | 667 | + //更新课堂进行时间 |
| 662 | if (GlobalConfig.classStatus == ApeConsts.CLASS_STATUS_STARTED) { | 668 | if (GlobalConfig.classStatus == ApeConsts.CLASS_STATUS_STARTED) { |
| 663 | GlobalConfig.classTimestamp = GlobalConfig.classTimestamp + 1; //计时 | 669 | GlobalConfig.classTimestamp = GlobalConfig.classTimestamp + 1; //计时 |
| 670 | + //向应用层更新当前课堂进行的时间长度 (秒) | ||
| 671 | + this._emit(MessageTypes.CLASS_UPDATE_TIMER, {"classTimestamp": GlobalConfig.classTimestamp}); | ||
| 672 | + //以一定的时间间隔同步课堂内所有人的累积上课时间 | ||
| 673 | + if (GlobalConfig.classTimestamp % GlobalConfig.updateClassInfoDelay == 0) { | ||
| 674 | + //如果是host身份,需要同步时间给其他人,同时把当前的状态上传到服务器 | ||
| 675 | + if (GlobalConfig.isHost||this.rosterLen<=1) { | ||
| 676 | + //保存数据到Sass | ||
| 677 | + this._emit(MessageTypes.CLASS_STATUS_INFO_CHANGE); | ||
| 678 | + //同步消息给其他人 | ||
| 679 | + this.sendUpdaterClassStatusInfo({"actionType": ApeConsts.CLASS_STATUS_STARTED, isStopAllPublishMedia: false}); | ||
| 680 | + } | ||
| 681 | + } | ||
| 682 | + | ||
| 683 | + //进行MS动态选点,选择最快的MS服务器地址(录制回放不做处理) | ||
| 684 | + if (!GlobalConfig.isRecordPlayBack && GlobalConfig.classTimestamp % GlobalConfig.msDynamicChooseIpDelay == 0) { | ||
| 685 | + //MS推流选点 | ||
| 686 | + this._emit(MessageTypes.SWITCH_MS_IP); | ||
| 687 | + //MS拉流选点 | ||
| 688 | + this._emit(MessageTypes.SWITCH_RTMP_PULL_IP); | ||
| 689 | + //HLS拉流选点 | ||
| 690 | + this._emit(MessageTypes.SWITCH_HLS_IP); | ||
| 691 | + } | ||
| 692 | + } | ||
| 693 | + //更新录制进行时间 | ||
| 694 | + | ||
| 695 | + /* if (GlobalConfig.classStatus == ApeConsts.CLASS_STATUS_STARTED) { | ||
| 696 | + GlobalConfig.classTimestamp = GlobalConfig.classTimestamp + 1; //计时 | ||
| 664 | //老师身份的时候要记录录制的时间 | 697 | //老师身份的时候要记录录制的时间 |
| 665 | if (GlobalConfig.isHost||this.rosterLen<=1) { | 698 | if (GlobalConfig.isHost||this.rosterLen<=1) { |
| 666 | GlobalConfig.recordTimestamp = GlobalConfig.recordTimestamp + 1; | 699 | GlobalConfig.recordTimestamp = GlobalConfig.recordTimestamp + 1; |
| @@ -700,7 +733,7 @@ class ConferApe extends Ape { | @@ -700,7 +733,7 @@ class ConferApe extends Ape { | ||
| 700 | this.sendUpdaterClassStatusInfo({"actionType": ApeConsts.CLASS_STATUS_STARTED, isStopAllPublishMedia: false}); | 733 | this.sendUpdaterClassStatusInfo({"actionType": ApeConsts.CLASS_STATUS_STARTED, isStopAllPublishMedia: false}); |
| 701 | } | 734 | } |
| 702 | } | 735 | } |
| 703 | - } | 736 | + }*/ |
| 704 | 737 | ||
| 705 | /* //如果还没开始或已经暂停、关闭,不做计时处理 | 738 | /* //如果还没开始或已经暂停、关闭,不做计时处理 |
| 706 | if (GlobalConfig.classStatus != ApeConsts.CLASS_STATUS_STARTED) { | 739 | if (GlobalConfig.classStatus != ApeConsts.CLASS_STATUS_STARTED) { |
| @@ -939,11 +972,11 @@ class ConferApe extends Ape { | @@ -939,11 +972,11 @@ class ConferApe extends Ape { | ||
| 939 | // 1.当前课堂只有自己;2.自己的身份不是host;3当前的课堂状态为(CLASS_STATUS_STARTED= 1;//直播中) | 972 | // 1.当前课堂只有自己;2.自己的身份不是host;3当前的课堂状态为(CLASS_STATUS_STARTED= 1;//直播中) |
| 940 | this.rosterLen = Object.keys(this.rosters).length; | 973 | this.rosterLen = Object.keys(this.rosters).length; |
| 941 | GlobalConfig.rosterNumber = this.rosterLen;//记录当前的总人数 | 974 | GlobalConfig.rosterNumber = this.rosterLen;//记录当前的总人数 |
| 942 | - if (this.rosterLen <=1 && !GlobalConfig.isHost && GlobalConfig.classStatus == ApeConsts.CLASS_STATUS_STARTED) { | 975 | + /* if (this.rosterLen <=1 && !GlobalConfig.isHost && GlobalConfig.classStatus == ApeConsts.CLASS_STATUS_STARTED) { |
| 943 | loger.warn("当前课堂没有老师->暂停课堂"); | 976 | loger.warn("当前课堂没有老师->暂停课堂"); |
| 944 | this.pauseClass({isForce: true}); | 977 | this.pauseClass({isForce: true}); |
| 945 | //this.stopRecord(true); | 978 | //this.stopRecord(true); |
| 946 | - } | 979 | + }*/ |
| 947 | //处理用户信息 | 980 | //处理用户信息 |
| 948 | this.unPackRosterInfo(nodeId, nodeData); | 981 | this.unPackRosterInfo(nodeId, nodeData); |
| 949 | return; | 982 | return; |
| @@ -963,7 +996,7 @@ class ConferApe extends Ape { | @@ -963,7 +996,7 @@ class ConferApe extends Ape { | ||
| 963 | deviceType: nodeData.deviceType | 996 | deviceType: nodeData.deviceType |
| 964 | } | 997 | } |
| 965 | if (nodeData.role == ApeConsts.NR_HOST && GlobalConfig.isHost) { | 998 | if (nodeData.role == ApeConsts.NR_HOST && GlobalConfig.isHost) { |
| 966 | - loger.warn("相同身份的人进入->自己被踢出->进入的人员信息", nodeData); | 999 | + loger.warn("相同身份的人进入->自己被踢出->进入的人员信息","userName:"+ nodeData.name,"userId:"+ nodeData.userId,"userRole:"+ nodeData.userRole,"nodeId:"+ nodeData.nodeId,"deviceType:"+ nodeData.deviceType); |
| 967 | this.kickOutRoster(newUserInfo); | 1000 | this.kickOutRoster(newUserInfo); |
| 968 | return; | 1001 | return; |
| 969 | } else if (nodeData.userId == GlobalConfig.userId && GlobalConfig.userId != "0") { | 1002 | } else if (nodeData.userId == GlobalConfig.userId && GlobalConfig.userId != "0") { |
| @@ -599,7 +599,7 @@ class VideoApe extends Ape { | @@ -599,7 +599,7 @@ class VideoApe extends Ape { | ||
| 599 | 599 | ||
| 600 | //更新媒体文件模块的录制信息,每次开启录制的时候需要把当前媒体文件的信息更新一次 | 600 | //更新媒体文件模块的录制信息,每次开启录制的时候需要把当前媒体文件的信息更新一次 |
| 601 | updaterRecordApeStatus(_param) { | 601 | updaterRecordApeStatus(_param) { |
| 602 | - console.warn("录制状态发送改变->更新当前的状态->", this.mediaModule.mediaChannels); | 602 | + loger.warn("录制状态发送改变->更新当前的状态->", this.mediaModule.mediaChannels); |
| 603 | for (let i in this.mediaModule.mediaChannels) { | 603 | for (let i in this.mediaModule.mediaChannels) { |
| 604 | let channelInfo = this.mediaModule.mediaChannels[i]; | 604 | let channelInfo = this.mediaModule.mediaChannels[i]; |
| 605 | if (channelInfo) { | 605 | if (channelInfo) { |
| @@ -608,6 +608,10 @@ class VideoApe extends Ape { | @@ -608,6 +608,10 @@ class VideoApe extends Ape { | ||
| 608 | } else { | 608 | } else { |
| 609 | channelInfo.owner = channelInfo.fromNodeId; | 609 | channelInfo.owner = channelInfo.fromNodeId; |
| 610 | } | 610 | } |
| 611 | + //owner为0就是没有使用 | ||
| 612 | + if(channelInfo.owner==0){ | ||
| 613 | + channelInfo.status == ApeConsts.CHANNEL_STATUS_RELEASED | ||
| 614 | + } | ||
| 611 | this.sendTableUpdateHandler(channelInfo); | 615 | this.sendTableUpdateHandler(channelInfo); |
| 612 | } | 616 | } |
| 613 | } | 617 | } |
-
请 注册 或 登录 后发表评论