From 7e2e22b7c7e1855854d4b54b4908a6c18cc481fa Mon Sep 17 00:00:00 2001 From: liyong <liyong@3mang.com> Date: Thu, 2 Nov 2017 12:26:10 +0800 Subject: [PATCH] 1.腾讯云录制去掉flv录制 只保留hls 2.处理视频消息更新时的释放检测处理,必须是当前课堂人人数大于0的时候才处理,否则会把正常的视频消息释放掉,因为加入课堂之后有先收到视频消息后收到课堂人员加入的消息;H5不做释放处理; 3.默认的白板增加文件type类型; 4.360chrome浏览器的判断 版本增加到55 --- src/EngineEntrance.js | 15 ++++++++++++--- src/GlobalConfig.js | 2 ++ src/SystemConfig.js | 2 +- src/apes/ConferApe.js | 18 ++++++++++++++---- src/apes/MediaModule.js | 3 ++- src/apes/VideoApe.js | 11 +++++------ src/mcu.js | 4 ++++ 7 files changed, 40 insertions(+), 15 deletions(-) diff --git a/src/EngineEntrance.js b/src/EngineEntrance.js index 1efa161..c9ace46 100644 --- a/src/EngineEntrance.js +++ b/src/EngineEntrance.js @@ -63,7 +63,7 @@ export default class MessageEntrance extends Emiter { super(); this.lastClassActiveTime=0;//最后一次课堂激活的时间戳 //sdk 信息 - GlobalConfig.sdkVersion = "v2.25.7.20171031"; + GlobalConfig.sdkVersion = "v2.26.2.20171102"; loger.warn("sdkVersion:" + GlobalConfig.sdkVersion); console.log("sdkVersion:" + GlobalConfig.sdkVersion); //设置 @@ -413,6 +413,7 @@ export default class MessageEntrance extends Emiter { errorMessage = {"code": _data.type, "reson": MessageTypes.ErrorReson[_data.type], "data": _data.data}; } break; + default : errorMessage = {"code": _data, "reson": MessageTypes.ErrorReson[_data], "data": {}}; break; @@ -439,7 +440,14 @@ export default class MessageEntrance extends Emiter { //执行离开课堂断开连接的流程 _runClassExit(_type) { + if( GlobalConfig.classExit){ + console.log("已经离开课堂"); + return; + } this._leaveClass(_type); + //记录是否已经离开课堂,离开之后不做MCU重连 + GlobalConfig.classExit=true; + LogManager.IS_OPEN_SEND_LOG = false;//断开之后不再上报日志 } //当前的课堂状态信息发生改变,需要保存课堂状态到Sass @@ -1811,7 +1819,8 @@ export default class MessageEntrance extends Emiter { url: "http://pclive.xuedianyun.com/DocSharing/data/whiteboard/default/whiteboard.pdf", dynamicTransferStatic: "0", relativeUrl: "/DocSharing/data/whiteboard/default/whiteboard.pdf", - fileType: "pdf" + fileType: "pdf", + type:"pdf" } GlobalConfig.docListPrepare.push(whiteBoradData); @@ -2538,7 +2547,7 @@ export default class MessageEntrance extends Emiter { let paramInfo = { "pageNum": value.pdfSize || value.pageNum, "fileName": value.name, - "fileType": value.type, + "fileType": value.type||value.fileType, "relativeUrl": value.relativeLocation || value.relativeUrl, "url": value.absoluteLocation || value.url, "creatUserId": value.createUserID || 0, diff --git a/src/GlobalConfig.js b/src/GlobalConfig.js index 89cf4e5..5e80e1a 100644 --- a/src/GlobalConfig.js +++ b/src/GlobalConfig.js @@ -412,6 +412,8 @@ GlobalConfig.msType = 1; //目前固定用这个 GlobalConfig.messageDelay = false; //是否启用消息延迟 GlobalConfig.mcuDelay = 0; //默认的延迟时间(单位-秒) +GlobalConfig.classExit=false;//是否关闭课堂,如果关闭之后不再连接MCU + GlobalConfig.docDelay = 1600; //文档模块加入成功之后延迟发送送成功的消息给主模块(sdk内部使用) GlobalConfig.portal = ""; //Sass IP diff --git a/src/SystemConfig.js b/src/SystemConfig.js index 23510b6..3b24189 100644 --- a/src/SystemConfig.js +++ b/src/SystemConfig.js @@ -180,7 +180,7 @@ class SystemConfig { if (window.clientInformation.languages.length > 2) { Sys.explorer = "chrome"; loger.log("chrome", Sys); - } else if (window.clientInformation.languages.length == 2&&versionNum<55) { + } else if (window.clientInformation.languages.length == 2&&versionNum<=55) { var _track = 'track' in document.createElement('track'); var webstoreKeysLength = window.chrome && window.chrome.webstore ? Object.keys(window.chrome.webstore).length : 0; if (_track) { diff --git a/src/apes/ConferApe.js b/src/apes/ConferApe.js index bcd9997..14e1ef2 100644 --- a/src/apes/ConferApe.js +++ b/src/apes/ConferApe.js @@ -931,7 +931,7 @@ class ConferApe extends Ape { rosterInsertHandler(nodeId, nodeData) { //loger.log("人员进入--->"); if (GlobalConfig.nodeId == nodeId) { - + loger.log("人员进入课堂模块--->自己"); } else { // loger.log("有人加入 rosterInsertHandler"); this.rosterUpdateHandler(nodeId, nodeData); @@ -1038,9 +1038,19 @@ class ConferApe extends Ape { updaterRosterStatus(_param) { //loger.log("媒体模块发生更新,人员状态需要更新,fromNodeId->",_param); //如果视频消息中channel的占用人 fromNodeId在人员列表中不存在,需要释放这channel,因为这个有可能是之前没释放成功的 - if (_param && _param.status == ApeConsts.CHANNEL_STATUS_OPENING && this.rosters[_param.fromNodeId] == null) { - loger.log("媒体模块被占用->占有人已经不存在课堂中->释放->", _param); - this._emit(MessageTypes.CLASS_NONENTITY_ROSTER, {"nodeId": _param.fromNodeId}); + if (_param && _param.status == ApeConsts.CHANNEL_STATUS_OPENING) { + //如果推流的人员已经不存在,并且当前课堂内人员大于0; + // 如果不判断当前的人数,会出现把正常的视频消息释放的情况; + // 因为会出现先收到视频消息后收到人员加入和更新的消息 + if(this.rosters[_param.fromNodeId] == null&&this.rosterLen>0){ + //H5不做释放处理 + if(GlobalConfig.deviceType==3){ + loger.warn("H5不做媒体模块的频道释放->当前总人数->"+this.rosterLen, _param); + return ; + } + loger.warn("媒体模块被占用->占有人已经不存在课堂中->释放->当前总人数->"+this.rosterLen, _param); + this._emit(MessageTypes.CLASS_NONENTITY_ROSTER, {"nodeId": _param.fromNodeId}); + } } } diff --git a/src/apes/MediaModule.js b/src/apes/MediaModule.js index aa10908..504253b 100644 --- a/src/apes/MediaModule.js +++ b/src/apes/MediaModule.js @@ -151,7 +151,8 @@ class MediaModule { txTime=txTime.toString(16); let txSecret= MD5(publishSuffix + streamId+txTime); //rtmp://11220.livepush.myqcloud.com/live/11220_c5a1ea0bce?bizid=11220&txSecret=b1d8af72bf62366eef31cbb5dc5c8778&txTime=59C5337F - newUrl=url +"?bizid=11220&txSecret="+txSecret+"&txTime="+txTime+"&record=hls|flv&record_interval=5400"; + //newUrl=url +"?bizid=11220&txSecret="+txSecret+"&txTime="+txTime+"&record=hls|flv&record_interval=5400"; + newUrl=url +"?bizid=11220&txSecret="+txSecret+"&txTime="+txTime+"&record=hls&record_interval=5400"; loger.log("生成的推流地址->"+newUrl); return newUrl; } diff --git a/src/apes/VideoApe.js b/src/apes/VideoApe.js index 36bac63..7cee7ed 100644 --- a/src/apes/VideoApe.js +++ b/src/apes/VideoApe.js @@ -45,6 +45,7 @@ class VideoApe extends Ape { //ape加入成功 onJoinChannelHandlerSuccess() { //这个设置很重要,因为只有Sass流程完成之后,APE才能取得GlobalConfig中的数据 + loger.log('视频模块初始完成->'); this.mediaModule.maxMediaChannel = GlobalConfig.maxVideoChannels; } @@ -524,7 +525,7 @@ class VideoApe extends Ape { adapterPdu.type = pdu.RCPDU_REG_ADAPTER; adapterPdu.item.push(adapterItemPdu); - loger.log("发送更新VIDEO " + tableItemPdu.itemIdx); + loger.log("发送消息MCU更新VIDEO模块->channel:" + tableItemPdu.itemIdx); this.sendUniform(adapterPdu, true); } @@ -590,11 +591,10 @@ class VideoApe extends Ape { }else { //判断接收者的id,如果不是0,并且也不是自己的nodeId,那么消息不做处理 if (videoReceivePdu.toNodeId != 0 && videoReceivePdu.toNodeId != GlobalConfig.nodeId) { - loger.log('视频消息不处理 toNodeId=', videoReceivePdu.toNodeId, "my nodeId=", GlobalConfig.nodeId); + loger.log('视频消息不处理->接收人ID:'+videoReceivePdu.toNodeId, "自己的ID:"+GlobalConfig.nodeId); } else { loger.log('视频控制消息处理 .', videoReceivePdu); this._emit(MessageTypes.VIDEO_BROADCAST, videoReceivePdu); - let data=videoReceivePdu.data; if(data){ switch (videoReceivePdu.actionType){ @@ -633,12 +633,11 @@ class VideoApe extends Ape { } tableUpdateHandler(owner, itemIdx, itemData, seek) { let unpackChannelInfo = this.unPackPdu(owner, itemIdx, itemData); - loger.log("视频模块数据更新->channel", itemIdx, 'mediaType', unpackChannelInfo.mediaType, 'status->', unpackChannelInfo.status, "seek->", seek); - + loger.log("视频模块数据更新->channel:"+itemIdx+' mediaType:'+unpackChannelInfo.mediaType+' status->'+unpackChannelInfo.status+" seek->", seek); //****很重要******** //如果owner的值为0,代表的是这个歌频道已经被释放了(mcu服务端对于占用channel的掉线用户,就是把owner设置为0) if (owner == 0) { - loger.log("释放占用的频道,channel", itemIdx); + loger.log("MCU返回值owner=0->释放占用的频道,channel:"+itemIdx); unpackChannelInfo.status = ApeConsts.CHANNEL_STATUS_RELEASED; unpackChannelInfo.streamId = ""; } diff --git a/src/mcu.js b/src/mcu.js index e472801..87f2494 100644 --- a/src/mcu.js +++ b/src/mcu.js @@ -202,6 +202,10 @@ class MCU extends Emiter { // 主动建立MCU连接 joinMCU(_classInfo) { + if(GlobalConfig.classExit==true){ + loger.warn("已经关闭课堂->不再连接MCU"); + return; + } loger.log('开始建立EverSocket通道.'); GlobalConfig.classJoinSuccess = false; loger.log(_classInfo); -- libgit2 0.24.0