李勇

1.增加重新加入视频通道模块的接口;点击外部刷新的时候会重新加入

@@ -62,9 +62,9 @@ export default class MessageEntrance extends Emiter { @@ -62,9 +62,9 @@ export default class MessageEntrance extends Emiter {
62 constructor() { 62 constructor() {
63 super(); 63 super();
64 //sdk 信息 64 //sdk 信息
65 - GlobalConfig.sdkVersion = "v2.20.5.20171023"; 65 + GlobalConfig.sdkVersion = "v2.21.3.20171024";
66 loger.warn("sdkVersion:" + GlobalConfig.sdkVersion); 66 loger.warn("sdkVersion:" + GlobalConfig.sdkVersion);
67 - 67 + console.log("sdkVersion:" + GlobalConfig.sdkVersion);
68 //设置 68 //设置
69 let locationProtocol= location.protocol; 69 let locationProtocol= location.protocol;
70 if(locationProtocol=="https:"){ 70 if(locationProtocol=="https:"){
@@ -92,6 +92,7 @@ export default class MessageEntrance extends Emiter { @@ -92,6 +92,7 @@ export default class MessageEntrance extends Emiter {
92 this.isGetFastestHlsPullCallback = false; //是否HLS拉流地址测试结束 92 this.isGetFastestHlsPullCallback = false; //是否HLS拉流地址测试结束
93 this.isGetFastestRsCallback = false; //是否录制回放HLS拉流地址测试结束 93 this.isGetFastestRsCallback = false; //是否录制回放HLS拉流地址测试结束
94 this.saveClassStatusTimer=0;//保存课堂数据的计时器间隔,防止同一瞬间多次提交 94 this.saveClassStatusTimer=0;//保存课堂数据的计时器间隔,防止同一瞬间多次提交
  95 + this.joinChannelTimer=0;//加入音视频通道的间隔
95 //全局的Error处理 96 //全局的Error处理
96 this.on(MessageTypes.MCU_ERROR, this._mcuErrorHandler.bind(this)); 97 this.on(MessageTypes.MCU_ERROR, this._mcuErrorHandler.bind(this));
97 98
@@ -307,6 +308,8 @@ export default class MessageEntrance extends Emiter { @@ -307,6 +308,8 @@ export default class MessageEntrance extends Emiter {
307 this.setDebugInfo = this._setDebugInfo.bind(this); //设置debug信息 308 this.setDebugInfo = this._setDebugInfo.bind(this); //设置debug信息
308 this.setOpenSendLogToServer = this._setOpenSendLogToServer.bind(this); //设置是否上报日志 309 this.setOpenSendLogToServer = this._setOpenSendLogToServer.bind(this); //设置是否上报日志
309 310
  311 + this.reJoinChannel = this._reJoinChannel.bind(this); //重新加入频道
  312 +
310 this.addLog = this._addLog.bind(this); 313 this.addLog = this._addLog.bind(this);
311 this.addWarn = this._addWarn.bind(this); 314 this.addWarn = this._addWarn.bind(this);
312 this.addError = this._addError.bind(this); 315 this.addError = this._addError.bind(this);
@@ -1677,11 +1680,11 @@ export default class MessageEntrance extends Emiter { @@ -1677,11 +1680,11 @@ export default class MessageEntrance extends Emiter {
1677 } 1680 }
1678 1681
1679 //离开视频通话频道 1682 //离开视频通话频道
1680 - if(GlobalConfig.deviceType==0||GlobalConfig.deviceType==3){ 1683 + /* if(GlobalConfig.deviceType==0||GlobalConfig.deviceType==3){
1681 if(_webRtc){ 1684 if(_webRtc){
1682 - _webRtc.leaveChannel();; 1685 + _webRtc.leaveChannel();
1683 } 1686 }
1684 - } 1687 + }*/
1685 1688
1686 //停止推流 1689 //停止推流
1687 if (_video_ape) { 1690 if (_video_ape) {
@@ -1712,6 +1715,8 @@ export default class MessageEntrance extends Emiter { @@ -1712,6 +1715,8 @@ export default class MessageEntrance extends Emiter {
1712 _mcu.leaveMCU(); 1715 _mcu.leaveMCU();
1713 GlobalConfig.setCurrentStatus(GlobalConfig.statusCode_3); 1716 GlobalConfig.setCurrentStatus(GlobalConfig.statusCode_3);
1714 } 1717 }
  1718 + //离开视频通话模块
  1719 + this._leaveChannel();
1715 } 1720 }
1716 1721
1717 //获取课堂所有参数(20170727新规则) api/meeting/detail.do? flash中的接口文件是 getClassParam.do 1722 //获取课堂所有参数(20170727新规则) api/meeting/detail.do? flash中的接口文件是 getClassParam.do
@@ -2830,7 +2835,36 @@ export default class MessageEntrance extends Emiter { @@ -2830,7 +2835,36 @@ export default class MessageEntrance extends Emiter {
2830 }); 2835 });
2831 } 2836 }
2832 } 2837 }
  2838 + /*
  2839 + * 重新加入频道
  2840 + * */
  2841 + _reJoinChannel(_params){
  2842 + if(GlobalConfig.appId&&!GlobalConfig.openFlash){
  2843 + //先离开频道
  2844 + this._leaveChannel();
  2845 + //主讲人和老师可以设置旁录
2833 2846
  2847 + //加入之前先设置旁录地址,只有直播支持旁路(1路流)
  2848 + if(_webRtc&&GlobalConfig.isTeachOrAssistant&&GlobalConfig.maxMediaChannels==1){
  2849 + let curTimestamp = new Date().getTime();
  2850 + let streamId=GlobalConfig.siteId+"_"+GlobalConfig.classId+"_"+GlobalConfig.userId+"_"+curTimestamp;
  2851 + //传入固定的流Id
  2852 + let publishData=this._getVideoPublishPath({streamId:streamId});
  2853 + loger.log("加入之前先设置旁录地址",publishData);
  2854 + if(publishData&&publishData.code==0){
  2855 + _webRtc.setConfigPublisherUrl(publishData.publishUrl);
  2856 + let m3u8Stream = _video_ape.getPlayVideoPath({"type": "m3u8", "streamId":streamId});
  2857 + let rtmpStream = _video_ape.getPlayVideoPath({"type": "rtmp", "streamId":streamId});
  2858 + _webRtc.setRtmpM3u8Path({m3u8Url:m3u8Stream.playUrl,rtmpUrl:rtmpStream.playUrl});
  2859 + }
  2860 + }
  2861 + clearTimeout(this.joinChannelTimer);
  2862 + this.joinChannelTimer=setTimeout(()=>{
  2863 + //加入音视频通话模块,延迟一秒处理,因为视频需要根据用户列表信息来判断放的位置,太早的话用户列表没有数据
  2864 + this._joinChannel({channelId:GlobalConfig.channelId,channelKey:GlobalConfig.channelKey ,uid:GlobalConfig.userUid,info:""+GlobalConfig.userRole});
  2865 + },1600);
  2866 + }
  2867 + }
2834 /* 2868 /*
2835 * 加入视频通话 2869 * 加入视频通话
2836 * */ 2870 * */
@@ -416,10 +416,11 @@ class WebRtcApe extends Emiter { @@ -416,10 +416,11 @@ class WebRtcApe extends Emiter {
416 } 416 }
417 417
418 leaveChannel() { 418 leaveChannel() {
419 - loger.log("离开视频通话频道"); 419 + loger.log("调用离开视频通话频道->isPublish"+this.isPublish);
420 if (!this.client) { 420 if (!this.client) {
421 return; 421 return;
422 } 422 }
  423 + this.unpublish();
423 this.client.leave(() => { 424 this.client.leave(() => {
424 loger.log("离开视频通话频道->成功"); 425 loger.log("离开视频通话频道->成功");
425 }, (err)=> { 426 }, (err)=> {