diff --git a/src/EngineEntrance.js b/src/EngineEntrance.js
index 1efa161..c9ace46 100644
--- a/src/EngineEntrance.js
+++ b/src/EngineEntrance.js
@@ -63,7 +63,7 @@ export default class MessageEntrance extends Emiter {
     super();
     this.lastClassActiveTime=0;//最后一次课堂激活的时间戳
     //sdk 信息
-    GlobalConfig.sdkVersion = "v2.25.7.20171031";
+    GlobalConfig.sdkVersion = "v2.26.2.20171102";
     loger.warn("sdkVersion:" + GlobalConfig.sdkVersion);
     console.log("sdkVersion:" + GlobalConfig.sdkVersion);
     //设置
@@ -413,6 +413,7 @@ export default class MessageEntrance extends Emiter {
           errorMessage = {"code": _data.type, "reson": MessageTypes.ErrorReson[_data.type], "data": _data.data};
         }
         break;
+
       default :
         errorMessage = {"code": _data, "reson": MessageTypes.ErrorReson[_data], "data": {}};
         break;
@@ -439,7 +440,14 @@ export default class MessageEntrance extends Emiter {
 
   //执行离开课堂断开连接的流程
   _runClassExit(_type) {
+    if( GlobalConfig.classExit){
+      console.log("已经离开课堂");
+      return;
+    }
     this._leaveClass(_type);
+    //记录是否已经离开课堂,离开之后不做MCU重连
+    GlobalConfig.classExit=true;
+    LogManager.IS_OPEN_SEND_LOG = false;//断开之后不再上报日志
   }
 
   //当前的课堂状态信息发生改变,需要保存课堂状态到Sass
@@ -1811,7 +1819,8 @@ export default class MessageEntrance extends Emiter {
         url: "http://pclive.xuedianyun.com/DocSharing/data/whiteboard/default/whiteboard.pdf",
         dynamicTransferStatic: "0",
         relativeUrl: "/DocSharing/data/whiteboard/default/whiteboard.pdf",
-        fileType: "pdf"
+        fileType: "pdf",
+        type:"pdf"
       }
       GlobalConfig.docListPrepare.push(whiteBoradData);
 
@@ -2538,7 +2547,7 @@ export default class MessageEntrance extends Emiter {
             let paramInfo = {
               "pageNum": value.pdfSize || value.pageNum,
               "fileName": value.name,
-              "fileType": value.type,
+              "fileType": value.type||value.fileType,
               "relativeUrl": value.relativeLocation || value.relativeUrl,
               "url": value.absoluteLocation || value.url,
               "creatUserId": value.createUserID || 0,
diff --git a/src/GlobalConfig.js b/src/GlobalConfig.js
index 89cf4e5..5e80e1a 100644
--- a/src/GlobalConfig.js
+++ b/src/GlobalConfig.js
@@ -412,6 +412,8 @@ GlobalConfig.msType = 1; //目前固定用这个
 GlobalConfig.messageDelay = false; //是否启用消息延迟
 GlobalConfig.mcuDelay = 0; //默认的延迟时间(单位-秒)
 
+GlobalConfig.classExit=false;//是否关闭课堂,如果关闭之后不再连接MCU
+
 GlobalConfig.docDelay = 1600; //文档模块加入成功之后延迟发送送成功的消息给主模块(sdk内部使用)
 GlobalConfig.portal = ""; //Sass IP
 
diff --git a/src/SystemConfig.js b/src/SystemConfig.js
index 23510b6..3b24189 100644
--- a/src/SystemConfig.js
+++ b/src/SystemConfig.js
@@ -180,7 +180,7 @@ class SystemConfig {
             if (window.clientInformation.languages.length > 2) {
               Sys.explorer = "chrome";
               loger.log("chrome", Sys);
-            } else if (window.clientInformation.languages.length == 2&&versionNum<55) {
+            } else if (window.clientInformation.languages.length == 2&&versionNum<=55) {
               var _track = 'track' in document.createElement('track');
               var webstoreKeysLength = window.chrome && window.chrome.webstore ? Object.keys(window.chrome.webstore).length : 0;
               if (_track) {
diff --git a/src/apes/ConferApe.js b/src/apes/ConferApe.js
index bcd9997..14e1ef2 100644
--- a/src/apes/ConferApe.js
+++ b/src/apes/ConferApe.js
@@ -931,7 +931,7 @@ class ConferApe extends Ape {
   rosterInsertHandler(nodeId, nodeData) {
     //loger.log("人员进入--->");
     if (GlobalConfig.nodeId == nodeId) {
-
+      loger.log("人员进入课堂模块--->自己");
     } else {
       // loger.log("有人加入 rosterInsertHandler");
       this.rosterUpdateHandler(nodeId, nodeData);
@@ -1038,9 +1038,19 @@ class ConferApe extends Ape {
   updaterRosterStatus(_param) {
     //loger.log("媒体模块发生更新,人员状态需要更新,fromNodeId->",_param);
     //如果视频消息中channel的占用人 fromNodeId在人员列表中不存在,需要释放这channel,因为这个有可能是之前没释放成功的
-    if (_param && _param.status == ApeConsts.CHANNEL_STATUS_OPENING && this.rosters[_param.fromNodeId] == null) {
-      loger.log("媒体模块被占用->占有人已经不存在课堂中->释放->", _param);
-      this._emit(MessageTypes.CLASS_NONENTITY_ROSTER, {"nodeId": _param.fromNodeId});
+    if (_param && _param.status == ApeConsts.CHANNEL_STATUS_OPENING) {
+      //如果推流的人员已经不存在,并且当前课堂内人员大于0;
+      // 如果不判断当前的人数,会出现把正常的视频消息释放的情况;
+      // 因为会出现先收到视频消息后收到人员加入和更新的消息
+      if(this.rosters[_param.fromNodeId] == null&&this.rosterLen>0){
+        //H5不做释放处理
+        if(GlobalConfig.deviceType==3){
+          loger.warn("H5不做媒体模块的频道释放->当前总人数->"+this.rosterLen, _param);
+          return ;
+        }
+        loger.warn("媒体模块被占用->占有人已经不存在课堂中->释放->当前总人数->"+this.rosterLen, _param);
+        this._emit(MessageTypes.CLASS_NONENTITY_ROSTER, {"nodeId": _param.fromNodeId});
+      }
     }
   }
 
diff --git a/src/apes/MediaModule.js b/src/apes/MediaModule.js
index aa10908..504253b 100644
--- a/src/apes/MediaModule.js
+++ b/src/apes/MediaModule.js
@@ -151,7 +151,8 @@ class MediaModule {
     txTime=txTime.toString(16);
     let txSecret= MD5(publishSuffix + streamId+txTime);
     //rtmp://11220.livepush.myqcloud.com/live/11220_c5a1ea0bce?bizid=11220&txSecret=b1d8af72bf62366eef31cbb5dc5c8778&txTime=59C5337F
-    newUrl=url +"?bizid=11220&txSecret="+txSecret+"&txTime="+txTime+"&record=hls|flv&record_interval=5400";
+    //newUrl=url +"?bizid=11220&txSecret="+txSecret+"&txTime="+txTime+"&record=hls|flv&record_interval=5400";
+    newUrl=url +"?bizid=11220&txSecret="+txSecret+"&txTime="+txTime+"&record=hls&record_interval=5400";
     loger.log("生成的推流地址->"+newUrl);
     return newUrl;
   }
diff --git a/src/apes/VideoApe.js b/src/apes/VideoApe.js
index 36bac63..7cee7ed 100644
--- a/src/apes/VideoApe.js
+++ b/src/apes/VideoApe.js
@@ -45,6 +45,7 @@ class VideoApe extends Ape {
   //ape加入成功
   onJoinChannelHandlerSuccess() {
     //这个设置很重要,因为只有Sass流程完成之后,APE才能取得GlobalConfig中的数据
+    loger.log('视频模块初始完成->');
     this.mediaModule.maxMediaChannel = GlobalConfig.maxVideoChannels;
   }
 
@@ -524,7 +525,7 @@ class VideoApe extends Ape {
     adapterPdu.type = pdu.RCPDU_REG_ADAPTER;
     adapterPdu.item.push(adapterItemPdu);
 
-    loger.log("发送更新VIDEO " + tableItemPdu.itemIdx);
+    loger.log("发送消息MCU更新VIDEO模块->channel:" + tableItemPdu.itemIdx);
     this.sendUniform(adapterPdu, true);
   }
 
@@ -590,11 +591,10 @@ class VideoApe extends Ape {
     }else {
       //判断接收者的id,如果不是0,并且也不是自己的nodeId,那么消息不做处理
       if (videoReceivePdu.toNodeId != 0 && videoReceivePdu.toNodeId != GlobalConfig.nodeId) {
-        loger.log('视频消息不处理 toNodeId=', videoReceivePdu.toNodeId, "my nodeId=", GlobalConfig.nodeId);
+        loger.log('视频消息不处理->接收人ID:'+videoReceivePdu.toNodeId, "自己的ID:"+GlobalConfig.nodeId);
       } else {
         loger.log('视频控制消息处理 .', videoReceivePdu);
         this._emit(MessageTypes.VIDEO_BROADCAST, videoReceivePdu);
-
         let data=videoReceivePdu.data;
         if(data){
           switch (videoReceivePdu.actionType){
@@ -633,12 +633,11 @@ class VideoApe extends Ape {
   }
   tableUpdateHandler(owner, itemIdx, itemData, seek) {
     let unpackChannelInfo = this.unPackPdu(owner, itemIdx, itemData);
-    loger.log("视频模块数据更新->channel", itemIdx, 'mediaType', unpackChannelInfo.mediaType, 'status->', unpackChannelInfo.status, "seek->", seek);
-
+    loger.log("视频模块数据更新->channel:"+itemIdx+'  mediaType:'+unpackChannelInfo.mediaType+'  status->'+unpackChannelInfo.status+"  seek->", seek);
     //****很重要********
     //如果owner的值为0,代表的是这个歌频道已经被释放了(mcu服务端对于占用channel的掉线用户,就是把owner设置为0)
     if (owner == 0) {
-      loger.log("释放占用的频道,channel", itemIdx);
+      loger.log("MCU返回值owner=0->释放占用的频道,channel:"+itemIdx);
       unpackChannelInfo.status = ApeConsts.CHANNEL_STATUS_RELEASED;
       unpackChannelInfo.streamId = "";
     }
diff --git a/src/mcu.js b/src/mcu.js
index e472801..87f2494 100644
--- a/src/mcu.js
+++ b/src/mcu.js
@@ -202,6 +202,10 @@ class MCU extends Emiter {
 
   // 主动建立MCU连接
   joinMCU(_classInfo) {
+    if(GlobalConfig.classExit==true){
+      loger.warn("已经关闭课堂->不再连接MCU");
+      return;
+    }
     loger.log('开始建立EverSocket通道.');
     GlobalConfig.classJoinSuccess = false;
     loger.log(_classInfo);