diff --git a/src/EngineEntrance.js b/src/EngineEntrance.js
index 4d2c3ba..8be7f4f 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.31.10.20171122";
+    GlobalConfig.sdkVersion = "v2.31.12.20171122";
     loger.warn("sdkVersion:" + GlobalConfig.sdkVersion);
     console.log("sdkVersion:" + GlobalConfig.sdkVersion);
     //设置
@@ -2571,54 +2571,6 @@ export default class MessageEntrance extends Emiter {
     }
   }
 
-  //文档加入频道成功,同步到MCU服务器上的数据
-  docJoinChannelSuccess() {
-    let interval=new Date().getTime()-parseInt(this.lastClassActiveTime);
-    interval=interval/1000;
-    //loger.log("最后一次记录的时间->"+this.lastClassActiveTime,"当前时间:"+new Date().getTime(),"间隔:"+interval+"秒");
-    loger.log("文档加入频道成功->isHost=", GlobalConfig.isHost, "当前总人数:", GlobalConfig.rosterNumber, "sassDoclength=", GlobalConfig.docListPrepare.length);
-
-
-   /* //20171114 服务端已经做了处理,客户端不需要再做判断
-    //如果当前课堂内只有自己或者离开上次课堂的时间大于8分钟,需要停止服务端的视频录制,设备不是H5
-    if(GlobalConfig.rosterNumber<=1&&interval>=(6*60)&&GlobalConfig.deviceType!=3){
-      setTimeout(()=>{
-        //延迟3秒,检测一下当前是否有人在开着视频,如果有开启的就不能再停止了
-        loger.log("当前开启音视频的人数->"+GlobalConfig.getPublishUser());
-        if(GlobalConfig.getPublishUser()<1){
-          loger.log("调用服务端音视频停止录制->interval:"+interval);
-          this._mediaRecordControl({"status": WebRtcApe.RECORD_STATUS_2});
-        }
-      },3000);
-    }*/
-
-    //如果是主持人,那么需要判断一下文档模块同步的数据和从sass获取的文档数据是否相同,如果mcu服务器不存在的,需要上传
-    if (GlobalConfig.docListPrepare && GlobalConfig.docListPrepare.length > 0) {
-      //如果当前身份是老师或者当前课堂内只有一个人并且不是H5,有权限同步文档到MCU
-      if (GlobalConfig.isHost || (GlobalConfig.rosterNumber <= 1&&GlobalConfig.deviceType!=GlobalConfig.deviceH5)) {
-        for (let i = 0; i < GlobalConfig.docListPrepare.length; i++) {
-          let value = GlobalConfig.docListPrepare[i];
-          if (value) {
-            //loger.log("判断是否需要把提前上传的文档上传到mcu", value);
-            let paramInfo = {
-              "pageNum": value.pdfSize || value.pageNum,
-              "fileName": value.name,
-              "fileType": value.type||value.fileType,
-              "relativeUrl": value.relativeLocation || value.relativeUrl,
-              "url": value.absoluteLocation || value.url,
-              "creatUserId": value.createUserID || 0,
-              "docId": value.id || value.docId,
-              "md5": value.MD5 || "",
-              "visible": false,
-              "itemIdx": value.itemIdx || 0
-            };
-            this._sendDocumentUpload(paramInfo);
-          }
-        }
-      }
-    }
-  }
-
   //媒体共享模块的接口
   //上传
   _sendMediaSharedUpload(_param) {
@@ -2784,32 +2736,66 @@ export default class MessageEntrance extends Emiter {
     }
   }
 
+
+  //文档加入频道成功,同步到MCU服务器上的数据
+  docJoinChannelSuccess() {
+    let interval=new Date().getTime()-parseInt(this.lastClassActiveTime);
+    interval=interval/1000;
+    //loger.log("最后一次记录的时间->"+this.lastClassActiveTime,"当前时间:"+new Date().getTime(),"间隔:"+interval+"秒");
+    loger.log("文档加入频道成功->isHost=", GlobalConfig.isHost, "当前总人数:", GlobalConfig.rosterNumber, "sassDoclength=", GlobalConfig.docListPrepare.length);
+    //如果是主持人,那么需要判断一下文档模块同步的数据和从sass获取的文档数据是否相同,如果mcu服务器不存在的,需要上传
+    if (GlobalConfig.docListPrepare && GlobalConfig.docListPrepare.length > 0) {
+      //如果当前身份是老师或者当前课堂内只有一个人并且不是H5,有权限同步文档到MCU
+      if (GlobalConfig.isHost || (GlobalConfig.rosterNumber <= 1&&GlobalConfig.deviceType!=GlobalConfig.deviceH5)) {
+        for (let i = 0; i < GlobalConfig.docListPrepare.length; i++) {
+          let value = GlobalConfig.docListPrepare[i];
+          if (value) {
+            //loger.log("判断是否需要把提前上传的文档上传到mcu", value);
+            let paramInfo = {
+              "pageNum": value.pdfSize || value.pageNum,
+              "fileName": value.name,
+              "fileType": value.type||value.fileType,
+              "relativeUrl": value.relativeLocation || value.relativeUrl,
+              "url": value.absoluteLocation || value.url,
+              "creatUserId": value.createUserID || 0,
+              "docId": value.id || value.docId,
+              "md5": value.MD5 || "",
+              "visible": false,
+              "itemIdx": value.itemIdx || 0
+            };
+            this._sendDocumentUpload(paramInfo);
+          }
+        }
+      }
+    }
+  }
+
   //音乐共享模块加入频道成功,同步到MCU服务器上的数据
   musicShareApeJoinChannelSuccess() {
-    //loger.log("伴音MUSIC模块加入频道成功->isHost=", GlobalConfig.isHost, "length=", GlobalConfig.musicListPrepare.length);
-    //console.log("伴音MUSIC模块共享模数据->", GlobalConfig.musicListPrepare);
     //如果是主持人,那么需要判断一下文档模块同步的数据和从sass获取的文档数据是否相同,如果mcu服务器不存在的,需要上传
-    if (GlobalConfig.isHost && GlobalConfig.musicListPrepare.length > 0&&GlobalConfig.deviceType!=GlobalConfig.deviceH5) {
-      for (let i = 0; i < GlobalConfig.musicListPrepare.length; i++) {
-        let value = GlobalConfig.musicListPrepare[i];
-        if (value) {
-          let paramInfo = {
-            "status": 0,
-            "creatUserId": value.creatUserId,
-            "creatUserName": value.createUserName,
-            "url": value.url || value.absoluteLocation,//伴音上传的接口有差异,课堂内上传返回的是url字段,后台带入的字段是absoluteLocation
-            "fileType": value.type,
-            "fileId": "" + value.id,
-            "fileName": value.name,
-            "seek": 0,
-            "duration": parseInt(value.duration) || 0
-          };
-          //外部接口上传的伴音文件返回的地址有的不正确,需要特殊处理,检测是否有DocSharing目录
-          if(paramInfo.url&&paramInfo.url.indexOf("/DocSharing/")<0){
-            loger.log("替换MP3路径地址",paramInfo.url);
-            paramInfo.url=paramInfo.url.replace("/data/","/DocSharing/data/");
+    if (GlobalConfig.musicListPrepare&& GlobalConfig.musicListPrepare.length > 0) {
+      if (GlobalConfig.isHost || (GlobalConfig.rosterNumber <= 1&&GlobalConfig.deviceType!=GlobalConfig.deviceH5)) {
+        for (let i = 0; i < GlobalConfig.musicListPrepare.length; i++) {
+          let value = GlobalConfig.musicListPrepare[i];
+          if (value) {
+            let paramInfo = {
+              "status": 0,
+              "creatUserId": value.creatUserId,
+              "creatUserName": value.createUserName,
+              "url": value.url || value.absoluteLocation,//伴音上传的接口有差异,课堂内上传返回的是url字段,后台带入的字段是absoluteLocation
+              "fileType": value.type,
+              "fileId": "" + value.id,
+              "fileName": value.name,
+              "seek": 0,
+              "duration": parseInt(value.duration) || 0
+            };
+            //外部接口上传的伴音文件返回的地址有的不正确,需要特殊处理,检测是否有DocSharing目录
+            if(paramInfo.url&&paramInfo.url.indexOf("/DocSharing/")<0){
+              paramInfo.url=paramInfo.url.replace("/data/","/DocSharing/data/");
+            }
+            loger.log("MP3路径地址:"+paramInfo.url,"fileId:"+paramInfo.fileId);
+            this._sendMusicSharedUpload(paramInfo);
           }
-          this._sendMusicSharedUpload(paramInfo);
         }
       }
     }
@@ -2817,33 +2803,34 @@ export default class MessageEntrance extends Emiter {
 
   //媒体共享模块加入频道成功,同步到MCU服务器上的数据
   mediaShareApeJoinChannelSuccess() {
-    //loger.log("媒体共享模块加入频道成功->isHost=", GlobalConfig.isHost, "length=", GlobalConfig.sharedMediaList.length);
-    //console.log("媒体共享模数据->", GlobalConfig.sharedMediaList);
     //如果是主持人,那么需要判断一下文档模块同步的数据和从sass获取的文档数据是否相同,如果mcu服务器不存在的,需要上传
-    if (GlobalConfig.isHost && GlobalConfig.sharedMediaList.length > 0&&GlobalConfig.deviceType!=GlobalConfig.deviceH5) {
-      for (let i = 0; i < GlobalConfig.sharedMediaList.length; i++) {
-        let value = GlobalConfig.sharedMediaList[i];
-        if (value) {
-          let paramInfo = {
-            "status": 0,
-            "creatUserId": value.creatUserId,
-            "creatUserName": value.createUserName,
-            "url": value.url,
-            "fileType": value.type,
-            "fileId": "" + value.id,
-            "fileName": value.name,
-            "seek": 0,
-            "duration": parseInt(value.duration) || 0
-          };
-          //外部接口上传的伴音文件返回的地址有的不正确,需要特殊处理,检测是否有DocSharing目录
-          if(paramInfo.url&&paramInfo.url.indexOf("/DocSharing/")<0){
-            loger.log("替换MP4路径地址",paramInfo.url);
-            paramInfo.url=paramInfo.url.replace("/data/","/DocSharing/data/");
+    if (GlobalConfig.sharedMediaList&& GlobalConfig.sharedMediaList.length > 0) {
+      if (GlobalConfig.isHost || (GlobalConfig.rosterNumber <= 1&&GlobalConfig.deviceType!=GlobalConfig.deviceH5)) {
+        for (let i = 0; i < GlobalConfig.sharedMediaList.length; i++) {
+          let value = GlobalConfig.sharedMediaList[i];
+          if (value) {
+            let paramInfo = {
+              "status": 0,
+              "creatUserId": value.creatUserId,
+              "creatUserName": value.createUserName,
+              "url": value.url,
+              "fileType": value.type,
+              "fileId": "" + value.id,
+              "fileName": value.name,
+              "seek": 0,
+              "duration": parseInt(value.duration) || 0
+            };
+            //外部接口上传的伴音文件返回的地址有的不正确,需要特殊处理,检测是否有DocSharing目录
+            if(paramInfo.url&&paramInfo.url.indexOf("/DocSharing/")<0){
+              paramInfo.url=paramInfo.url.replace("/data/","/DocSharing/data/");
+            }
+            loger.log("MP4路径地址:"+paramInfo.url,"fileId:"+paramInfo.fileId);
+            this._sendMediaSharedUpload(paramInfo);
           }
-          this._sendMediaSharedUpload(paramInfo);
         }
       }
     }
+
   }
 
   //录制回放相关的处理------------------------------------------------
diff --git a/src/EngineUtils.js b/src/EngineUtils.js
index aca11a9..bd8a516 100644
--- a/src/EngineUtils.js
+++ b/src/EngineUtils.js
@@ -28,6 +28,17 @@ class EngineUtils{
         return [];
     }
 
+    /*
+    * 生成随机数   _part 段数 默认3段;   splitStr分隔符
+    * */
+    static creatRandomNum(_part=3,splitStr=""){
+        let randNumStr="";
+        for(let i=0;i<_part;i++){
+            randNumStr+=splitStr+parseInt(Math.random()*1000);
+        }
+        return randNumStr;
+    }
+
     //生成时间戳后9位 保证唯一
     static creatSoleNumberFromTimestamp(){
         let time   = new Date().getTime();
diff --git a/src/EverSocket.js b/src/EverSocket.js
index d333238..6b80c8a 100644
--- a/src/EverSocket.js
+++ b/src/EverSocket.js
@@ -98,7 +98,7 @@ class EverSocket extends Emiter {
   * */
   send2mcu(len,type){
     this.sendToMcuList.push(""+len+":"+type);
-    if(this.sendToMcuList.length>=50){
+    if(this.sendToMcuList.length>=100){
       loger.log("发送到MCU数据统计->",this.sendToMcuList);
       this.sendToMcuList=[];
     }
@@ -111,7 +111,7 @@ class EverSocket extends Emiter {
    * */
   mcu2client(len,type){
     this.receiveFromMcuList.push(""+len+":"+type);
-    if(this.receiveFromMcuList.length>50){
+    if(this.receiveFromMcuList.length>100){
       loger.log("收到MCU数据统计->",this.receiveFromMcuList);
       this.receiveFromMcuList=[];
     }
diff --git a/src/apes/DocApe.js b/src/apes/DocApe.js
index 953f122..10dda1d 100644
--- a/src/apes/DocApe.js
+++ b/src/apes/DocApe.js
@@ -56,7 +56,7 @@ class DocApe extends Ape {
     let itemIdx =parseInt(paramInfo.itemIdx||0);//使用外部指定的itemIdx
     if(itemIdx<=0){
       //外部指定的值无效就使用时间戳
-      itemIdx = EngineUtils.creatSoleNumberFromTimestamp();
+      itemIdx =parseInt(EngineUtils.creatRandomNum(3));//生成唯一的标识 int32;
     }
     let docDataModelPdu = this.packPdu(paramInfo, itemIdx);
     //数据无效或地址无效的不做处理
diff --git a/src/apes/MediaSharedApe.js b/src/apes/MediaSharedApe.js
index d8ebd96..392c96a 100644
--- a/src/apes/MediaSharedApe.js
+++ b/src/apes/MediaSharedApe.js
@@ -42,7 +42,7 @@ class MediaSharedApe extends Ape {
             return;
         }
 
-        let itemIdx = EngineUtils.creatSoleNumberFromTimestamp();//
+        let itemIdx = parseInt(EngineUtils.creatRandomNum(3));//生成唯一的标识 int32
         let pduDataModel = this.packPdu(paramInfo, itemIdx);
         if (pduDataModel == null) {
             loger.log('上传媒体文件->失败->数据无效');
diff --git a/src/apes/MusicSharedApe.js b/src/apes/MusicSharedApe.js
index 60becb9..7412087 100644
--- a/src/apes/MusicSharedApe.js
+++ b/src/apes/MusicSharedApe.js
@@ -43,7 +43,7 @@ class MusicSharedApe extends Ape {
       return;
     }
 
-    let itemIdx = EngineUtils.creatSoleNumberFromTimestamp(); //
+    let itemIdx = parseInt(EngineUtils.creatRandomNum(3));//生成唯一的标识 int32
     let pduDataModel = this.packPdu(paramInfo, itemIdx);
     if (pduDataModel == null) {
       loger.log('上传伴音文件->失败->数据无效');