diff --git a/src/EngineEntrance.js b/src/EngineEntrance.js index 6d5dea2..ab6a6ff 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.2.20170916"; + GlobalConfig.sdkVersion = "v2.8.7.20170916"; loger.warn("sdkVersion:" + GlobalConfig.sdkVersion); //设置 @@ -2978,7 +2978,7 @@ export default class MessageEntrance extends Emiter { case WebRtcApe.RECORD_STATUS_0: case WebRtcApe.RECORD_STATUS_1: //推流/停止推流/开启录制 统一使用一个接口 - _webRtc.changePublishStatusAndServerRecord(_params.type); + _webRtc.changePublishStatusAndServerRecord(_params.status); break; case WebRtcApe.RECORD_STATUS_2: //停止录制 diff --git a/src/apes/WebRtcApe.js b/src/apes/WebRtcApe.js index 11c0156..34e5212 100644 --- a/src/apes/WebRtcApe.js +++ b/src/apes/WebRtcApe.js @@ -24,6 +24,9 @@ class WebRtcApe extends Emiter { this.uid = 0; this.info = "" + this.reAddRemoteStreamDelay=0;//重连远程视频的计时器 + this.rePublishDelay=0;//重新推流的间隔 + this.mode = "interop"; this.client = null; this.localStream = null; @@ -113,10 +116,11 @@ class WebRtcApe extends Emiter { this.client.on('stream-added', (evt)=> { let stream = evt.stream; - loger.log("添加一个远程视频流: " + stream.getId(),new Date().getTime()); + /* loger.log("添加一个远程视频流: " + stream.getId(),new Date().getTime()); this.client.subscribe(stream, (err)=> { loger.log("添加一个远程视频流->failed", err); - }); + });*/ + this.reAddRemoteStream(stream); }); this.client.on('stream-subscribed', (evt)=> { @@ -156,7 +160,6 @@ class WebRtcApe extends Emiter { }catch (err){ } } - }); this.client.on('stream-removed', (evt)=> { @@ -179,6 +182,30 @@ class WebRtcApe extends Emiter { loger.log("当前正在讲话的uid:" + uid); }); } + //重新添加远程视频 + reAddRemoteStream(_stream){ + if(!_stream){ + return; + } + let user=GlobalConfig.getUserRoleFromeNodeId(_stream.getId()); + if(user.openCamera<=0){ + loger.log("远程流已经停止,不需要再连接: " + _stream.getId(),new Date().getTime()); + return; + } + loger.log("添加一个远程视频流: " + _stream.getId(),new Date().getTime()); + this.client.subscribe(_stream, (err)=> { + loger.warn("添加一个远程视频流->失败", err); + clearTimeout(this.reAddRemoteStreamDelay); + if(err=="INVALID_REMOTE_STREAM"){ + //流已经无效,不需要再重连 + return; + } + this.reAddRemoteStreamDelay=setTimeout(()=>{ + loger.warn("连接远程的流失败->尝试重新连接"); + this.reAddRemoteStream(_stream); + },1400); + }); + } joinChannel(_params) { this.channelId = _params.channelId||""; @@ -291,6 +318,7 @@ class WebRtcApe extends Emiter { GlobalConfig.openCamera =0; GlobalConfig.openMicrophones =0; this.isPublish=false; + this.clearLocalView(); }); this.client.on('stream-published', (evt)=> { loger.log("webRtc->推流成功->",new Date().getTime()); @@ -305,11 +333,13 @@ class WebRtcApe extends Emiter { 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); }); } @@ -324,9 +354,9 @@ class WebRtcApe extends Emiter { loger.log("webRtc->停止推流->失败" + err); }); this.localStream.close(); - //$(this.localViewId).html(""); - $('#localVideoBox_' + this.uid).remove(); - $("#videoOwnerName_"+this.uid).remove(); + //$('#localVideoBox_' + this.uid).remove(); + //$("#videoOwnerName_"+this.uid).remove(); + this.clearLocalView(); this.isPublish=false; GlobalConfig.openCamera =0; GlobalConfig.openMicrophones =0; @@ -338,8 +368,13 @@ class WebRtcApe extends Emiter { openCamera: GlobalConfig.openCamera, openMicrophones: GlobalConfig.openMicrophones }); + this.changePublishStatusAndServerRecord(WebRtcApe.RECORD_STATUS_0); + } + //清除本地视图 + clearLocalView(){ + $('#localVideoBox_' + this.uid).remove(); + $("#videoOwnerName_"+this.uid).remove(); } - /* * 设置本地回显视图 * */