From b19f3cb804d4241230819546d45eea6cedc14301 Mon Sep 17 00:00:00 2001
From: liyong <liyong@3mang.com>
Date: Mon, 18 Sep 2017 09:14:32 +0800
Subject: [PATCH] v2.8.7.20170916

---
 src/EngineEntrance.js |  4 ++--
 src/apes/WebRtcApe.js | 49 ++++++++++++++++++++++++++++++++++++++++++-------
 2 files changed, 44 insertions(+), 9 deletions(-)

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();
   }
-
   /*
    * 设置本地回显视图
    * */
--
libgit2 0.24.0