1.腾讯云录制去掉flv录制 只保留hls
2.处理视频消息更新时的释放检测处理,必须是当前课堂人人数大于0的时候才处理,否则会把正常的视频消息释放掉,因为加入课堂之后有先收到视频消息后收到课堂人员加入的消息;H5不做释放处理; 3.默认的白板增加文件type类型; 4.360chrome浏览器的判断 版本增加到55
正在显示
7 个修改的文件
包含
40 行增加
和
15 行删除
| @@ -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.25.7.20171031"; | 66 | + GlobalConfig.sdkVersion = "v2.26.2.20171102"; |
| 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 | //设置 |
| @@ -413,6 +413,7 @@ export default class MessageEntrance extends Emiter { | @@ -413,6 +413,7 @@ export default class MessageEntrance extends Emiter { | ||
| 413 | errorMessage = {"code": _data.type, "reson": MessageTypes.ErrorReson[_data.type], "data": _data.data}; | 413 | errorMessage = {"code": _data.type, "reson": MessageTypes.ErrorReson[_data.type], "data": _data.data}; |
| 414 | } | 414 | } |
| 415 | break; | 415 | break; |
| 416 | + | ||
| 416 | default : | 417 | default : |
| 417 | errorMessage = {"code": _data, "reson": MessageTypes.ErrorReson[_data], "data": {}}; | 418 | errorMessage = {"code": _data, "reson": MessageTypes.ErrorReson[_data], "data": {}}; |
| 418 | break; | 419 | break; |
| @@ -439,7 +440,14 @@ export default class MessageEntrance extends Emiter { | @@ -439,7 +440,14 @@ export default class MessageEntrance extends Emiter { | ||
| 439 | 440 | ||
| 440 | //执行离开课堂断开连接的流程 | 441 | //执行离开课堂断开连接的流程 |
| 441 | _runClassExit(_type) { | 442 | _runClassExit(_type) { |
| 443 | + if( GlobalConfig.classExit){ | ||
| 444 | + console.log("已经离开课堂"); | ||
| 445 | + return; | ||
| 446 | + } | ||
| 442 | this._leaveClass(_type); | 447 | this._leaveClass(_type); |
| 448 | + //记录是否已经离开课堂,离开之后不做MCU重连 | ||
| 449 | + GlobalConfig.classExit=true; | ||
| 450 | + LogManager.IS_OPEN_SEND_LOG = false;//断开之后不再上报日志 | ||
| 443 | } | 451 | } |
| 444 | 452 | ||
| 445 | //当前的课堂状态信息发生改变,需要保存课堂状态到Sass | 453 | //当前的课堂状态信息发生改变,需要保存课堂状态到Sass |
| @@ -1811,7 +1819,8 @@ export default class MessageEntrance extends Emiter { | @@ -1811,7 +1819,8 @@ export default class MessageEntrance extends Emiter { | ||
| 1811 | url: "http://pclive.xuedianyun.com/DocSharing/data/whiteboard/default/whiteboard.pdf", | 1819 | url: "http://pclive.xuedianyun.com/DocSharing/data/whiteboard/default/whiteboard.pdf", |
| 1812 | dynamicTransferStatic: "0", | 1820 | dynamicTransferStatic: "0", |
| 1813 | relativeUrl: "/DocSharing/data/whiteboard/default/whiteboard.pdf", | 1821 | relativeUrl: "/DocSharing/data/whiteboard/default/whiteboard.pdf", |
| 1814 | - fileType: "pdf" | 1822 | + fileType: "pdf", |
| 1823 | + type:"pdf" | ||
| 1815 | } | 1824 | } |
| 1816 | GlobalConfig.docListPrepare.push(whiteBoradData); | 1825 | GlobalConfig.docListPrepare.push(whiteBoradData); |
| 1817 | 1826 | ||
| @@ -2538,7 +2547,7 @@ export default class MessageEntrance extends Emiter { | @@ -2538,7 +2547,7 @@ export default class MessageEntrance extends Emiter { | ||
| 2538 | let paramInfo = { | 2547 | let paramInfo = { |
| 2539 | "pageNum": value.pdfSize || value.pageNum, | 2548 | "pageNum": value.pdfSize || value.pageNum, |
| 2540 | "fileName": value.name, | 2549 | "fileName": value.name, |
| 2541 | - "fileType": value.type, | 2550 | + "fileType": value.type||value.fileType, |
| 2542 | "relativeUrl": value.relativeLocation || value.relativeUrl, | 2551 | "relativeUrl": value.relativeLocation || value.relativeUrl, |
| 2543 | "url": value.absoluteLocation || value.url, | 2552 | "url": value.absoluteLocation || value.url, |
| 2544 | "creatUserId": value.createUserID || 0, | 2553 | "creatUserId": value.createUserID || 0, |
| @@ -412,6 +412,8 @@ GlobalConfig.msType = 1; //目前固定用这个 | @@ -412,6 +412,8 @@ GlobalConfig.msType = 1; //目前固定用这个 | ||
| 412 | GlobalConfig.messageDelay = false; //是否启用消息延迟 | 412 | GlobalConfig.messageDelay = false; //是否启用消息延迟 |
| 413 | GlobalConfig.mcuDelay = 0; //默认的延迟时间(单位-秒) | 413 | GlobalConfig.mcuDelay = 0; //默认的延迟时间(单位-秒) |
| 414 | 414 | ||
| 415 | +GlobalConfig.classExit=false;//是否关闭课堂,如果关闭之后不再连接MCU | ||
| 416 | + | ||
| 415 | GlobalConfig.docDelay = 1600; //文档模块加入成功之后延迟发送送成功的消息给主模块(sdk内部使用) | 417 | GlobalConfig.docDelay = 1600; //文档模块加入成功之后延迟发送送成功的消息给主模块(sdk内部使用) |
| 416 | GlobalConfig.portal = ""; //Sass IP | 418 | GlobalConfig.portal = ""; //Sass IP |
| 417 | 419 |
| @@ -180,7 +180,7 @@ class SystemConfig { | @@ -180,7 +180,7 @@ class SystemConfig { | ||
| 180 | if (window.clientInformation.languages.length > 2) { | 180 | if (window.clientInformation.languages.length > 2) { |
| 181 | Sys.explorer = "chrome"; | 181 | Sys.explorer = "chrome"; |
| 182 | loger.log("chrome", Sys); | 182 | loger.log("chrome", Sys); |
| 183 | - } else if (window.clientInformation.languages.length == 2&&versionNum<55) { | 183 | + } else if (window.clientInformation.languages.length == 2&&versionNum<=55) { |
| 184 | var _track = 'track' in document.createElement('track'); | 184 | var _track = 'track' in document.createElement('track'); |
| 185 | var webstoreKeysLength = window.chrome && window.chrome.webstore ? Object.keys(window.chrome.webstore).length : 0; | 185 | var webstoreKeysLength = window.chrome && window.chrome.webstore ? Object.keys(window.chrome.webstore).length : 0; |
| 186 | if (_track) { | 186 | if (_track) { |
| @@ -931,7 +931,7 @@ class ConferApe extends Ape { | @@ -931,7 +931,7 @@ class ConferApe extends Ape { | ||
| 931 | rosterInsertHandler(nodeId, nodeData) { | 931 | rosterInsertHandler(nodeId, nodeData) { |
| 932 | //loger.log("人员进入--->"); | 932 | //loger.log("人员进入--->"); |
| 933 | if (GlobalConfig.nodeId == nodeId) { | 933 | if (GlobalConfig.nodeId == nodeId) { |
| 934 | - | 934 | + loger.log("人员进入课堂模块--->自己"); |
| 935 | } else { | 935 | } else { |
| 936 | // loger.log("有人加入 rosterInsertHandler"); | 936 | // loger.log("有人加入 rosterInsertHandler"); |
| 937 | this.rosterUpdateHandler(nodeId, nodeData); | 937 | this.rosterUpdateHandler(nodeId, nodeData); |
| @@ -1038,9 +1038,19 @@ class ConferApe extends Ape { | @@ -1038,9 +1038,19 @@ class ConferApe extends Ape { | ||
| 1038 | updaterRosterStatus(_param) { | 1038 | updaterRosterStatus(_param) { |
| 1039 | //loger.log("媒体模块发生更新,人员状态需要更新,fromNodeId->",_param); | 1039 | //loger.log("媒体模块发生更新,人员状态需要更新,fromNodeId->",_param); |
| 1040 | //如果视频消息中channel的占用人 fromNodeId在人员列表中不存在,需要释放这channel,因为这个有可能是之前没释放成功的 | 1040 | //如果视频消息中channel的占用人 fromNodeId在人员列表中不存在,需要释放这channel,因为这个有可能是之前没释放成功的 |
| 1041 | - if (_param && _param.status == ApeConsts.CHANNEL_STATUS_OPENING && this.rosters[_param.fromNodeId] == null) { | ||
| 1042 | - loger.log("媒体模块被占用->占有人已经不存在课堂中->释放->", _param); | ||
| 1043 | - this._emit(MessageTypes.CLASS_NONENTITY_ROSTER, {"nodeId": _param.fromNodeId}); | 1041 | + if (_param && _param.status == ApeConsts.CHANNEL_STATUS_OPENING) { |
| 1042 | + //如果推流的人员已经不存在,并且当前课堂内人员大于0; | ||
| 1043 | + // 如果不判断当前的人数,会出现把正常的视频消息释放的情况; | ||
| 1044 | + // 因为会出现先收到视频消息后收到人员加入和更新的消息 | ||
| 1045 | + if(this.rosters[_param.fromNodeId] == null&&this.rosterLen>0){ | ||
| 1046 | + //H5不做释放处理 | ||
| 1047 | + if(GlobalConfig.deviceType==3){ | ||
| 1048 | + loger.warn("H5不做媒体模块的频道释放->当前总人数->"+this.rosterLen, _param); | ||
| 1049 | + return ; | ||
| 1050 | + } | ||
| 1051 | + loger.warn("媒体模块被占用->占有人已经不存在课堂中->释放->当前总人数->"+this.rosterLen, _param); | ||
| 1052 | + this._emit(MessageTypes.CLASS_NONENTITY_ROSTER, {"nodeId": _param.fromNodeId}); | ||
| 1053 | + } | ||
| 1044 | } | 1054 | } |
| 1045 | } | 1055 | } |
| 1046 | 1056 |
| @@ -151,7 +151,8 @@ class MediaModule { | @@ -151,7 +151,8 @@ class MediaModule { | ||
| 151 | txTime=txTime.toString(16); | 151 | txTime=txTime.toString(16); |
| 152 | let txSecret= MD5(publishSuffix + streamId+txTime); | 152 | let txSecret= MD5(publishSuffix + streamId+txTime); |
| 153 | //rtmp://11220.livepush.myqcloud.com/live/11220_c5a1ea0bce?bizid=11220&txSecret=b1d8af72bf62366eef31cbb5dc5c8778&txTime=59C5337F | 153 | //rtmp://11220.livepush.myqcloud.com/live/11220_c5a1ea0bce?bizid=11220&txSecret=b1d8af72bf62366eef31cbb5dc5c8778&txTime=59C5337F |
| 154 | - newUrl=url +"?bizid=11220&txSecret="+txSecret+"&txTime="+txTime+"&record=hls|flv&record_interval=5400"; | 154 | + //newUrl=url +"?bizid=11220&txSecret="+txSecret+"&txTime="+txTime+"&record=hls|flv&record_interval=5400"; |
| 155 | + newUrl=url +"?bizid=11220&txSecret="+txSecret+"&txTime="+txTime+"&record=hls&record_interval=5400"; | ||
| 155 | loger.log("生成的推流地址->"+newUrl); | 156 | loger.log("生成的推流地址->"+newUrl); |
| 156 | return newUrl; | 157 | return newUrl; |
| 157 | } | 158 | } |
| @@ -45,6 +45,7 @@ class VideoApe extends Ape { | @@ -45,6 +45,7 @@ class VideoApe extends Ape { | ||
| 45 | //ape加入成功 | 45 | //ape加入成功 |
| 46 | onJoinChannelHandlerSuccess() { | 46 | onJoinChannelHandlerSuccess() { |
| 47 | //这个设置很重要,因为只有Sass流程完成之后,APE才能取得GlobalConfig中的数据 | 47 | //这个设置很重要,因为只有Sass流程完成之后,APE才能取得GlobalConfig中的数据 |
| 48 | + loger.log('视频模块初始完成->'); | ||
| 48 | this.mediaModule.maxMediaChannel = GlobalConfig.maxVideoChannels; | 49 | this.mediaModule.maxMediaChannel = GlobalConfig.maxVideoChannels; |
| 49 | } | 50 | } |
| 50 | 51 | ||
| @@ -524,7 +525,7 @@ class VideoApe extends Ape { | @@ -524,7 +525,7 @@ class VideoApe extends Ape { | ||
| 524 | adapterPdu.type = pdu.RCPDU_REG_ADAPTER; | 525 | adapterPdu.type = pdu.RCPDU_REG_ADAPTER; |
| 525 | adapterPdu.item.push(adapterItemPdu); | 526 | adapterPdu.item.push(adapterItemPdu); |
| 526 | 527 | ||
| 527 | - loger.log("发送更新VIDEO " + tableItemPdu.itemIdx); | 528 | + loger.log("发送消息MCU更新VIDEO模块->channel:" + tableItemPdu.itemIdx); |
| 528 | this.sendUniform(adapterPdu, true); | 529 | this.sendUniform(adapterPdu, true); |
| 529 | } | 530 | } |
| 530 | 531 | ||
| @@ -590,11 +591,10 @@ class VideoApe extends Ape { | @@ -590,11 +591,10 @@ class VideoApe extends Ape { | ||
| 590 | }else { | 591 | }else { |
| 591 | //判断接收者的id,如果不是0,并且也不是自己的nodeId,那么消息不做处理 | 592 | //判断接收者的id,如果不是0,并且也不是自己的nodeId,那么消息不做处理 |
| 592 | if (videoReceivePdu.toNodeId != 0 && videoReceivePdu.toNodeId != GlobalConfig.nodeId) { | 593 | if (videoReceivePdu.toNodeId != 0 && videoReceivePdu.toNodeId != GlobalConfig.nodeId) { |
| 593 | - loger.log('视频消息不处理 toNodeId=', videoReceivePdu.toNodeId, "my nodeId=", GlobalConfig.nodeId); | 594 | + loger.log('视频消息不处理->接收人ID:'+videoReceivePdu.toNodeId, "自己的ID:"+GlobalConfig.nodeId); |
| 594 | } else { | 595 | } else { |
| 595 | loger.log('视频控制消息处理 .', videoReceivePdu); | 596 | loger.log('视频控制消息处理 .', videoReceivePdu); |
| 596 | this._emit(MessageTypes.VIDEO_BROADCAST, videoReceivePdu); | 597 | this._emit(MessageTypes.VIDEO_BROADCAST, videoReceivePdu); |
| 597 | - | ||
| 598 | let data=videoReceivePdu.data; | 598 | let data=videoReceivePdu.data; |
| 599 | if(data){ | 599 | if(data){ |
| 600 | switch (videoReceivePdu.actionType){ | 600 | switch (videoReceivePdu.actionType){ |
| @@ -633,12 +633,11 @@ class VideoApe extends Ape { | @@ -633,12 +633,11 @@ class VideoApe extends Ape { | ||
| 633 | } | 633 | } |
| 634 | tableUpdateHandler(owner, itemIdx, itemData, seek) { | 634 | tableUpdateHandler(owner, itemIdx, itemData, seek) { |
| 635 | let unpackChannelInfo = this.unPackPdu(owner, itemIdx, itemData); | 635 | let unpackChannelInfo = this.unPackPdu(owner, itemIdx, itemData); |
| 636 | - loger.log("视频模块数据更新->channel", itemIdx, 'mediaType', unpackChannelInfo.mediaType, 'status->', unpackChannelInfo.status, "seek->", seek); | ||
| 637 | - | 636 | + loger.log("视频模块数据更新->channel:"+itemIdx+' mediaType:'+unpackChannelInfo.mediaType+' status->'+unpackChannelInfo.status+" seek->", seek); |
| 638 | //****很重要******** | 637 | //****很重要******** |
| 639 | //如果owner的值为0,代表的是这个歌频道已经被释放了(mcu服务端对于占用channel的掉线用户,就是把owner设置为0) | 638 | //如果owner的值为0,代表的是这个歌频道已经被释放了(mcu服务端对于占用channel的掉线用户,就是把owner设置为0) |
| 640 | if (owner == 0) { | 639 | if (owner == 0) { |
| 641 | - loger.log("释放占用的频道,channel", itemIdx); | 640 | + loger.log("MCU返回值owner=0->释放占用的频道,channel:"+itemIdx); |
| 642 | unpackChannelInfo.status = ApeConsts.CHANNEL_STATUS_RELEASED; | 641 | unpackChannelInfo.status = ApeConsts.CHANNEL_STATUS_RELEASED; |
| 643 | unpackChannelInfo.streamId = ""; | 642 | unpackChannelInfo.streamId = ""; |
| 644 | } | 643 | } |
| @@ -202,6 +202,10 @@ class MCU extends Emiter { | @@ -202,6 +202,10 @@ class MCU extends Emiter { | ||
| 202 | 202 | ||
| 203 | // 主动建立MCU连接 | 203 | // 主动建立MCU连接 |
| 204 | joinMCU(_classInfo) { | 204 | joinMCU(_classInfo) { |
| 205 | + if(GlobalConfig.classExit==true){ | ||
| 206 | + loger.warn("已经关闭课堂->不再连接MCU"); | ||
| 207 | + return; | ||
| 208 | + } | ||
| 205 | loger.log('开始建立EverSocket通道.'); | 209 | loger.log('开始建立EverSocket通道.'); |
| 206 | GlobalConfig.classJoinSuccess = false; | 210 | GlobalConfig.classJoinSuccess = false; |
| 207 | loger.log(_classInfo); | 211 | loger.log(_classInfo); |
-
请 注册 或 登录 后发表评论