正在显示
3 个修改的文件
包含
49 行增加
和
61 行删除
| @@ -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.0.20171030"; | 66 | + GlobalConfig.sdkVersion = "v2.25.6.20171031"; |
| 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 | //设置 |
| @@ -101,6 +101,7 @@ export default class MessageEntrance extends Emiter { | @@ -101,6 +101,7 @@ export default class MessageEntrance extends Emiter { | ||
| 101 | _webRtc.on('*', (type, data) => this._emit(type, data)); | 101 | _webRtc.on('*', (type, data) => this._emit(type, data)); |
| 102 | _webRtc.on(MessageTypes.USER_DEVICE_STATUS_CHAANGE, this.userDeviecStatusChange.bind(this)); //监听摄像头和麦克风的开启状态 | 102 | _webRtc.on(MessageTypes.USER_DEVICE_STATUS_CHAANGE, this.userDeviecStatusChange.bind(this)); //监听摄像头和麦克风的开启状态 |
| 103 | _webRtc.on(MessageTypes.MEDIA_PUBLISH_STATUS_CHANGE, this.mediaPublishStatusChange.bind(this)); //webRtc推流状态发生改变 | 103 | _webRtc.on(MessageTypes.MEDIA_PUBLISH_STATUS_CHANGE, this.mediaPublishStatusChange.bind(this)); //webRtc推流状态发生改变 |
| 104 | + _webRtc.on(WebRtcApe.RE_JOIN_CHANNEL, this._webRtcRejoinChannel.bind(this)); //重先加入音视频频道 | ||
| 104 | 105 | ||
| 105 | // Sass平台层 | 106 | // Sass平台层 |
| 106 | _sass = Sass; | 107 | _sass = Sass; |
| @@ -1070,7 +1071,7 @@ export default class MessageEntrance extends Emiter { | @@ -1070,7 +1071,7 @@ export default class MessageEntrance extends Emiter { | ||
| 1070 | clearTimeout(this.saveClassStatusTimer); | 1071 | clearTimeout(this.saveClassStatusTimer); |
| 1071 | this.saveClassStatusTimer = setTimeout(()=> { | 1072 | this.saveClassStatusTimer = setTimeout(()=> { |
| 1072 | _sass.saveClassStatusInfo({"classStatusInfo": GlobalConfig.classStatusInfo}); //保存课堂状态信息 | 1073 | _sass.saveClassStatusInfo({"classStatusInfo": GlobalConfig.classStatusInfo}); //保存课堂状态信息 |
| 1073 | - }, 1000); | 1074 | + }, 1600); |
| 1074 | } else { | 1075 | } else { |
| 1075 | loger.log("没有保存课堂状态信息的权限->当前身份->" + GlobalConfig.userRole); | 1076 | loger.log("没有保存课堂状态信息的权限->当前身份->" + GlobalConfig.userRole); |
| 1076 | } | 1077 | } |
| @@ -1922,6 +1923,7 @@ export default class MessageEntrance extends Emiter { | @@ -1922,6 +1923,7 @@ export default class MessageEntrance extends Emiter { | ||
| 1922 | dataObj.recordStatus = false; | 1923 | dataObj.recordStatus = false; |
| 1923 | GlobalConfig.setClassStatusInfo(dataObj); | 1924 | GlobalConfig.setClassStatusInfo(dataObj); |
| 1924 | this.lastClassActiveTime=dataObj.lastClassActiveTime||0; | 1925 | this.lastClassActiveTime=dataObj.lastClassActiveTime||0; |
| 1926 | + loger.log(dataObj); | ||
| 1925 | } catch (err) { | 1927 | } catch (err) { |
| 1926 | loger.warn("getClassRecordInfo获取的课堂数据JSON转换失败->"); | 1928 | loger.warn("getClassRecordInfo获取的课堂数据JSON转换失败->"); |
| 1927 | } | 1929 | } |
| @@ -2089,6 +2091,13 @@ export default class MessageEntrance extends Emiter { | @@ -2089,6 +2091,13 @@ export default class MessageEntrance extends Emiter { | ||
| 2089 | } | 2091 | } |
| 2090 | } | 2092 | } |
| 2091 | 2093 | ||
| 2094 | + /* | ||
| 2095 | + * 监听webRtc | ||
| 2096 | + * */ | ||
| 2097 | + _webRtcRejoinChannel(_data){ | ||
| 2098 | + this._reJoinChannel(_data) | ||
| 2099 | + } | ||
| 2100 | + | ||
| 2092 | //监听摄像头麦克风状态 | 2101 | //监听摄像头麦克风状态 |
| 2093 | userDeviecStatusChange(_data) { | 2102 | userDeviecStatusChange(_data) { |
| 2094 | /* nodeId:GlobalConfig.nodeId, | 2103 | /* nodeId:GlobalConfig.nodeId, |
| @@ -2508,12 +2517,13 @@ export default class MessageEntrance extends Emiter { | @@ -2508,12 +2517,13 @@ export default class MessageEntrance extends Emiter { | ||
| 2508 | 2517 | ||
| 2509 | //文档加入频道成功,同步到MCU服务器上的数据 | 2518 | //文档加入频道成功,同步到MCU服务器上的数据 |
| 2510 | docJoinChannelSuccess() { | 2519 | docJoinChannelSuccess() { |
| 2511 | - let distance=new Date().getTime()-parseInt(this.lastClassActiveTime); | ||
| 2512 | - loger.log("最后一次记录的时间->"+this.lastClassActiveTime,"当前时间:"+new Date().getTime(),"间隔:"+distance/1000); | 2520 | + let interval=new Date().getTime()-parseInt(this.lastClassActiveTime); |
| 2521 | + loger.log("最后一次记录的时间->"+this.lastClassActiveTime,"当前时间:"+new Date().getTime(),"间隔:"+interval/1000); | ||
| 2513 | loger.log("文档加入频道成功->isHost=", GlobalConfig.isHost, "当前总人数:", GlobalConfig.rosterNumber, "sassDoclength=", GlobalConfig.docListPrepare.length); | 2522 | loger.log("文档加入频道成功->isHost=", GlobalConfig.isHost, "当前总人数:", GlobalConfig.rosterNumber, "sassDoclength=", GlobalConfig.docListPrepare.length); |
| 2514 | 2523 | ||
| 2515 | - //如果当前课堂内只有自己或者离开上次课堂的时间大于15分钟,需要停止服务端的视频录制 | ||
| 2516 | - if(GlobalConfig.rosterNumber<=1||distance>=(15*60)){ | 2524 | + //如果当前课堂内只有自己或者离开上次课堂的时间大于8分钟,需要停止服务端的视频录制 |
| 2525 | + if(GlobalConfig.rosterNumber<=1&&interval>=(8*60)){ | ||
| 2526 | + loger.log("调用服务端音视频停止录制->interval:"+interval); | ||
| 2517 | this._mediaRecordControl({"status": WebRtcApe.RECORD_STATUS_2}); | 2527 | this._mediaRecordControl({"status": WebRtcApe.RECORD_STATUS_2}); |
| 2518 | } | 2528 | } |
| 2519 | 2529 | ||
| @@ -3010,19 +3020,25 @@ export default class MessageEntrance extends Emiter { | @@ -3010,19 +3020,25 @@ export default class MessageEntrance extends Emiter { | ||
| 3010 | * 重新加入频道 | 3020 | * 重新加入频道 |
| 3011 | * */ | 3021 | * */ |
| 3012 | _reJoinChannel(_params) { | 3022 | _reJoinChannel(_params) { |
| 3023 | + //{publish:false} | ||
| 3013 | if (GlobalConfig.appId && !GlobalConfig.openFlash) { | 3024 | if (GlobalConfig.appId && !GlobalConfig.openFlash) { |
| 3014 | - //获取当前用户的推流状态,重新加入频道之后如果之前正在推流,重连后需要自动重推 | 3025 | + |
| 3026 | + //1.获取当前用户的推流状态,重新加入频道之后如果之前正在推流,重连后需要自动重推 | ||
| 3015 | let isPublish=false; | 3027 | let isPublish=false; |
| 3016 | if(_webRtc){ | 3028 | if(_webRtc){ |
| 3017 | isPublish=_webRtc.isPublish||false; | 3029 | isPublish=_webRtc.isPublish||false; |
| 3018 | } | 3030 | } |
| 3031 | + //2.检测是否调用接口的时候传入了开启推流的参数 | ||
| 3032 | + if(_params&&_params.publish==true){ | ||
| 3033 | + isPublish=true; | ||
| 3034 | + } | ||
| 3019 | loger.log("离开视频通话频道时的推流状态->"+isPublish); | 3035 | loger.log("离开视频通话频道时的推流状态->"+isPublish); |
| 3020 | //先离开频道 | 3036 | //先离开频道 |
| 3021 | this._leaveChannel(); | 3037 | this._leaveChannel(); |
| 3022 | //主讲人和老师可以设置旁录 | 3038 | //主讲人和老师可以设置旁录 |
| 3023 | 3039 | ||
| 3024 | //加入之前先设置旁录地址,只有直播支持旁路(1路流) | 3040 | //加入之前先设置旁录地址,只有直播支持旁路(1路流) |
| 3025 | - if (_webRtc && GlobalConfig.isTeachOrAssistant && GlobalConfig.maxMediaChannels == 1) { | 3041 | + if (_webRtc && GlobalConfig.isTeachOrAssistant) { |
| 3026 | let curTimestamp = new Date().getTime(); | 3042 | let curTimestamp = new Date().getTime(); |
| 3027 | let streamId = GlobalConfig.siteId + "_" + GlobalConfig.classId + "_" + GlobalConfig.userId + "_" + curTimestamp; | 3043 | let streamId = GlobalConfig.siteId + "_" + GlobalConfig.classId + "_" + GlobalConfig.userId + "_" + curTimestamp; |
| 3028 | //传入固定的流Id | 3044 | //传入固定的流Id |
| @@ -3045,7 +3061,7 @@ export default class MessageEntrance extends Emiter { | @@ -3045,7 +3061,7 @@ export default class MessageEntrance extends Emiter { | ||
| 3045 | info: "" + GlobalConfig.userRole, | 3061 | info: "" + GlobalConfig.userRole, |
| 3046 | immediatePublish:isPublish | 3062 | immediatePublish:isPublish |
| 3047 | }); | 3063 | }); |
| 3048 | - }, 1600); | 3064 | + }, 1000); |
| 3049 | } | 3065 | } |
| 3050 | } | 3066 | } |
| 3051 | 3067 |
| @@ -46,7 +46,7 @@ class LogManager { | @@ -46,7 +46,7 @@ class LogManager { | ||
| 46 | clearTimeout(this.logDelayTimer); | 46 | clearTimeout(this.logDelayTimer); |
| 47 | this.logDelayTimer = setTimeout(function () { | 47 | this.logDelayTimer = setTimeout(function () { |
| 48 | _this.checkAndSendLog(); | 48 | _this.checkAndSendLog(); |
| 49 | - }, 1600); | 49 | + }, 2000); |
| 50 | } | 50 | } |
| 51 | } | 51 | } |
| 52 | 52 | ||
| @@ -69,50 +69,6 @@ class LogManager { | @@ -69,50 +69,6 @@ class LogManager { | ||
| 69 | let msgData = ""; | 69 | let msgData = ""; |
| 70 | let tempArr = []; | 70 | let tempArr = []; |
| 71 | let msgLen = 0; | 71 | let msgLen = 0; |
| 72 | - | ||
| 73 | - /* switch (msgType) { | ||
| 74 | - case LogManager.ERROR: | ||
| 75 | - msgLen = this.errorList.length; | ||
| 76 | - for (let i = 0; i < msgLen; i++) { | ||
| 77 | - let item = this.errorList.shift(); | ||
| 78 | - if (item) { | ||
| 79 | - tempArr.push(item); | ||
| 80 | - msgData += item + " \n "; | ||
| 81 | - } | ||
| 82 | - } | ||
| 83 | - break; | ||
| 84 | - case LogManager.WARN: | ||
| 85 | - msgLen = this.warnList.length; | ||
| 86 | - for (let i = 0; i < msgLen; i++) { | ||
| 87 | - let item = this.warnList.shift(); | ||
| 88 | - if (item) { | ||
| 89 | - tempArr.push(item); | ||
| 90 | - msgData += item + " \n "; | ||
| 91 | - } | ||
| 92 | - } | ||
| 93 | - break; | ||
| 94 | - case LogManager.LOG: | ||
| 95 | - msgLen = this.logList.length; | ||
| 96 | - for (let i = 0; i < msgLen; i++) { | ||
| 97 | - let item = this.logList.shift(); | ||
| 98 | - if (item) { | ||
| 99 | - tempArr.push(item); | ||
| 100 | - msgData += item + " \n "; | ||
| 101 | - } | ||
| 102 | - } | ||
| 103 | - break; | ||
| 104 | - default: | ||
| 105 | - msgLen = this.allLogList.length; | ||
| 106 | - for (let i = 0; i < msgLen; i++) { | ||
| 107 | - let item = this.allLogList.shift(); | ||
| 108 | - if (item) { | ||
| 109 | - tempArr.push(item); | ||
| 110 | - msgData += item + " \n "; | ||
| 111 | - } | ||
| 112 | - } | ||
| 113 | - break; | ||
| 114 | - } | ||
| 115 | - */ | ||
| 116 | msgLen = this.allLogList.length; | 72 | msgLen = this.allLogList.length; |
| 117 | for (let i = 0; i < msgLen; i++) { | 73 | for (let i = 0; i < msgLen; i++) { |
| 118 | let item = this.allLogList.shift(); | 74 | let item = this.allLogList.shift(); |
| @@ -165,12 +121,6 @@ class LogManager { | @@ -165,12 +121,6 @@ class LogManager { | ||
| 165 | 121 | ||
| 166 | //计算当前服务器时间 | 122 | //计算当前服务器时间 |
| 167 | static getCurrentDateTime() { | 123 | static getCurrentDateTime() { |
| 168 | - /* let currentServerTime = new Date().getTime() - this.serverAndLoacTimeDistanc * 1000;//计算当前服务器时间 | ||
| 169 | - let timeStr = new Date(currentServerTime).toLocaleString(); | ||
| 170 | - if (timeStr) { | ||
| 171 | - timeStr = timeStr.replace(/年|月/g, "-").replace(/日/g, " "); | ||
| 172 | - } | ||
| 173 | - return timeStr;*/ | ||
| 174 | let currentServerTime = new Date().getTime() - this.serverAndLoacTimeDistanc * 1000;//计算当前服务器时间 | 124 | let currentServerTime = new Date().getTime() - this.serverAndLoacTimeDistanc * 1000;//计算当前服务器时间 |
| 175 | let time=new Date(currentServerTime); | 125 | let time=new Date(currentServerTime); |
| 176 | //显示格式20170729 16:42:00 INFO _msg | 126 | //显示格式20170729 16:42:00 INFO _msg |
| @@ -24,6 +24,7 @@ class WebRtcApe extends Emiter { | @@ -24,6 +24,7 @@ class WebRtcApe extends Emiter { | ||
| 24 | this.appCertificate = ""; | 24 | this.appCertificate = ""; |
| 25 | this.appRecordingKey = ""; | 25 | this.appRecordingKey = ""; |
| 26 | 26 | ||
| 27 | + this.setConfigTimestamp=0;//设置旁路地址的时间戳 | ||
| 27 | this.configPublisherUrl = "";//旁路地址; | 28 | this.configPublisherUrl = "";//旁路地址; |
| 28 | this.m3u8Url="";//旁路拉流地址 | 29 | this.m3u8Url="";//旁路拉流地址 |
| 29 | this.rtmpUrl="";//旁路拉流地址 | 30 | this.rtmpUrl="";//旁路拉流地址 |
| @@ -57,6 +58,8 @@ class WebRtcApe extends Emiter { | @@ -57,6 +58,8 @@ class WebRtcApe extends Emiter { | ||
| 57 | this.videoResolution = "240P"; | 58 | this.videoResolution = "240P"; |
| 58 | this.isOpenVideo = true; | 59 | this.isOpenVideo = true; |
| 59 | 60 | ||
| 61 | + this.firstPublishSuccess=false;//记录加入频道成功之后是否推流成功过,离开频道之后需要设置为false | ||
| 62 | + | ||
| 60 | this.isPublish = false;//当前是否正在推流 | 63 | this.isPublish = false;//当前是否正在推流 |
| 61 | this.videoScale=1;//视图的缩放比例,默认为1; | 64 | this.videoScale=1;//视图的缩放比例,默认为1; |
| 62 | 65 | ||
| @@ -143,6 +146,7 @@ class WebRtcApe extends Emiter { | @@ -143,6 +146,7 @@ class WebRtcApe extends Emiter { | ||
| 143 | this.client.on('stream-published', (evt)=> { | 146 | this.client.on('stream-published', (evt)=> { |
| 144 | loger.log("webRtc->推流成功->", new Date().getTime()); | 147 | loger.log("webRtc->推流成功->", new Date().getTime()); |
| 145 | this.isPublish = true; | 148 | this.isPublish = true; |
| 149 | + this.firstPublishSuccess=true; | ||
| 146 | GlobalConfig.openCamera = EngineUtils.creatTimestamp(); | 150 | GlobalConfig.openCamera = EngineUtils.creatTimestamp(); |
| 147 | GlobalConfig.openMicrophones = GlobalConfig.openCamera; | 151 | GlobalConfig.openMicrophones = GlobalConfig.openCamera; |
| 148 | this._emit(MessageTypes.USER_DEVICE_STATUS_CHAANGE, { | 152 | this._emit(MessageTypes.USER_DEVICE_STATUS_CHAANGE, { |
| @@ -389,7 +393,7 @@ class WebRtcApe extends Emiter { | @@ -389,7 +393,7 @@ class WebRtcApe extends Emiter { | ||
| 389 | clearTimeout(this.rePublishDelay); | 393 | clearTimeout(this.rePublishDelay); |
| 390 | this.rePublishDelay=setTimeout(()=>{ | 394 | this.rePublishDelay=setTimeout(()=>{ |
| 391 | this.publish(); | 395 | this.publish(); |
| 392 | - },600); | 396 | + },200); |
| 393 | } | 397 | } |
| 394 | }, (err)=> { | 398 | }, (err)=> { |
| 395 | loger.error("加入视频通话频道->失败->", err); | 399 | loger.error("加入视频通话频道->失败->", err); |
| @@ -439,6 +443,7 @@ class WebRtcApe extends Emiter { | @@ -439,6 +443,7 @@ class WebRtcApe extends Emiter { | ||
| 439 | if (!this.client) { | 443 | if (!this.client) { |
| 440 | return; | 444 | return; |
| 441 | } | 445 | } |
| 446 | + this.firstPublishSuccess=false; | ||
| 442 | this.unpublish(); | 447 | this.unpublish(); |
| 443 | this.client.leave(() => { | 448 | this.client.leave(() => { |
| 444 | loger.log("离开视频通话频道->成功"); | 449 | loger.log("离开视频通话频道->成功"); |
| @@ -465,6 +470,8 @@ class WebRtcApe extends Emiter { | @@ -465,6 +470,8 @@ class WebRtcApe extends Emiter { | ||
| 465 | * 设置旁录地址 | 470 | * 设置旁录地址 |
| 466 | * */ | 471 | * */ |
| 467 | setConfigPublisherUrl(_publishUrl){ | 472 | setConfigPublisherUrl(_publishUrl){ |
| 473 | + this.firstPublishSuccess=true; | ||
| 474 | + this.setConfigTimestamp=new Date().getTime()/1000; | ||
| 468 | this.configPublisherUrl=_publishUrl; | 475 | this.configPublisherUrl=_publishUrl; |
| 469 | if(this.client&& this.configPublisherUrl){ | 476 | if(this.client&& this.configPublisherUrl){ |
| 470 | let configObj={width: parseInt(this.pWidth), height: parseInt(this.pHeight), framerate: parseInt(this.pFrameRate), bitrate: parseInt(this.pBitrate), publishUrl:""+this.configPublisherUrl}; | 477 | let configObj={width: parseInt(this.pWidth), height: parseInt(this.pHeight), framerate: parseInt(this.pFrameRate), bitrate: parseInt(this.pBitrate), publishUrl:""+this.configPublisherUrl}; |
| @@ -491,6 +498,19 @@ class WebRtcApe extends Emiter { | @@ -491,6 +498,19 @@ class WebRtcApe extends Emiter { | ||
| 491 | if (!this.client || !this.localStream) { | 498 | if (!this.client || !this.localStream) { |
| 492 | return; | 499 | return; |
| 493 | } | 500 | } |
| 501 | + | ||
| 502 | + //老师-助教-主讲人-->设置旁路大于30秒没有推流,推流服务会停止,需要重设旁录和重加频道; | ||
| 503 | + if(this.setConfigTimestamp>0&&GlobalConfig.isTeachOrAssistant){ | ||
| 504 | + //如果间隔大于28秒并且没有推过流需要重新加入频道,推成功一次之后就不需要 | ||
| 505 | + let interval=parseInt(new Date().getTime()/1000-this.setConfigTimestamp); | ||
| 506 | + loger.log("设置旁路的时间和推流时间的间隔->"+interval+"秒 firstPublishSuccess:"+ this.firstPublishSuccess); | ||
| 507 | + if(interval>=28&&!this.firstPublishSuccess){ | ||
| 508 | + loger.warn("设置旁路大于30秒没有推流,推流服务会停止,需要重设旁录和重加频道"); | ||
| 509 | + this._emit(WebRtcApe.RE_JOIN_CHANNEL,{publish:true}); | ||
| 510 | + return; | ||
| 511 | + } | ||
| 512 | + } | ||
| 513 | + | ||
| 494 | this.localStream.init(()=> { | 514 | this.localStream.init(()=> { |
| 495 | this.clearLocalView(); | 515 | this.clearLocalView(); |
| 496 | let viewName = 'localVideoBox_' + this.uid; | 516 | let viewName = 'localVideoBox_' + this.uid; |
| @@ -877,6 +897,8 @@ class WebRtcApe extends Emiter { | @@ -877,6 +897,8 @@ class WebRtcApe extends Emiter { | ||
| 877 | WebRtcApe.prototype.RECORD_STATUS_0 = WebRtcApe.RECORD_STATUS_0 = 0; //停止推流 | 897 | WebRtcApe.prototype.RECORD_STATUS_0 = WebRtcApe.RECORD_STATUS_0 = 0; //停止推流 |
| 878 | WebRtcApe.prototype.RECORD_STATUS_1 = WebRtcApe.RECORD_STATUS_1 = 1; //开始推流 | 898 | WebRtcApe.prototype.RECORD_STATUS_1 = WebRtcApe.RECORD_STATUS_1 = 1; //开始推流 |
| 879 | WebRtcApe.prototype.RECORD_STATUS_2 = WebRtcApe.RECORD_STATUS_2 = 2; //停止录制 | 899 | WebRtcApe.prototype.RECORD_STATUS_2 = WebRtcApe.RECORD_STATUS_2 = 2; //停止录制 |
| 900 | +WebRtcApe.prototype.RE_JOIN_CHANNEL = WebRtcApe.RE_JOIN_CHANNEL = "reJoninChanel";//重加入频道 | ||
| 901 | + | ||
| 880 | export default new WebRtcApe; | 902 | export default new WebRtcApe; |
| 881 | 903 | ||
| 882 | 904 |
-
请 注册 或 登录 后发表评论