diff --git a/doc/MCU_MS_APPCONFIG 配置.docx b/doc/MCU_MS_APPCONFIG 配置.docx
new file mode 100644
index 0000000..af353f1
Binary files /dev/null and b/doc/MCU_MS_APPCONFIG 配置.docx differ
diff --git a/doc/MCU_MS_APPCONFIG 配置.txt b/doc/MCU_MS_APPCONFIG 配置.txt
new file mode 100644
index 0000000..bb23ea3
--- /dev/null
+++ b/doc/MCU_MS_APPCONFIG 配置.txt
@@ -0,0 +1,19 @@
+market_webrtc_发布版  
+mcu/ms/rs服务器:腾讯云测试
+appConfig:
+eyJhcHBJZCI6IjBmZTQ1YmJlYTU5YjRlZTU4NmM4ZGVkNjlmMmJjOGY3IiwiYXBwQ2VydGlmaWNhdGUiOiIiLCJhcHBSZWNvcmRpbmdLZXkiOiIiLCJyZWNvcmRJbnRlcmZhY2VzIjoibmV0d29ya3NjaG9vbC54dWVkaWFueXVuLmNvbS9zZXJ2ZXIvdXNlcnMvUmVjb3JkaW5nIiwiZ2V0Q2hhbm5lbFRva2VuIjoibmV0d29ya3NjaG9vbC54dWVkaWFueXVuLmNvbS9zZXJ2ZXIvdXNlcnMvZW5jcnlwdGlvblRva2VuIiwiZ2V0UmVjb3JkSW5mb0ludGVyZmFjZXMiOiJuZXR3b3Jrc2Nob29sLnh1ZWRpYW55dW4uY29tL3NlcnZlci9yZWNvcmRJbmZvL2dldFJlY29yZEluZm8iLCJzdG9wUmVjb3JkaW5nSW50ZXJmYWNlcyI6Im5ldHdvcmtzY2hvb2wueHVlZGlhbnl1bi5jb20vc2VydmVyL3JlY29yZEluZm8vc3RvcFJlY29yZGluZyIsImdldFR4UmVjb3JkSW5mb0ludGVyZmFjZXMiOiJuZXR3b3Jrc2Nob29sLnh1ZWRpYW55dW4uY29tL3NlcnZlci9yZWNvcmRJbmZvL3RlbmNlbnRSZWNvcmRJbmZvIn0=
+
+
+market_webrtc_测试版
+mcu/ms/rs服务器:腾讯云测试
+appConfig:  eyJhcHBJZCI6ImViMjUzY2M3YjQwYzRhOGI4MmYwYTViNmY5M2MyY2UwIiwiYXBwQ2VydGlmaWNhdGUiOiIiLCJhcHBSZWNvcmRpbmdLZXkiOiIiLCJyZWNvcmRJbnRlcmZhY2VzIjoibmV0d29ya3NjaG9vbC54dWVkaWFueXVuLmNvbS9zZXJ2ZXIvdXNlcnMvUmVjb3JkaW5nIiwiZ2V0Q2hhbm5lbFRva2VuIjoibmV0d29ya3NjaG9vbC54dWVkaWFueXVuLmNvbS9zZXJ2ZXIvdXNlcnMvZW5jcnlwdGlvblRva2VuIiwiZ2V0UmVjb3JkSW5mb0ludGVyZmFjZXMiOiJuZXR3b3Jrc2Nob29sLnh1ZWRpYW55dW4uY29tL3NlcnZlci9yZWNvcmRJbmZvL2dldFJlY29yZEluZm8iLCJzdG9wUmVjb3JkaW5nSW50ZXJmYWNlcyI6Im5ldHdvcmtzY2hvb2wueHVlZGlhbnl1bi5jb20vc2VydmVyL3JlY29yZEluZm8vc3RvcFJlY29yZGluZyIsImdldFR4UmVjb3JkSW5mb0ludGVyZmFjZXMiOiJuZXR3b3Jrc2Nob29sLnh1ZWRpYW55dW4uY29tL3NlcnZlci9yZWNvcmRJbmZvL3RlbmNlbnRSZWNvcmRJbmZvIn0=
+
+
+market_flash_发布版
+mcu/ms/rs服务器:腾讯云测试
+appConfig:  eyJhcHBJZCI6IjBmZTQ1YmJlYTU5YjRlZTU4NmM4ZGVkNjlmMmJjOGY3IiwiYXBwQ2VydGlmaWNhdGUiOiIiLCJhcHBSZWNvcmRpbmdLZXkiOiIiLCJyZWNvcmRJbnRlcmZhY2VzIjoibmV0d29ya3NjaG9vbC54dWVkaWFueXVuLmNvbS9zZXJ2ZXIvdXNlcnMvUmVjb3JkaW5nIiwiZ2V0Q2hhbm5lbFRva2VuIjoibmV0d29ya3NjaG9vbC54dWVkaWFueXVuLmNvbS9zZXJ2ZXIvdXNlcnMvZW5jcnlwdGlvblRva2VuIiwiZ2V0UmVjb3JkSW5mb0ludGVyZmFjZXMiOiJuZXR3b3Jrc2Nob29sLnh1ZWRpYW55dW4uY29tL3NlcnZlci9yZWNvcmRJbmZvL2dldFJlY29yZEluZm8iLCJzdG9wUmVjb3JkaW5nSW50ZXJmYWNlcyI6Im5ldHdvcmtzY2hvb2wueHVlZGlhbnl1bi5jb20vc2VydmVyL3JlY29yZEluZm8vc3RvcFJlY29yZGluZyIsImdldFR4UmVjb3JkSW5mb0ludGVyZmFjZXMiOiJuZXR3b3Jrc2Nob29sLnh1ZWRpYW55dW4uY29tL3NlcnZlci9yZWNvcmRJbmZvL3RlbmNlbnRSZWNvcmRJbmZvIn0=
+
+
+market_flash_测试版 
+mcu/ms/rs服务器:腾讯云测试
+appConfig: eyJhcHBJZCI6ImViMjUzY2M3YjQwYzRhOGI4MmYwYTViNmY5M2MyY2UwIiwiYXBwQ2VydGlmaWNhdGUiOiIiLCJhcHBSZWNvcmRpbmdLZXkiOiIiLCJyZWNvcmRJbnRlcmZhY2VzIjoibmV0d29ya3NjaG9vbC54dWVkaWFueXVuLmNvbS9zZXJ2ZXIvdXNlcnMvUmVjb3JkaW5nIiwiZ2V0Q2hhbm5lbFRva2VuIjoibmV0d29ya3NjaG9vbC54dWVkaWFueXVuLmNvbS9zZXJ2ZXIvdXNlcnMvZW5jcnlwdGlvblRva2VuIiwiZ2V0UmVjb3JkSW5mb0ludGVyZmFjZXMiOiJuZXR3b3Jrc2Nob29sLnh1ZWRpYW55dW4uY29tL3NlcnZlci9yZWNvcmRJbmZvL2dldFJlY29yZEluZm8iLCJzdG9wUmVjb3JkaW5nSW50ZXJmYWNlcyI6Im5ldHdvcmtzY2hvb2wueHVlZGlhbnl1bi5jb20vc2VydmVyL3JlY29yZEluZm8vc3RvcFJlY29yZGluZyIsImdldFR4UmVjb3JkSW5mb0ludGVyZmFjZXMiOiJuZXR3b3Jrc2Nob29sLnh1ZWRpYW55dW4uY29tL3NlcnZlci9yZWNvcmRJbmZvL3RlbmNlbnRSZWNvcmRJbmZvIn0=
\ No newline at end of file
diff --git a/doc/腾讯云测试JSON.txt b/doc/腾讯云测试JSON.txt
new file mode 100644
index 0000000..215abae
--- /dev/null
+++ b/doc/腾讯云测试JSON.txt
@@ -0,0 +1 @@
+{"RS_PULL":{"default":[{"port":"","ip":"playback.xuedianyun.com","name":"record","hlsSuffix":".m3u8","type":"live","rHlsSuffix":"/total.m3u8","publishSuffix":"9f2d3375619115d0115cc2692ede9947"}]},"HLS_PULL":{"default":[{"port":"","ip":"txlivepull.xuedianyun.com","name":"��Ѷ��","hlsSuffix":".m3u8","type":"live","rHlsSuffix":"/total.m3u8","publishSuffix":"9f2d3375619115d0115cc2692ede9947"}]},"MS":{"default":[{"port":"","ip":"txlivepush.xuedianyun.com","name":"��Ѷ��","hlsSuffix":".m3u8","type":"live","rHlsSuffix":"/total.m3u8","publishSuffix":"9f2d3375619115d0115cc2692ede9947"}]},"RTMP_PULL":{"default":[{"port":"","ip":"txlivepull.xuedianyun.com","name":"��Ѷ��","hlsSuffix":".m3u8","type":"live","rHlsSuffix":"/total.m3u8","publishSuffix":"9f2d3375619115d0115cc2692ede9947"}]},"MCU":{"����":[{"port":"80","ip":"mcuglobal.xuedianyun.com","name":"����"},{"port":"80","ip":"mcu.xuedianyun.com","name":"ȫ��ͨ"}],"default":[{"port":"80","ip":"mcuchina.xuedianyun.com","name":"�й�"}],"�й�":{"default":[{"port":"80","ip":"mcuchina.xuedianyun.com","name":"�й�"},{"port":"80","ip":"mcu.xuedianyun.com","name":"ȫ��ͨ"}]}}}
\ No newline at end of file
diff --git a/src/EngineEntrance.js b/src/EngineEntrance.js
index c713cfa..966b338 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.12.14.20170927";
+    GlobalConfig.sdkVersion = "v2.13.5.20170927";
     loger.warn("sdkVersion:" + GlobalConfig.sdkVersion);
 
     //设置
@@ -200,6 +200,8 @@ export default class MessageEntrance extends Emiter {
     this.controlHandUpStatus = this._controlHandUpStatus.bind(this); //控制别人的举手状态
     this.controlSilenceStatus = this._controlSilenceStatus.bind(this); //改变禁言状态
 
+    this.controlDrawStatus = this._controlDrawStatus.bind(this); //控制别人的是否可以使用画笔状态
+
     this.sceneTableChange = this._sceneTableChange.bind(this); //切换模块显示
     this.kickOutRosterFormNodeId = this._kickOutRosterFormNodeId.bind(this); //把指定nodeId的人踢出课堂
     this.sendThridChannelMessage = this._sendThridChannelMessage.bind(this);//通道第三方消息通道发送消息
@@ -1621,7 +1623,19 @@ export default class MessageEntrance extends Emiter {
       _confer_ape.changeHandUpStatus(_param);
     }
   }
-
+  /*
+  * 控制画笔使用状态
+  * */
+  _controlDrawStatus(_param){
+    //{nodeId:333333,isDisEnableDraw:true}
+    if (!_mcu.connected) {
+      loger.warn(GlobalConfig.getCurrentStatus());
+      return {"code": ApeConsts.RETURN_FAILED, "data": ""};
+    }
+    if (_confer_ape) {
+      _confer_ape.controlDrawStatus(_param);
+    }
+  }
   //停止上课
   _sendCloseClass(_param) {
     if (!_mcu||!_mcu.connected) {
@@ -1683,6 +1697,11 @@ export default class MessageEntrance extends Emiter {
     loger.log('获取课堂课堂信息完成.',_data.appConfig);
     //包含整个课堂最全的信息,储存数据
     if (_data) {
+      //老师默认启用画笔功能,其他身份默认禁用画笔功能
+      if(GlobalConfig.userRole==ApeConsts.host){
+        GlobalConfig.selfDisEnableDrawTime=0;
+      }
+
       GlobalConfig.mcuDelay = _data.h5Delay || 0; //mcu消息延迟的时间间隔,单位(秒),结合客户端传的messageDelay的值使用
       GlobalConfig.className = _data.meetingName || "";
       GlobalConfig.classBeginTime = _data.beginTime || "";
diff --git a/src/GlobalConfig.js b/src/GlobalConfig.js
index 9276ef2..5dc9a63 100644
--- a/src/GlobalConfig.js
+++ b/src/GlobalConfig.js
@@ -494,6 +494,8 @@ GlobalConfig.handUpTime = 0;
 GlobalConfig.level = 0;
 GlobalConfig.openCamera = 0;
 GlobalConfig.openMicrophones = 0;
+GlobalConfig.selfDisEnableDrawTime=1;//记录是否禁用画笔,0为启用画笔,大于0时被禁用的时间戳
+
 //视频质量相关设置
 GlobalConfig.fps = 15; //帧频
 GlobalConfig.gop = 3; //关键帧间隔(秒)
diff --git a/src/RecordPlayBackParse.js b/src/RecordPlayBackParse.js
index b26f93b..a1615a7 100644
--- a/src/RecordPlayBackParse.js
+++ b/src/RecordPlayBackParse.js
@@ -439,7 +439,9 @@ class RecordPlayBackParse extends Emiter {
 
                 }
                 if(itemJson&&itemJson.video_url){
-                    MediaModule.streams[itemJson.stream_id]=itemJson.video_url;
+                    if(itemJson.video_url.indexOf(".m3u8")>0){
+                        MediaModule.streams[itemJson.stream_id]=itemJson.video_url;
+                    }
                 }
             }
         }
diff --git a/src/apes/ApeConsts.js b/src/apes/ApeConsts.js
index 173e517..1f24497 100644
--- a/src/apes/ApeConsts.js
+++ b/src/apes/ApeConsts.js
@@ -26,7 +26,7 @@ ApeConsts.CLASS_ACTION_HANDUP_STATUS_CHANGE = 2; //更改用户的举手状态
 ApeConsts.USER_ACTION_SILENCE_STATUS_CHANGE = 3; //更改用户的禁言状态
 ApeConsts.CLASS_ACTION_KICK_OUT_ROSTER=4; //指定的人踢出课堂
 ApeConsts.STOP_ALL_PUBLISH=5; //所有人停止推流
-
+ApeConsts.CLASS_ACTION_DRAW_STATUS_CHANGE = 6; //更改用户的画笔状态
 
 //课堂类型 1:1v1(2路流) 2:直播(1路流) 3:小班课(可以多路流)
 ApeConsts.CLASS_TYPE_1 = 1; // 互动课堂,通过MS转发音视频,不能进行H5观看 1v1(2路流)
diff --git a/src/apes/ConferApe.js b/src/apes/ConferApe.js
index 66003e1..8aec0a2 100644
--- a/src/apes/ConferApe.js
+++ b/src/apes/ConferApe.js
@@ -107,6 +107,7 @@ class ConferApe extends Ape {
     nodeInfoRecordPdu.userData = GlobalConfig.userData;
     nodeInfoRecordPdu.userId = GlobalConfig.userId;
     nodeInfoRecordPdu.handUpTime = GlobalConfig.handUpTime;
+    nodeInfoRecordPdu.selfDisEnableDrawTime = GlobalConfig.selfDisEnableDrawTime;
     //nodeInfoRecordPdu.deviceType= GlobalConfig.deviceType;
     //nodeInfoRecordPdu.mobileDirection= GlobalConfig.mobileDirection;
     nodeInfoRecordPdu.microphones = GlobalConfig.microphones;
@@ -407,6 +408,18 @@ class ConferApe extends Ape {
       loger.warn('学生没有开启绘制的权限');
     }
   }
+  //控制指定用户的画笔状态
+  changeUserDrawStatus(_param){
+    loger.log('控制指定用户的画笔状态->', _param);
+    if (_param && _param.isDisEnableDraw == true) {
+      //举手
+      GlobalConfig.selfDisEnableDrawTime=EngineUtils.creatTimestamp();//被禁用画笔的时间
+    } else {
+      GlobalConfig.selfDisEnableDrawTime = 0; //取消禁用画笔
+    }
+    this.updateUserInfo();
+  }
+
   //开始上课
   startClass(_param) {
     if (GlobalConfig.isHost) {
@@ -517,6 +530,25 @@ class ConferApe extends Ape {
       console.log(_param);
     }
   }
+  //控制画笔的使用状态
+  controlDrawStatus(_param) {
+      //控制用户的举手状态
+      if (!_param || !_param.nodeId) {
+        loger.log('控制画笔的使用状态->失败->参数错误', _param);
+        return;
+      }
+      let msgObj = {};
+      msgObj.nodeId = _param.nodeId;
+      msgObj.isDisEnableDraw = false;
+      if (_param && _param.isDisEnableDraw == true) {
+        msgObj.isDisEnableDraw = true;
+      }
+      this.sendConferMsg({
+        "to": _param.nodeId,
+        "message": JSON.stringify(msgObj),
+        "actionType": ApeConsts.CLASS_ACTION_DRAW_STATUS_CHANGE
+      });
+    }
 
   //控制举手状态
   controlHandUpStatus(_param) {
@@ -612,7 +644,7 @@ class ConferApe extends Ape {
     let adapterPdu = new pdu['RCAdapterPdu'];
     adapterPdu.type = pdu.RCPDU_REG_ADAPTER;
     adapterPdu.item.push(adapterItemPdu);
-
+    loger.log('发送更新课堂信息->');
     this.sendUniform(adapterPdu, true);
   }
 
@@ -674,6 +706,8 @@ class ConferApe extends Ape {
       GlobalConfig.classTimestamp = GlobalConfig.classTimestamp + 1; //计时
       //向应用层更新当前课堂进行的时间长度 (秒)
       this._emit(MessageTypes.CLASS_UPDATE_TIMER, {"classTimestamp": GlobalConfig.classTimestamp});
+
+     /* 录制消息已经更新了数据,这个课堂内的就不需要再更新,间隔太短了频率太高
       //以一定的时间间隔同步课堂内所有人的累积上课时间
       if (GlobalConfig.classTimestamp % GlobalConfig.updateClassInfoDelay == 0) {
         //如果是host身份,需要同步时间给其他人,同时把当前的状态上传到服务器
@@ -683,7 +717,7 @@ class ConferApe extends Ape {
           //同步消息给其他人
           this.sendUpdaterClassStatusInfo({"actionType": ApeConsts.CLASS_STATUS_STARTED, isStopAllPublishMedia: false});
         }
-      }
+      }*/
 
       //进行MS动态选点,选择最快的MS服务器地址(录制回放不做处理)
       if (!GlobalConfig.isRecordPlayBack && GlobalConfig.classTimestamp % GlobalConfig.msDynamicChooseIpDelay == 0) {
@@ -710,7 +744,6 @@ class ConferApe extends Ape {
         //MCU同步消息给其他人
         this.sendUpdaterClassStatusInfo({"actionType": GlobalConfig.classStatus, isStopAllPublishMedia: false});
       }
-
     }
    /* if (GlobalConfig.classStatus == ApeConsts.CLASS_STATUS_STARTED) {
       GlobalConfig.classTimestamp = GlobalConfig.classTimestamp + 1; //计时
@@ -875,6 +908,17 @@ class ConferApe extends Ape {
           loger.warn('chatMsg->JSON数据解析失败');
         }
         break;
+      case ApeConsts.CLASS_ACTION_DRAW_STATUS_CHANGE:
+        let drawMsgObj = null;
+        try {
+          drawMsgObj = JSON.parse(chatMsg.message);
+          if (drawMsgObj && drawMsgObj.nodeId == GlobalConfig.nodeId) {
+            this.changeUserDrawStatus(drawMsgObj);
+          }
+        } catch (err) {
+          loger.warn('chatMsg->JSON数据解析失败');
+        }
+        break;
       case ApeConsts.USER_ACTION_SILENCE_STATUS_CHANGE:
         let silenceMsg = null;
         try {
diff --git a/src/mcu.js b/src/mcu.js
index 679f19d..e472801 100644
--- a/src/mcu.js
+++ b/src/mcu.js
@@ -218,6 +218,7 @@ class MCU extends Emiter {
     nodeInfoRecordPdu.role = ApeConsts.userTypesToId[this.classInfo.userRole] || 1; //NR_NORMAL用户的身份,根据用户登录时的身份设置
     nodeInfoRecordPdu.level = 0;
     nodeInfoRecordPdu.handUpTime = 0;
+    nodeInfoRecordPdu.selfDisEnableDrawTime = 1;
     nodeInfoRecordPdu.openCamera = 0;
     nodeInfoRecordPdu.openMicrophones = 0;
     nodeInfoRecordPdu.microphones = GlobalConfig.microphones;
diff --git a/src/pdus/pro.js b/src/pdus/pro.js
index d2e1048..34b8a91 100644
--- a/src/pdus/pro.js
+++ b/src/pdus/pro.js
@@ -928,6 +928,7 @@ message RCNodeInfoRecordPdu {
     optional string sdkVersion = 36;//SDK版本
     optional uint32 micNoise=37;
     optional bool autoGain=38;
+    optional uint32 selfDisEnableDrawTime = 39;
 }
 
 message RCVotingPollSettingsPdu {