diff --git a/src/EngineEntrance.js b/src/EngineEntrance.js index cc5a610..2bed652 100644 --- a/src/EngineEntrance.js +++ b/src/EngineEntrance.js @@ -62,7 +62,7 @@ export default class MessageEntrance extends Emiter { constructor() { super(); //sdk 信息 - GlobalConfig.sdkVersion = "v2.8.8.20170917"; + GlobalConfig.sdkVersion = "v2.8.17.20170918"; loger.warn("sdkVersion:" + GlobalConfig.sdkVersion); //设置 @@ -1103,6 +1103,7 @@ export default class MessageEntrance extends Emiter { GlobalConfig.channelId = ""+GlobalConfig.siteId+"_"+GlobalConfig.classId; GlobalConfig.userUid = GlobalConfig.nodeId; GlobalConfig.channelKey=""; + GlobalConfig.rosters={};//情况人员数据列表 //判断是否需要获取加入音视频通话频道的channelKey if(GlobalConfig.appCertificate){ @@ -1985,6 +1986,10 @@ export default class MessageEntrance extends Emiter { } //webRtc推流状态发生改变 mediaPublishStatusChange(_data){ + if (!_mcu.connected) { + loger.warn(GlobalConfig.getCurrentStatus()); + return {"code": ApeConsts.RETURN_FAILED, "data": ""}; + } if (_video_ape) { _video_ape.mediaPublishStatusChange(_data); } @@ -2832,7 +2837,7 @@ export default class MessageEntrance extends Emiter { openCamera: GlobalConfig.openCamera, openMicrophones: GlobalConfig.openMicrophones }); - this._mediaRecordControl({"status":1}); + this._mediaRecordControl({"status":WebRtcApe.RECORD_STATUS_1}); return ; } @@ -2858,11 +2863,12 @@ export default class MessageEntrance extends Emiter { openCamera: GlobalConfig.openCamera, openMicrophones: GlobalConfig.openMicrophones }); - this._mediaRecordControl({"status":0}); + this._mediaRecordControl({"status":WebRtcApe.RECORD_STATUS_0}); return ; } if(_webRtc){ + this._mediaRecordControl({"status":WebRtcApe.RECORD_STATUS_0}); _webRtc.unpublish(_params); } } diff --git a/src/apes/Ape.js b/src/apes/Ape.js index 5b305fc..218c40e 100644 --- a/src/apes/Ape.js +++ b/src/apes/Ape.js @@ -396,6 +396,10 @@ export default class Ape extends Emiter { this._emit(MessageTypes.MCU_ERROR, MessageTypes.ERR_APE_SEND_FAILED_NO_JOIN); return; } + if(!this._classInfo){ + loger.warn("课堂数据还未获取,不能发送消息"); + return; + } let uniformPdu = pdu.create_uniform_pdu( appPdu.type, this._classInfo.nodeId, diff --git a/src/apes/DocApe.js b/src/apes/DocApe.js index d8cd1c3..daf5a08 100644 --- a/src/apes/DocApe.js +++ b/src/apes/DocApe.js @@ -424,8 +424,8 @@ class DocApe extends Ape { //console.log(docDataModelPdu); //console.log(docDataModel); if (docDataModel == null) { - loger.log('文档翻页->文档不存在', paramInfo); - this._emit(MessageTypes.MCU_ERROR, MessageTypes.ERR_APE_INTERFACE_PARAM_WRONG); + loger.warn('文档翻页->文档不存在', paramInfo); + //this._emit(MessageTypes.MCU_ERROR, MessageTypes.ERR_APE_INTERFACE_PARAM_WRONG); return; } //更新数据的字段 diff --git a/src/apes/MediaSharedApe.js b/src/apes/MediaSharedApe.js index 27d2b88..5f6a8d3 100644 --- a/src/apes/MediaSharedApe.js +++ b/src/apes/MediaSharedApe.js @@ -317,8 +317,8 @@ class MediaSharedApe extends Ape { //获取已经存在的数据 let pduDataModel = this.mediaSharedList[paramInfo.itemIdx]; if (pduDataModel == null) { - loger.log('媒体文件SEEK->媒体文件不存在', paramInfo); - this._emit(MessageTypes.MCU_ERROR, MessageTypes.ERR_APE_INTERFACE_PARAM_WRONG); + loger.warn('媒体文件SEEK->媒体文件不存在', paramInfo); + //this._emit(MessageTypes.MCU_ERROR, MessageTypes.ERR_APE_INTERFACE_PARAM_WRONG); return; } //更新数据的字段 diff --git a/src/apes/MusicSharedApe.js b/src/apes/MusicSharedApe.js index 571c2ec..1c9e1be 100644 --- a/src/apes/MusicSharedApe.js +++ b/src/apes/MusicSharedApe.js @@ -320,8 +320,8 @@ class MusicSharedApe extends Ape { //获取已经存在的数据 let pduDataModel = this.musicSharedList[paramInfo.itemIdx]; if (pduDataModel == null) { - loger.log('伴音文件SEEK->伴音文件不存在', paramInfo); - this._emit(MessageTypes.MCU_ERROR, MessageTypes.ERR_APE_INTERFACE_PARAM_WRONG); + loger.warn('伴音文件SEEK->伴音文件不存在', paramInfo); + //this._emit(MessageTypes.MCU_ERROR, MessageTypes.ERR_APE_INTERFACE_PARAM_WRONG); return; } //更新数据的字段 diff --git a/src/apes/VideoApe.js b/src/apes/VideoApe.js index 1e4b55b..eb6bd6e 100644 --- a/src/apes/VideoApe.js +++ b/src/apes/VideoApe.js @@ -370,7 +370,10 @@ class VideoApe extends Ape { loger.warn(GlobalConfig.getCurrentStatus()); return {"code": ApeConsts.RETURN_FAILED, "data": "已经断开连接"}; } - + if (this._classInfo ==null||EngineUtils.isEmptyObject(this._classInfo)){ + //还未加入频道成功,暂时不能发送消息 + return; + } /* if (this._classInfo ===null || EngineUtils.isEmptyObject(this._classInfo)) { loger.log('不能发送Video消息.McuClient还未初始化数据!'); if (GlobalConfig.getCurrentStatus().code == 0 || GlobalConfig.getCurrentStatus().code == 1) { diff --git a/src/apes/WebRtcApe.js b/src/apes/WebRtcApe.js index b30766c..cd8b1f6 100644 --- a/src/apes/WebRtcApe.js +++ b/src/apes/WebRtcApe.js @@ -113,7 +113,21 @@ class WebRtcApe extends Emiter { }); } }); - + this.client.on('stream-published', (evt)=> { + loger.log("webRtc->推流成功->",new Date().getTime()); + this.isPublish=true; + GlobalConfig.openCamera = EngineUtils.creatTimestamp(); + GlobalConfig.openMicrophones = GlobalConfig.openCamera; + this._emit(MessageTypes.USER_DEVICE_STATUS_CHAANGE, { + nodeId: GlobalConfig.nodeId, + userRole: GlobalConfig.userRole, + userName: GlobalConfig.userName, + userId: GlobalConfig.userId, + openCamera: GlobalConfig.openCamera, + openMicrophones: GlobalConfig.openMicrophones + }); + this.changePublishStatusAndServerRecord(WebRtcApe.RECORD_STATUS_1); + }); this.client.on('stream-added', (evt)=> { let stream = evt.stream; /* loger.log("添加一个远程视频流: " + stream.getId(),new Date().getTime()); @@ -122,7 +136,6 @@ class WebRtcApe extends Emiter { });*/ this.reAddRemoteStream(stream); }); - this.client.on('stream-subscribed', (evt)=> { let stream = evt.stream; if(stream){ @@ -181,6 +194,7 @@ class WebRtcApe extends Emiter { let uid = evt.uid; loger.log("当前正在讲话的uid:" + uid); }); + } //重新添加远程视频 reAddRemoteStream(_stream){ @@ -194,7 +208,6 @@ class WebRtcApe extends Emiter { } loger.log("添加一个远程视频流: " + _stream.getId(),new Date().getTime()); this.client.subscribe(_stream, (err)=> { - loger.warn("添加一个远程视频流->失败", err); //clearTimeout(this.reAddRemoteStreamDelay); if(err=="INVALID_REMOTE_STREAM"){ //流已经无效,不需要再重连 @@ -204,11 +217,11 @@ class WebRtcApe extends Emiter { if(err=="PEERCONNECTION_FAILED"){ //this.reAddRemoteStreamDelay=setTimeout(()=>{ setTimeout(()=>{ - loger.warn("连接远程的流失败->尝试重新连接"); + loger.warn("连接远程的流失败->尝试重新连接",err); this.reAddRemoteStream(_stream); },1400); - } - + }else { + loger.warn("添加一个远程视频流->失败", err); } }); } @@ -233,6 +246,7 @@ class WebRtcApe extends Emiter { reGetLoaclStream(){ if(this.isPublish){ loger.log("重新获取摄像头和麦克风并重新推流"); + //this.changePublishStatusAndServerRecord(WebRtcApe.RECORD_STATUS_0); this.unpublish(); this.openLoaclStream(); //切换设备后自动重推流 @@ -325,27 +339,14 @@ class WebRtcApe extends Emiter { this.isPublish=false; this.unpublish(); }); - this.client.on('stream-published', (evt)=> { - loger.log("webRtc->推流成功->",new Date().getTime()); - this.isPublish=true; - GlobalConfig.openCamera = EngineUtils.creatTimestamp(); - GlobalConfig.openMicrophones = GlobalConfig.openCamera; - this._emit(MessageTypes.USER_DEVICE_STATUS_CHAANGE, { - nodeId: GlobalConfig.nodeId, - userRole: GlobalConfig.userRole, - userName: GlobalConfig.userName, - userId: GlobalConfig.userId, - openCamera: GlobalConfig.openCamera, - openMicrophones: GlobalConfig.openMicrophones - }); - this.changePublishStatusAndServerRecord(WebRtcApe.RECORD_STATUS_1); - }); - }, (err)=> { loger.warn("webRtc->推流->本地流开启失败", err); this.isPublish=false; this.clearLocalView(); this._emit(MessageTypes.WEB_RTC_PUBLISH_FAILED,err); + if(err&&err.msg=="STREAM_ALREADY_INITIALIZED"){ + this.unpublish(); + } }); } @@ -371,7 +372,6 @@ class WebRtcApe extends Emiter { openCamera: GlobalConfig.openCamera, openMicrophones: GlobalConfig.openMicrophones }); - this.changePublishStatusAndServerRecord(WebRtcApe.RECORD_STATUS_0); } //清除本地视图 clearLocalView(){ @@ -459,6 +459,7 @@ class WebRtcApe extends Emiter { clearTimeout(this.changeDevicesDelay); this.changeDevicesDelay=setTimeout(()=>{ + this.changePublishStatusAndServerRecord(WebRtcApe.RECORD_STATUS_0); //重新获取本地视图流 this.reGetLoaclStream(); },1400); @@ -508,16 +509,7 @@ class WebRtcApe extends Emiter { //组织数据,发送给服务器,控制录制和开启录制-推流和停止推流 status:0 停止推流 1:开始推流(同时开启录制),2:停止录制(同时停止推流) packMediaInfoData(_status){ let curTimestamp= new Date().getTime(); - let data=`appId=${GlobalConfig.appId} - &channel=${GlobalConfig.channelId} - &channelKey=${GlobalConfig.appCertificate} - &uid=${GlobalConfig.userUid} - &status=${_status} - &userId=${GlobalConfig.userId} - &userName=${GlobalConfig.userName} - &userRole=${GlobalConfig.userRole} - ×tamp=${curTimestamp} - &recordTimestamp=${GlobalConfig.recordTimestamp}`; + let data=`appId=${GlobalConfig.appId}&channel=${GlobalConfig.channelId}&channelKey=${GlobalConfig.appCertificate}&uid=${GlobalConfig.userUid}&status=${_status}&userId=${GlobalConfig.userId}&userName=${GlobalConfig.userName}&userRole=${GlobalConfig.userRole}×tamp=${curTimestamp}&recordTimestamp=${GlobalConfig.recordTimestamp}`; //mcu记录一份数据 this._emit(MessageTypes.MEDIA_PUBLISH_STATUS_CHANGE, { @@ -611,8 +603,8 @@ class WebRtcApe extends Emiter { } } WebRtcApe.prototype.RECORD_STATUS_0 = WebRtcApe.RECORD_STATUS_0 =0; //停止推流 -WebRtcApe.prototype.RECORD_STATUS_1 = WebRtcApe.RECORD_STATUS_1 =0; //开始推流 -WebRtcApe.prototype.RECORD_STATUS_2 = WebRtcApe.RECORD_STATUS_2 =0; //停止录制 +WebRtcApe.prototype.RECORD_STATUS_1 = WebRtcApe.RECORD_STATUS_1 =1; //开始推流 +WebRtcApe.prototype.RECORD_STATUS_2 = WebRtcApe.RECORD_STATUS_2 =2; //停止录制 export default new WebRtcApe;