diff --git a/src/EngineEntrance.js b/src/EngineEntrance.js
index 8d5aeb2..9166d26 100644
--- a/src/EngineEntrance.js
+++ b/src/EngineEntrance.js
@@ -26,7 +26,7 @@ import ArrayBufferUtil from 'libs/ArrayBufferUtil';
 import UTF8 from 'utf-8';
 
 let loger = Loger.getLoger('MessageEntrance');
-let _sdkInfo = {"version": "v.1.7.0.20170309-1", "author": "www.3mang.com"};
+let _sdkInfo = {"version": "v.1.8.0.20170314-1", "author": "www.3mang.com"};
 
 //APE
 let _sass;
@@ -470,8 +470,12 @@ export default class MessageEntrance extends Emiter {
         if (_data.currentInfo) {
             //根据从Sass获取的数据信息,同步最后一次保存的课堂状态信息
             loger.log("本地同步最后一次保存过的课堂状态信息");
-            GlobalConfig.setClassStatusInfo(_data.currentInfo);
-            console.log(GlobalConfig.classStatusInfo);
+            try {
+                GlobalConfig.setClassStatusInfo(JSON.parse(_data.currentInfo));
+            }catch (err){
+                GlobalConfig.setClassStatusInfo(_data.currentInfo);
+            }
+            loger.log(GlobalConfig.classStatusInfo);
         } else {
             loger.log("还没有保存过课堂状信息");
         }
@@ -523,12 +527,12 @@ export default class MessageEntrance extends Emiter {
     //保存会态信息成功
     _sassSaveClassStatusInfoSuccessHandler(_data) {
         loger.log('保存课堂状态信息成功.');
-        console.log(_data);
+        loger.log(_data);
     }
 
     _sassSaveClassRecordInfoSuccessHandler(_data) {
         loger.log('保存课堂录制信息成功.');
-        console.log(_data);
+        loger.log(_data);
     }
 
     //Sass校验流程结束之后,开始加入MCU
@@ -589,7 +593,7 @@ export default class MessageEntrance extends Emiter {
         joinClassSuccessCallBackData.classTimestamp=GlobalConfig.classTimestamp;//课堂进行的累积时间
         joinClassSuccessCallBackData.recordPlaybackMaxTime=GlobalConfig.recordPlaybackMaxTime;//录制回放的总时间
         loger.log('加入课堂成功');
-        console.log(joinClassSuccessCallBackData);
+        loger.log(joinClassSuccessCallBackData);
 
         //加入课堂成功,广播消息
         this._emit(MessageTypes.CLASS_JOIN_SUCCESS, joinClassSuccessCallBackData);
@@ -964,7 +968,7 @@ export default class MessageEntrance extends Emiter {
             return;
         }
         loger.log('Doc UpdateId ->');
-        console.log(_data);
+        loger.log(_data);
         if (_whiteboard_ape) {
             _whiteboard_ape.docUpdateHandler(_data);
         }
@@ -980,7 +984,7 @@ export default class MessageEntrance extends Emiter {
     //文档加入频道成功,同步到MCU服务器上的数据
     docJoinChannelSuccess() {
         loger.log("docJoinChannelSuccess  isHost=", GlobalConfig.isHost);
-        console.log(GlobalConfig.docListPrepare);
+        loger.log(GlobalConfig.docListPrepare);
         loger.log("docJoinChannelSuccess  docListPrepare=");
         //如果是主持人,那么需要判断一下文档模块同步的数据和从sass获取的文档数据是否相同,如果mcu服务器不存在的,需要上传
         if (GlobalConfig.isHost) {
@@ -1137,7 +1141,7 @@ export default class MessageEntrance extends Emiter {
         joinClassSuccessCallBackData.classTimestamp=GlobalConfig.classTimestamp;//课堂进行的累积时间
         joinClassSuccessCallBackData.recordPlaybackMaxTime=GlobalConfig.recordPlaybackMaxTime;//录制回放的总时间
 
-        console.log(joinClassSuccessCallBackData);
+        loger.log(joinClassSuccessCallBackData);
         //和加入课堂成功使用同样的消息处理
         this._emit(MessageTypes.CLASS_JOIN_SUCCESS, joinClassSuccessCallBackData);
     }
diff --git a/src/RecordPlayBackParse.js b/src/RecordPlayBackParse.js
index 355e314..c69363a 100644
--- a/src/RecordPlayBackParse.js
+++ b/src/RecordPlayBackParse.js
@@ -29,7 +29,7 @@ class RecordPlayBackParse extends Emiter {
         loger.log("RecordPlayBackParse");
         parseBuffer = new ByteBuffer(ByteBuffer.DEFAULT_CAPACITY, ByteBuffer.LITTLE_ENDIAN);
         parseBuffer.clear();
-        console.log(parseBuffer);
+        //console.log(parseBuffer);
         this._recordPlaybackTimestamp = 0;//回放的时间
         this._recordPlaybackMaxTime = 0;//录制回放的总时间
         this._isReady = false;//录制回放是否已经准备完成
@@ -53,6 +53,20 @@ class RecordPlayBackParse extends Emiter {
         this._apes[ape._session_id] = ape;
     }
 
+    initReplay() {
+        this._stopTimerCounter();
+        this._recordPlaybackTimestamp = 0;//回放的时间
+        this._recordPlaybackMaxTime = 0;//录制回放的总时间
+        this._isReady = false;//录制回放是否已经准备完成
+
+        this._conferApeMssages = {};//会议数据
+        this._chatApeMssages = {};//聊天数据
+        this._videoApeMssages = {};//视频数据
+        this._audioApeMssages = {};//音频数据
+        this._docApeMssages = {};//文档数据
+        this._whiteApeMssages = {};//白板数据
+    }
+
     //发送数据个各个APE模块处理,data是数据,seekTime是当前数据需要seek的时间长度(针对音视频的seek)
     _everSocketMsgReceivedHandler(data, seekTime) {
         let pduMsg = pdu.decode_pdu(data);
@@ -65,7 +79,7 @@ class RecordPlayBackParse extends Emiter {
             pduMsg.type = PduType.RCPDU_SEND_DATA_REQUEST;
             pduType = PduType.RCPDU_SEND_DATA_REQUEST;
         }
-        loger.log('_everSocketMsgReceivedHandler->pduType', pduType,"seekTime->",seekTime);
+        loger.log('_everSocketMsgReceivedHandler->pduType', pduType, "seekTime->", seekTime);
         switch (pduType) {
             case PduType.RCPDU_CONNECT_PROVIDER_RESPONSE:
                 //加入课堂请求返回数据处理
@@ -95,7 +109,7 @@ class RecordPlayBackParse extends Emiter {
                     let subTypeLabel = pdu.id2type(pduMsg.subType);
                     //loger.log('MCU-SecondLayer封装消息', 'sessionId', sessionLabel, pduMsg.sessionId, 'subtype', subTypeLabel, pduMsg.subType);
                     //ape广播事件,只要ape中监听就能收到
-                    ape._emit(pduMsg.subType, pduMsg.data,seekTime);//seekTime是音视频模块seek的时间长度
+                    ape._emit(pduMsg.subType, pduMsg.data, seekTime);//seekTime是音视频模块seek的时间长度
                 } else {
                     loger.warn(sessionLabel + '尚未注册');
                 }
@@ -186,12 +200,17 @@ class RecordPlayBackParse extends Emiter {
 
     //开启计时器
     _startTimerCounter() {
-        this._timerCounter.startTimer();
+        if (this._timerCounter) {
+            this._timerCounter.startTimer();
+        }
     }
 
     //停止计时器
     _stopTimerCounter() {
-        this._timerCounter.stopTimer();
+        if (this._timerCounter) {
+            this._timerCounter.stopTimer();
+        }
+
     }
 
     _timerCounterUptate() {
@@ -217,12 +236,11 @@ class RecordPlayBackParse extends Emiter {
 
     //加载录制文件
     readyRecordPlay() {
-        this._isReady = false;
-        this._stopTimerCounter();
+        this.initReplay();
         loger.log("读取回放数据");
         //let url = `http://123.56.73.119:80/h5dev/20170306/1357644520_20170306.rec`;
         let url = `http://${ GlobalConfig.RecordServerIP}:${ GlobalConfig.RecordServerPort}/${GlobalConfig.recordFileName}`;
-        console.log(url);
+        loger.log(url);
         fetch(url, {
             timeout: 90000 //加载文件超时时间1分30秒
         })
@@ -273,14 +291,6 @@ class RecordPlayBackParse extends Emiter {
             position += 4;//4字节
             let byteData = parseBuffer.buffer.slice(position, (position + byteLen));
             position += byteLen;
-            console.log(timestamp, byteLen, byteData);
-
-            /* let messageItem = this._messages[timestamp];
-             if (!messageItem) {
-             this._messages[timestamp] = [];//数组存数据,因为有1秒内收到多个消息的情况,timestamp是按秒记录的
-             messageItem = this._messages[timestamp];
-             }
-             messageItem.push({"timestamp": timestamp, "byteData": byteData});*/
 
             this._parseSaveSocketMsgReceivedHandler(byteData, timestamp);
             //记录最后一个数据的时间戳作为整个录制回放的总时间戳
@@ -293,12 +303,12 @@ class RecordPlayBackParse extends Emiter {
         GlobalConfig.recordPlaybackMaxTime = this._recordPlaybackMaxTime;
         loger.log("录制回放数据解析完成,录制回放的总时间长为->", this._recordPlaybackMaxTime);
         //console.log("_messages", this._messages);
-        console.log("_conferApeMssages", this._conferApeMssages);
-        console.log("_chatApeMssages", this._chatApeMssages);
-        console.log("_docApeMssages", this._docApeMssages);
-        console.log("_whiteApeMssages", this._whiteApeMssages);
-        console.log("_videoApeMssages", this._videoApeMssages);
-        console.log("_audioApeMssages", this._audioApeMssages);
+        loger.log("_conferApeMssages", this._conferApeMssages);
+        loger.log("_chatApeMssages", this._chatApeMssages);
+        loger.log("_docApeMssages", this._docApeMssages);
+        loger.log("_whiteApeMssages", this._whiteApeMssages);
+        loger.log("_videoApeMssages", this._videoApeMssages);
+        loger.log("_audioApeMssages", this._audioApeMssages);
 
         this._emit(RecordPlayBackParse.CLASS_JOIN_RECORD_PLAYBACK_SUCCESS, {"recordPlaybackMaxTime": this._recordPlaybackMaxTime});
     }
@@ -311,7 +321,7 @@ class RecordPlayBackParse extends Emiter {
         } else {
             //把时间点对应的数据发送,同一秒内有存在多个数据的情况
             for (let i = 0; i < msgDataArr.length; i++) {
-                this._everSocketMsgReceivedHandler(msgDataArr[i].byteData,0);
+                this._everSocketMsgReceivedHandler(msgDataArr[i].byteData, 0);
             }
         }
     }
@@ -392,19 +402,21 @@ class RecordPlayBackParse extends Emiter {
             messageItem = _apeMessages[i];
             if (messageItem) {
                 keyFrameSeekTime = (this._recordPlaybackTimestamp - i)
-                loger.log("SEEK->APE",  ApeConsts(_apeId), this._recordPlaybackTimestamp, "查找到相连的timestamp->", i, '需要seek->', keyFrameSeekTime, "秒");
+                loger.log("SEEK->APE", ApeConsts(_apeId), this._recordPlaybackTimestamp, "查找到相连的timestamp->", i, '需要seek->', keyFrameSeekTime, "秒");
                 //把时间点对应的数据发送,同一秒内有存在多个数据的情况
                 for (let k = 0; k < messageItem.length; k++) {
-                    this._everSocketMsgReceivedHandler(messageItem[k].byteData,keyFrameSeekTime);
+                    this._everSocketMsgReceivedHandler(messageItem[k].byteData, keyFrameSeekTime);
                 }
                 if (_apeId == ApeConsts.AUDIO_SESSION_ID || _apeId == ApeConsts.VIDEO_SESSION_ID) {
-                    this._emit(MessageTypes.RECORD_PLAYBACK_UPDATE, {"status": SEEK, "keyFrameSeekTime": keyFrameSeekTime});
+                    this._emit(MessageTypes.RECORD_PLAYBACK_UPDATE, {
+                        "status": SEEK,
+                        "keyFrameSeekTime": keyFrameSeekTime
+                    });
                 }
                 return;
             }
         }
         loger.log("SEEK->APE", ApeConsts(_apeId), this._recordPlaybackTimestamp, "没有查找到相连的数据");
-        //this._emit(MessageTypes.RECORD_PLAYBACK_UPDATE,{"status":SEEK,"keyFrameSeek":keyFrameSeek});
     }
 
     //查找聊天模块ape关键帧数据,聊天模块比较特殊,消息是累积的,当前时间戳之前的都需要显示
@@ -416,7 +428,7 @@ class RecordPlayBackParse extends Emiter {
             if (messageItem) {
                 //把时间点对应的数据发送,同一秒内有存在多个数据的情况
                 for (let i = 0; i < messageItem.length; i++) {
-                    this._everSocketMsgReceivedHandler(messageItem[i].byteData,0);
+                    this._everSocketMsgReceivedHandler(messageItem[i].byteData, 0);
                 }
             }
         }
diff --git a/src/Sass.js b/src/Sass.js
index 7f50488..36f69d5 100644
--- a/src/Sass.js
+++ b/src/Sass.js
@@ -40,8 +40,8 @@ class Sass extends Emiter {
          */
         let url = `http://${_initInfo.portal}/3m/api/meeting/joinParams.do?meetingNumber=${_initInfo.classId}&userID=${_initInfo.userId}`;
         loger.log('1.初始化init获取课堂校验信息.');
-        console.log(url);
-        console.log(_initInfo);
+        loger.log(url);
+        loger.log(_initInfo);
         fetch(url, {
             timeout: 5000
         })
@@ -88,7 +88,7 @@ class Sass extends Emiter {
     // Sass校验开始-->密码校验(如果需要密码)--->MD5校验----------------------------------------------------
     passwordAndMd5Checking(_param) {
         loger.log('2.开始Sass校验');
-        console.log(_param);
+        loger.log(_param);
         confInfo = _param;
         // 密码校验
         if (confInfo.passwordRequired === 'true' || confInfo.passwordRequired === true) {
@@ -185,7 +185,7 @@ class Sass extends Emiter {
                      GlobalConfig.maxAudioChannels=confInfo.maxAudioChannels;
                      GlobalConfig.maxMediaChannels=confInfo.maxMediaChannels;*/
                     loger.log('MD5校验完成');
-                    console.log(ret);
+                    loger.log(ret);
                     this._emit(Sass.SUCCESS, ret);
                 } else {
                     loger.log('MD5校验-失败.');
@@ -252,7 +252,7 @@ class Sass extends Emiter {
         var authId = MD5(GlobalConfig.classId + "" + timestamp);//课堂号+时间戳 的字符串,转成MD5
         let url = `http://${GlobalConfig.portal}/3m/api/meeting/detail.do?meetingNumber=${GlobalConfig.classId}&timestamp=${timestamp}&authId=${authId}`;
         loger.log('5.获取课堂课堂的完整信息 ');
-        console.log(url);
+        loger.log(url);
         fetch(url, {
             timeout: 5000
         })
diff --git a/src/apes/Ape.js b/src/apes/Ape.js
index e3cf9bc..dbdc5fe 100644
--- a/src/apes/Ape.js
+++ b/src/apes/Ape.js
@@ -93,8 +93,7 @@ export default class Ape extends Emiter {
         let regItems = regPdu.item;
         let regItemSize = regItems.length;
         //loger.log(this._session_name + '数据同步消息');
-        loger.log(this._session_name + '数据同步消息.同步条数', regItemSize,"seekTime->",seekTime);
-
+        //loger.log(this._session_name + '数据同步消息.同步条数', regItemSize,"seekTime->",seekTime);
         for (var i = 0; i < regItemSize; ++i) {
             let regItem = regItems[i];
             let regItemType = regItem.type;
@@ -164,8 +163,8 @@ export default class Ape extends Emiter {
                     let tableUpdateData = pdu['RCRegistryTableUpdateItemPdu'].decode(user_data);
                     let tableUpdateItems = tableUpdateData.items;
                     let tableUpdateItemsLen = tableUpdateItems.length;
-                    loger.log("RCRegistryTableUpdateItemPdu " + tableUpdateItemsLen);
-                    console.log(tableUpdateData);
+                    //loger.log("RCRegistryTableUpdateItemPdu " + tableUpdateItemsLen);
+                    loger.log(tableUpdateData);
 
                     for (let i = 0; i < tableUpdateItemsLen; ++i) {
                         let tableItem = tableUpdateItems[i];
@@ -311,7 +310,7 @@ export default class Ape extends Emiter {
 
     send(appPdu) {
         loger.log('Ape发送数据NORMAL PDU');
-        console.log(appPdu);
+        //console.log(appPdu);
         //loger.log('当前的状态============',GlobalConfig.getCurrentStatus().code);
         if (GlobalConfig.getCurrentStatus().code == 0 || GlobalConfig.getCurrentStatus().code == 1) {
             this._emit(MessageTypes.MCU_ERROR, MessageTypes.ERR_APE_SEND_FAILED_NO_JOIN);
@@ -337,7 +336,7 @@ export default class Ape extends Emiter {
     // 发送当前APE(session uniform包)
     sendUniform(appPdu, top) {
         loger.log('Ape发送数据UNIFORM PDU');
-        console.log(appPdu);
+        //console.log(appPdu);
         //loger.log('当前的状态============',GlobalConfig.getCurrentStatus().code);
         if (GlobalConfig.getCurrentStatus().code == 0 || GlobalConfig.getCurrentStatus().code == 1) {
             this._emit(MessageTypes.MCU_ERROR, MessageTypes.ERR_APE_SEND_FAILED_NO_JOIN);
@@ -362,7 +361,7 @@ export default class Ape extends Emiter {
 
     sendChatUniform(appPdu, top) {
         loger.log('Ape发送数据UNIFORM PDU');
-        console.log(appPdu);
+        //console.log(appPdu);
         //loger.log('当前的状态============',GlobalConfig.getCurrentStatus().code);
         if (GlobalConfig.getCurrentStatus().code == 0 || GlobalConfig.getCurrentStatus().code == 1) {
             this._emit(MessageTypes.MCU_ERROR, MessageTypes.ERR_APE_SEND_FAILED_NO_JOIN);
diff --git a/src/apes/AudioApe.js b/src/apes/AudioApe.js
index 6c61408..a296fc0 100644
--- a/src/apes/AudioApe.js
+++ b/src/apes/AudioApe.js
@@ -349,7 +349,7 @@ class AudioApe extends Ape {
             }
         }else {
             loger.warn("消息是自己发送的或者是消息无效,不需要处理,消息内容如下:");
-            console.log(unpackChannelInfo);
+            loger.log(unpackChannelInfo);
 
         }
         this._emit(MessageTypes.AUDIO_UPDATE, unpackChannelInfo);
@@ -376,7 +376,7 @@ class AudioApe extends Ape {
         packPduModel.timestamp =_param.timestamp||EngineUtils.creatTimestamp();
         packPduModel.fromNodeId = GlobalConfig.nodeId;
         packPduModel.toNodeId = 0;
-        console.log("packPdu",packPduModel);
+        loger.log("packPdu",packPduModel);
         return packPduModel;
     }
 
@@ -388,7 +388,7 @@ class AudioApe extends Ape {
         }
         try {
             let packChannelInfo = pdu['RCAudioChannelInfoPdu'].decode(itemData);
-            console.log(packChannelInfo);
+            loger.log(packChannelInfo);
             return packChannelInfo;
         } catch (err) {
             loger.log("unPackPdu error,itemIdx=" + itemIdx + "  err:" + err.message);
diff --git a/src/apes/ChatApe.js b/src/apes/ChatApe.js
index e99a814..638f05e 100644
--- a/src/apes/ChatApe.js
+++ b/src/apes/ChatApe.js
@@ -65,11 +65,11 @@ class ChatApe extends Ape {
     // if (!(chatSendPdu.isPublic || 0 === chatSendPdu.peer)) {
     if (!chatSendPdu.isPublic && 0!=chatSendPdu.peer) {
       //发送给制定的人
-      loger.log('发送私聊消息.');
+      //loger.log('发送私聊消息.');
       this.send(chatSendPdu);
     } else {
       //发送给所有人
-      loger.log('发送公聊消息.');
+      //loger.log('发送公聊消息.');
       //this.sendUniform(chatSendPdu);
       this.sendChatUniform(chatSendPdu);
     }
diff --git a/src/apes/ConferApe.js b/src/apes/ConferApe.js
index 7883e89..85e6bce 100644
--- a/src/apes/ConferApe.js
+++ b/src/apes/ConferApe.js
@@ -64,7 +64,7 @@ class ConferApe extends Ape {
     _joinSessionHandler(_data) {
         let nodeInfoRecordPdu = this.mcu.mcuClassInfo.self;
         loger.log("_joinSessionHandler nodeInfoRecordPdu=");
-        console.log(nodeInfoRecordPdu);
+        loger.log(nodeInfoRecordPdu);
         let userDataPdu = new pdu['RCNodeInfoUserDataPdu'];
         userDataPdu.qq = '';
         userDataPdu.skype = '';
@@ -323,7 +323,7 @@ class ConferApe extends Ape {
         itemIdx = ApeConsts.CONFERENCE_OBJ_TABLE_ID;// itemIdx=_param.itemIdx;
         let modelPdu = this.packPdu(_param, itemIdx);
         //loger.log('sendUpdaterClassStatusInfo----2------');
-        console.log(modelPdu);
+        loger.log(modelPdu);
 
         if (modelPdu == null) {
             loger.log('sendUpdaterClassStatusInfo,参数错误');
@@ -360,7 +360,7 @@ class ConferApe extends Ape {
         adapterPdu.type = pdu.RCPDU_REG_ADAPTER;
         adapterPdu.item.push(adapterItemPdu);
 
-        console.log("课堂发送更新数据============");
+        loger.log("课堂发送更新数据============");
         this.sendUniform(adapterPdu, true);
     }
 
@@ -420,7 +420,7 @@ class ConferApe extends Ape {
         try {
             let model = this.unPackPdu(owner, itemIdx, itemData);
             loger.log('tableUpdateHandler');
-            console.log(model);
+            loger.log(model);
 
             //处理课堂更新的信息
             if (model && model.classStatusInfo) {
@@ -478,7 +478,7 @@ class ConferApe extends Ape {
         loger.log("onSendConferRecordRequestHandler");
         try {
             let conferRecordSendPdu = pdu['RCConferenceRecordRequestPdu'].decode(_data);
-            console.log(conferRecordSendPdu);
+            loger.log(conferRecordSendPdu);
         } catch (err) {
             loger.warn("onSendConferRecordRequestHandler err", err.message);
         }
diff --git a/src/apes/DocApe.js b/src/apes/DocApe.js
index c177008..db1345e 100644
--- a/src/apes/DocApe.js
+++ b/src/apes/DocApe.js
@@ -212,7 +212,7 @@ class DocApe extends Ape {
   //切换文档
   documentSwitchDoc(paramInfo){
     loger.log('切换文档,documentSwitchDoc');
-    console.log(paramInfo);
+    loger.log(paramInfo);
     if(paramInfo==null||paramInfo.itemIdx==null){
       loger.warn('documentSwitch失败,参数错误',paramInfo);
       this._emit(MessageTypes.MCU_ERROR,MessageTypes.ERR_APE_INTERFACE_PARAM_WRONG);
@@ -247,7 +247,7 @@ class DocApe extends Ape {
     docDataModel.visible=paramInfo.visible||false;//默认是false
 
     //loger.log('切换文档,当前文档和上一个显示的文档都需要更新状态');
-    console.log({"oldDoc":oldDocModel,"nowDoc":docDataModel});
+    loger.log({"oldDoc":oldDocModel,"nowDoc":docDataModel});
     //更新当前选择的文档
     this.updaterDoc(docDataModel,docDataModel.itemIdx);
 
@@ -261,7 +261,7 @@ class DocApe extends Ape {
   //文档翻页
   documentSwitchPage(paramInfo){
     loger.log('文档翻页,documentSwitchPage');
-    console.log(paramInfo);
+    loger.log(paramInfo);
     //console.log(this.docList);
     //获取已经存在的数据
     let docDataModel= this.docList[paramInfo.itemIdx];
@@ -349,7 +349,7 @@ class DocApe extends Ape {
     }
 
     loger.log('tableInsertHandler 发送给客户端');
-    console.log(itemDataInfo);
+    loger.log(itemDataInfo);
     this._emit(MessageTypes.DOC_UPDATE,itemDataInfo);//用添加和更新都统一DOC_UPDATE
   }
 
@@ -401,7 +401,7 @@ class DocApe extends Ape {
         loger.log('tableUpdateHandler 设置当前激活的文档id');
       }
       loger.log('tableUpdateHandler 发送给客户端');
-      console.log(itemDataInfo);
+      loger.log(itemDataInfo);
       this._emit(MessageTypes.DOC_UPDATE,itemDataInfo);
 
     }else {
@@ -515,7 +515,7 @@ class DocApe extends Ape {
     docModelPdu.md5=_param.md5||"";//MD5
     docModelPdu.fileName=_param.fileName||"doc_"+_itemIdx;//文档的名字
     docModelPdu.dynamicTS=_param.dynamicTS||"0";//文档上传后返回值中的字段dynamicTransferStatic
-    console.log(docModelPdu);
+    loger.log(docModelPdu);
     return docModelPdu;
   }
 
diff --git a/src/apes/MediaModule.js b/src/apes/MediaModule.js
index b4ee09f..cb6dd2f 100644
--- a/src/apes/MediaModule.js
+++ b/src/apes/MediaModule.js
@@ -116,7 +116,7 @@ class MediaModule {
             counter++;
         }
         loger.log("getFreeMediaChannel","maxMediaChannel",this.maxMediaChannel,"counter:",counter);
-        console.log(this.mediaChannels);
+        loger.log(this.mediaChannels);
         if (counter < this.maxMediaChannel) {
             return this.MEDIA_OBJ_TABLE_ID + (counter);
         }
diff --git a/src/apes/VideoApe.js b/src/apes/VideoApe.js
index ddbf3dd..9cf8c39 100644
--- a/src/apes/VideoApe.js
+++ b/src/apes/VideoApe.js
@@ -292,7 +292,7 @@ class VideoApe extends Ape {
         }
         videoReceivePdu.data = this._rCArrayBufferUtil.uint8ArrayToStr(videoReceivePdu.data, 2);//开头两个字会乱码
         loger.log('视频控制消息处理 .',videoReceivePdu);
-        console.log(videoReceivePdu);
+        loger.log(videoReceivePdu);
 
         //判断接收者的id,如果不是0,并且也不是自己的nodeId,那么消息不做处理
         if (videoReceivePdu.toNodeId != 0 && videoReceivePdu.toNodeId != GlobalConfig.nodeId) {
@@ -353,7 +353,7 @@ class VideoApe extends Ape {
             }
         }else {
             loger.warn("视频消息是自己发送的或者是视频消息无效,不需要处理,消息内容如下:");
-            console.log(unpackChannelInfo);
+            loger.log(unpackChannelInfo);
 
         }
 
@@ -381,7 +381,7 @@ class VideoApe extends Ape {
         packPduModel.timestamp =_param.timestamp||0;
         packPduModel.fromNodeId = GlobalConfig.nodeId;
         packPduModel.toNodeId = 0;
-        console.log(packPduModel);
+        loger.log(packPduModel);
         return packPduModel;
     }
 
@@ -393,7 +393,7 @@ class VideoApe extends Ape {
         }
         try {
             let videoChannelInfo = pdu['RCVideoChannelInfoPdu'].decode(itemData);
-            console.log(videoChannelInfo);
+            loger.log(videoChannelInfo);
             return videoChannelInfo;
         } catch (err) {
             loger.log("unPackPdu error,itemIdx=" + itemIdx + "  err:" + err.message);
diff --git a/src/apes/WhiteBoardApe.js b/src/apes/WhiteBoardApe.js
index 9f5b760..6154f8a 100644
--- a/src/apes/WhiteBoardApe.js
+++ b/src/apes/WhiteBoardApe.js
@@ -25,12 +25,12 @@ import EngineUtils from 'EngineUtils';
 
 let loger = Loger.getLoger('WhiteBoardApe');
 
-let itemIdx=0;//table插入新数据的计数id,目前用时间戳
-const TYPE_BIGHT=0;//任意线段
-const TYPE_LINE=1;//直线
-const TYPE_RECT=2;//矩形
-const TYPE_CIRCLE=3;//圆形
-const TYPE_TEXT=4;//文本
+let itemIdx = 0;//table插入新数据的计数id,目前用时间戳
+const TYPE_BIGHT = 0;//任意线段
+const TYPE_LINE = 1;//直线
+const TYPE_RECT = 2;//矩形
+const TYPE_CIRCLE = 3;//圆形
+const TYPE_TEXT = 4;//文本
 
 class WhiteBoardApe extends Ape {
     constructor() {
@@ -41,7 +41,7 @@ class WhiteBoardApe extends Ape {
         );
         // properties
         this.annoInfos = {};//储存所有的标注数据
-        this.insertHistory=[];//添加的白板记录,用于撤回操作
+        this.insertHistory = [];//添加的白板记录,用于撤回操作
         // 白板延迟
         // this._apeDelayed = true;
 
@@ -57,24 +57,24 @@ class WhiteBoardApe extends Ape {
 
     _joinSessionHandler(_data) {
         loger.log("RCPDU_SESSION_JOIN_RESPONSE");
-        this.insertHistory=[];
+        this.insertHistory = [];
     }
 
     /////////////发送数据操作//////////////////////////////////////////////////////
     // 添加标注,发送信息
-    sendInsetAnnotaion(_param){
-        if(_param==null||EngineUtils.isEmptyObject(_param)){
+    sendInsetAnnotaion(_param) {
+        if (_param == null || EngineUtils.isEmptyObject(_param)) {
             loger.log('sendInsetAnnotaion失败,参数错误');
-            this._emit(MessageTypes.MCU_ERROR,MessageTypes.ERR_APE_INTERFACE_PARAM_WRONG);
-            return ;
+            this._emit(MessageTypes.MCU_ERROR, MessageTypes.ERR_APE_INTERFACE_PARAM_WRONG);
+            return;
         }
 
-        itemIdx=EngineUtils.creatSoleNumberFromTimestamp();
-        let whiteBoardModelPdu = this.packPdu(_param,itemIdx);
-        if(whiteBoardModelPdu==null){
+        itemIdx = EngineUtils.creatSoleNumberFromTimestamp();
+        let whiteBoardModelPdu = this.packPdu(_param, itemIdx);
+        if (whiteBoardModelPdu == null) {
             loger.log('sendInsetAnnotaion失败,参数错误');
-            this._emit(MessageTypes.MCU_ERROR,MessageTypes.ERR_APE_INTERFACE_PARAM_WRONG);
-            return ;
+            this._emit(MessageTypes.MCU_ERROR, MessageTypes.ERR_APE_INTERFACE_PARAM_WRONG);
+            return;
         }
         //console.log(whiteBoardModelPdu);
 
@@ -82,10 +82,10 @@ class WhiteBoardApe extends Ape {
         this.insertHistory.push(whiteBoardModelPdu);
 
         let tableItemPdu = new pdu['RCRegistryTableItemPdu'];
-        tableItemPdu.itemIdx=itemIdx;//直接用时间戳作为id
-        tableItemPdu.registerObjId=ApeConsts.WHITEBOARD_OBJ_TABLE_ID;
+        tableItemPdu.itemIdx = itemIdx;//直接用时间戳作为id
+        tableItemPdu.registerObjId = ApeConsts.WHITEBOARD_OBJ_TABLE_ID;
         tableItemPdu.owner = 0;//收到flash的是这个值,不清楚先写固定
-        tableItemPdu.itemData =whiteBoardModelPdu.toArrayBuffer();
+        tableItemPdu.itemData = whiteBoardModelPdu.toArrayBuffer();
 
         //insert
         let tableInsertItemPdu = new pdu['RCRegistryTableInsertItemPdu'];
@@ -108,39 +108,42 @@ class WhiteBoardApe extends Ape {
         adapterPdu.type = pdu.RCPDU_REG_ADAPTER;
         adapterPdu.item.push(adapterItemPdu);
 
-        console.log("添加白板数据=====itemIdx="+tableItemPdu.itemIdx);
-        this.sendUniform(adapterPdu,true);
+        loger.log("添加白板数据=====itemIdx=" + tableItemPdu.itemIdx);
+        this.sendUniform(adapterPdu, true);
     }
+
     //撤销上一步
-    sendGotoPrev(){
+    sendGotoPrev() {
         loger.log("白板返回上一步");
-        if(this.insertHistory==null||this.insertHistory.length<1){
+        if (this.insertHistory == null || this.insertHistory.length < 1) {
             loger.warn("无法继续上一步操作,已经没有可以撤销的数据");
             return;
         }
-        console.log(this.insertHistory);
+        //loger.log(this.insertHistory);
         this.sendDeleteAnnotaion(this.insertHistory.pop());
     }
+
     //删除当前页码的所有标注
-    sendDeleteCurPageAnnotation(_param){
-        for (let key in this.annoInfos){
-            let item=this.annoInfos[key];
-            if(item&&item.parentId==GlobalConfig.activeDocId&&item.curPageNo==GlobalConfig.activeDocCurPage){
-                loger.log("sendDeleteCurPageAnnotation 删除当前页面上的标注",key);
-                this.sendDeleteAnnotaion({"itemIdx":key});
+    sendDeleteCurPageAnnotation(_param) {
+        for (let key in this.annoInfos) {
+            let item = this.annoInfos[key];
+            if (item && item.parentId == GlobalConfig.activeDocId && item.curPageNo == GlobalConfig.activeDocCurPage) {
+                loger.log("sendDeleteCurPageAnnotation 删除当前页面上的标注", key);
+                this.sendDeleteAnnotaion({"itemIdx": key});
             }
         }
     }
+
     //删除所有标注
-    sendDeleteAllAnnotation(_param){
-        for (let key in this.annoInfos){
-            this.sendDeleteAnnotaion({"itemIdx":key});
+    sendDeleteAllAnnotation(_param) {
+        for (let key in this.annoInfos) {
+            this.sendDeleteAnnotaion({"itemIdx": key});
         }
     }
 
     //删除标注,发送信息
-    sendDeleteAnnotaion(_param){
-        if(_param==null){
+    sendDeleteAnnotaion(_param) {
+        if (_param == null) {
             loger.warn("要删除的数据不存在");
             return;
         }
@@ -149,7 +152,7 @@ class WhiteBoardApe extends Ape {
         //optional RCPduType_E type = 1 [default = RCPDU_REG_TABLE_DELETE_PDU];
         // repeated uint32 item_idx = 2;
         tableDeleteItemPdu.type = pdu.RCPDU_REG_TABLE_DELETE_PDU;//
-        tableDeleteItemPdu.itemIdx=parseInt(_param.itemIdx);//这里需要设置要删除的数据的itemIdx,每条数据的这个id都不一样
+        tableDeleteItemPdu.itemIdx = parseInt(_param.itemIdx);//这里需要设置要删除的数据的itemIdx,每条数据的这个id都不一样
 
         let updateObjPdu = new pdu['RCRegistryUpdateObjPdu'];
         updateObjPdu.objId = ApeConsts.WHITEBOARD_OBJ_TABLE_ID;
@@ -165,33 +168,33 @@ class WhiteBoardApe extends Ape {
         adapterPdu.type = pdu.RCPDU_REG_ADAPTER;
         adapterPdu.item.push(adapterItemPdu);
 
-        console.log("白板发送删除数据============="+tableDeleteItemPdu.itemIdx);
-        this.sendUniform(adapterPdu,true);
+        loger.log("白板发送删除数据=============" + tableDeleteItemPdu.itemIdx);
+        this.sendUniform(adapterPdu, true);
     }
 
 
     //更新标注
-    sendUpdaterAnnotaion(_param){
-        if(_param==null||EngineUtils.isEmptyObject(_param)){
+    sendUpdaterAnnotaion(_param) {
+        if (_param == null || EngineUtils.isEmptyObject(_param)) {
             loger.log('sendUpdaterAnnotaion失败,参数错误');
-            this._emit(MessageTypes.MCU_ERROR,MessageTypes.ERR_APE_INTERFACE_PARAM_WRONG);
-            return ;
+            this._emit(MessageTypes.MCU_ERROR, MessageTypes.ERR_APE_INTERFACE_PARAM_WRONG);
+            return;
         }
-        itemIdx=_param.itemIdx;
-        let whiteBoardModelPdu = this.packPdu(_param,itemIdx);
+        itemIdx = _param.itemIdx;
+        let whiteBoardModelPdu = this.packPdu(_param, itemIdx);
         //console.log(whiteBoardModelPdu);
 
-        if(whiteBoardModelPdu==null){
+        if (whiteBoardModelPdu == null) {
             loger.log('sendInsetAnnotaion失败,参数错误');
-            this._emit(MessageTypes.MCU_ERROR,MessageTypes.ERR_APE_INTERFACE_PARAM_WRONG);
-            return ;
+            this._emit(MessageTypes.MCU_ERROR, MessageTypes.ERR_APE_INTERFACE_PARAM_WRONG);
+            return;
         }
 
         let tableItemPdu = new pdu['RCRegistryTableItemPdu'];
-        tableItemPdu.itemIdx=itemIdx;
+        tableItemPdu.itemIdx = itemIdx;
         tableItemPdu.owner = 0;//收到flash的是这个值,不清楚先写固定
-        tableItemPdu.registerObjId=ApeConsts.WHITEBOARD_OBJ_TABLE_ID;
-        tableItemPdu.itemData =whiteBoardModelPdu.toArrayBuffer();
+        tableItemPdu.registerObjId = ApeConsts.WHITEBOARD_OBJ_TABLE_ID;
+        tableItemPdu.itemData = whiteBoardModelPdu.toArrayBuffer();
 
 
         //updater
@@ -216,50 +219,42 @@ class WhiteBoardApe extends Ape {
         adapterPdu.type = pdu.RCPDU_REG_ADAPTER;
         adapterPdu.item.push(adapterItemPdu);
 
-        console.log("白板发送更新数据===============22");
-        this.sendUniform(adapterPdu,true);
+        loger.log("白板发送更新数据===============22");
+        this.sendUniform(adapterPdu, true);
     }
 
     /////收到消息处理/////////////////////////////////////////////////////////////////////////////////
-    /*  whiteboardMsgComingHandler(_data) {
-     //flash    RCConferenceSendDataRequestPdu
-     //loger.warn('whiteboardMsgComingHandler needs to be handled.');
-     //const recordInfo = pdu['RCWhiteboardDataRequestPdu'].decode(pdu);
-     //loger.log("whiteboardMsgComingHandler",recordInfo);
-
-     let receiveInfo = pdu['RCConferenceSendDataRequestPdu'].decode(_data);
-     loger.log("whiteboardMsgComingHandler",receiveInfo);
-     }*/
-
-    tableInsertHandler(owner, itemIdx,itemData) {
-        let whiteBoardModel=this.unPackPdu(owner, itemIdx,itemData);
+    tableInsertHandler(owner, itemIdx, itemData) {
+        let whiteBoardModel = this.unPackPdu(owner, itemIdx, itemData);
         loger.log('tableInsertHandler');
-        console.log(whiteBoardModel);
-        if(whiteBoardModel){
-            if(GlobalConfig.activeDocId==whiteBoardModel.parentId&&GlobalConfig.activeDocCurPage==whiteBoardModel.curPageNo){
-                loger.log('WHITEBOARD_ANNOTAION_INSERT 显示到界面上',whiteBoardModel);
+        loger.log(whiteBoardModel);
+        if (whiteBoardModel) {
+            if (GlobalConfig.activeDocId == whiteBoardModel.parentId && GlobalConfig.activeDocCurPage == whiteBoardModel.curPageNo) {
+                loger.log('WHITEBOARD_ANNOTAION_INSERT 显示到界面上', whiteBoardModel);
                 //this._emit(MessageTypes.WHITEBOARD_ANNOTAION_INSERT,whiteBoardModel);
                 this.insertAandShowAnnotaion(whiteBoardModel);
             }
         }
     }
+
     tableUpdateHandler(owner, itemIdx, itemData) {
-        let whiteBoardModel=this.unPackPdu(owner, itemIdx,itemData);
+        let whiteBoardModel = this.unPackPdu(owner, itemIdx, itemData);
         loger.log('tableUpdateHandler');
-        console.log(whiteBoardModel);
-        if(whiteBoardModel&&whiteBoardModel.parentId==GlobalConfig.activeDocId&&whiteBoardModel.curPageNo==GlobalConfig.activeDocCurPage){
+        loger.log(whiteBoardModel);
+        if (whiteBoardModel && whiteBoardModel.parentId == GlobalConfig.activeDocId && whiteBoardModel.curPageNo == GlobalConfig.activeDocCurPage) {
             this.updateAandShowAnnotaion();
         }
     }
-    tableDeleteHandler(object_id, tableDeleteData){
+
+    tableDeleteHandler(object_id, tableDeleteData) {
         // console.log("白板收到数据,tableDeleteHandler  object_id="+object_id);//((18<< 16) + 1)=1179649
-        loger.log('tableDeleteHandler',object_id,tableDeleteData);//["tableDeleteHandler",1179649,{"type":231,"itemIdx":[1486301768]}]
-        if(tableDeleteData&&tableDeleteData.itemIdx){
-            let len=tableDeleteData.itemIdx.length;
-            let itemIdxs=tableDeleteData.itemIdx;
-            for (let i=0;i<len;i++){
-                if(this.annoInfos[itemIdxs[i]]){
-                    loger.log("删除白板数据:",itemIdxs[i]);
+        loger.log('tableDeleteHandler', object_id, tableDeleteData);//["tableDeleteHandler",1179649,{"type":231,"itemIdx":[1486301768]}]
+        if (tableDeleteData && tableDeleteData.itemIdx) {
+            let len = tableDeleteData.itemIdx.length;
+            let itemIdxs = tableDeleteData.itemIdx;
+            for (let i = 0; i < len; i++) {
+                if (this.annoInfos[itemIdxs[i]]) {
+                    loger.log("删除白板数据:", itemIdxs[i]);
                     //this._emit(MessageTypes.WHITEBOARD_ANNOTAION_DELETE,{ "itemIdx":itemIdxs[i]});
                     delete this.annoInfos[itemIdxs[i]];
                 }
@@ -267,79 +262,72 @@ class WhiteBoardApe extends Ape {
         }
         this.updateAandShowAnnotaion();
     }
+
     //文档更新,白板也要更新
-    docUpdateHandler(_data){
+    docUpdateHandler(_data) {
         loger.log("白板收到文档更新的消息docUpdateHandler");
-        console.log(_data);
+        loger.log(_data);
 
         //如果切换了文档或翻页,清除之前的添加步骤记录
-        if(_data.action==ApeConsts.DOC_ACTION_SWITCH_DOC||_data.action==ApeConsts.DOC_ACTION_SWITCH_PAGE){
-            this.insertHistory=[];
+        if (_data.action == ApeConsts.DOC_ACTION_SWITCH_DOC || _data.action == ApeConsts.DOC_ACTION_SWITCH_PAGE) {
+            this.insertHistory = [];
         }
         this.updateAandShowAnnotaion();
     }
+
     //删除白板数据
-    docDeleteHandler(_parentId){
-        loger.log("白板收到文档删除的消息docDeleteHandler",_parentId);
-        for (let key in this.annoInfos){
-            let item=this.annoInfos[key];
-            if(item&&item.parentId==_parentId){
-                loger.log("文档删除,白板数据也删除,itemIdx:"+key,"_parentId:",_parentId);
-                this.sendDeleteAnnotaion({"itemIdx":key});
+    docDeleteHandler(_parentId) {
+        loger.log("白板收到文档删除的消息docDeleteHandler", _parentId);
+        for (let key in this.annoInfos) {
+            let item = this.annoInfos[key];
+            if (item && item.parentId == _parentId) {
+                loger.log("文档删除,白板数据也删除,itemIdx:" + key, "_parentId:", _parentId);
+                this.sendDeleteAnnotaion({"itemIdx": key});
             }
         }
     }
+
     //增量添加标注
-    insertAandShowAnnotaion(_item){
-        let annotaionItems=[_item];
-        var updateObj={
-            "isFresh":false,
-            "annotaionItems":annotaionItems
+    insertAandShowAnnotaion(_item) {
+        let annotaionItems = [_item];
+        var updateObj = {
+            "isFresh": false,
+            "annotaionItems": annotaionItems
         };
-        loger.log("WHITEBOARD_ANNOTATION_UPDATE",annotaionItems.length);
-        this._emit(MessageTypes.WHITEBOARD_ANNOTATION_UPDATE,updateObj);
+        loger.log("WHITEBOARD_ANNOTATION_UPDATE", annotaionItems.length);
+        this._emit(MessageTypes.WHITEBOARD_ANNOTATION_UPDATE, updateObj);
     }
+
     //整体更新并且显示标注
-    updateAandShowAnnotaion(){
-        let annotaionItems=[];
-        for (let key in this.annoInfos){
-            let item=this.annoInfos[key];
-            if(item&&item.parentId==GlobalConfig.activeDocId&&item.curPageNo==GlobalConfig.activeDocCurPage){
+    updateAandShowAnnotaion() {
+        let annotaionItems = [];
+        for (let key in this.annoInfos) {
+            let item = this.annoInfos[key];
+            if (item && item.parentId == GlobalConfig.activeDocId && item.curPageNo == GlobalConfig.activeDocCurPage) {
                 annotaionItems.push(item);
-                loger.log("显示和文档对应的白板数据docUpdateHandler itemIdx:",item.itemIdx,"doc itemIdx:",GlobalConfig.activeDocId,"curPageNo:",GlobalConfig.activeDocCurPage);
-            }else{
+                loger.log("显示和文档对应的白板数据docUpdateHandler itemIdx:", item.itemIdx, "doc itemIdx:", GlobalConfig.activeDocId, "curPageNo:", GlobalConfig.activeDocCurPage);
+            } else {
                 //loger.log("不显示白板数据docUpdateHandler",item);
             }
         }
-        var updateObj={
-            "isFresh":true,
-            "annotaionItems":annotaionItems
+        var updateObj = {
+            "isFresh": true,
+            "annotaionItems": annotaionItems
         };
-        loger.log("WHITEBOARD_ANNOTATION_UPDATE",annotaionItems.length);
-        this._emit(MessageTypes.WHITEBOARD_ANNOTATION_UPDATE,updateObj);
+        loger.log("WHITEBOARD_ANNOTATION_UPDATE", annotaionItems.length);
+        this._emit(MessageTypes.WHITEBOARD_ANNOTATION_UPDATE, updateObj);
     }
 
     ///////白板数据的封包和解包/////////////////////////////////////////
-    packPdu(_param,_itemIdx){
-        /* required uint32 type= 1;//白板类型
-         required uint32 id= 2;//id 每一次绘制的唯一标识
-         required uint32 initiator=3; //绘制来自谁
-         optional string pointGroup=4; //坐标点集数组的JSON字符串
-         optional string color= 5  [default = "#000000"]; //颜色
-         optional uint32 thickness= 6 ;//线条粗细
-         optional uint32 radius= 7;//园的半径
-         optional uint32 fontSize= 8;//字体大小
-         optional uint32 fontName= 9;//字体名称
-         optional uint32 text= 10;//文本内容*/
-
+    packPdu(_param, _itemIdx) {
         //验证坐标点集合数组是否合法
-        if(_param.pointGroup==null||_param.pointGroup.length<1){
-            this._emit(MessageTypes.MCU_ERROR,MessageTypes.ERR_APE_INTERFACE_PARAM_WRONG);
+        if (_param.pointGroup == null || _param.pointGroup.length < 1) {
+            this._emit(MessageTypes.MCU_ERROR, MessageTypes.ERR_APE_INTERFACE_PARAM_WRONG);
             return null;
         }
         //判断type类型,根据type设置不同的参数
-        let whiteBoardModelPdu =new pdu['RCWhiteBoardDataModelPdu'];
-        switch (_param.type){
+        let whiteBoardModelPdu = new pdu['RCWhiteBoardDataModelPdu'];
+        switch (_param.type) {
             case TYPE_BIGHT:
                 break;
             case TYPE_LINE:
@@ -347,12 +335,12 @@ class WhiteBoardApe extends Ape {
             case TYPE_RECT:
                 break;
             case TYPE_CIRCLE:
-                whiteBoardModelPdu.radius=parseInt(_param.radius);
+                whiteBoardModelPdu.radius = parseInt(_param.radius);
                 break;
             case TYPE_TEXT:
-                whiteBoardModelPdu.fontSize=parseInt(_param.fontSize);
-                whiteBoardModelPdu.fontName=_param.fontName||null;
-                whiteBoardModelPdu.text=_param.text||null;
+                whiteBoardModelPdu.fontSize = parseInt(_param.fontSize);
+                whiteBoardModelPdu.fontName = _param.fontName || null;
+                whiteBoardModelPdu.text = _param.text || null;
                 break;
             default:
                 //其它类型不做处理
@@ -360,33 +348,34 @@ class WhiteBoardApe extends Ape {
                 break;
         }
         //下面4个是必须的参数
-        whiteBoardModelPdu.type =_param.type;
-        whiteBoardModelPdu.itemIdx =_itemIdx;
-        whiteBoardModelPdu.initiator =GlobalConfig.nodeId;
+        whiteBoardModelPdu.type = _param.type;
+        whiteBoardModelPdu.itemIdx = _itemIdx;
+        whiteBoardModelPdu.initiator = GlobalConfig.nodeId;
 
         /* whiteBoardModelPdu.parentId=_param.parentId||0;
          whiteBoardModelPdu.curPage=_param.curPage||1;*/
 
-        whiteBoardModelPdu.parentId=GlobalConfig.activeDocId;//当前激活的文档id
-        whiteBoardModelPdu.curPageNo=GlobalConfig.activeDocCurPage;//当前激活的文档页码
+        whiteBoardModelPdu.parentId = GlobalConfig.activeDocId;//当前激活的文档id
+        whiteBoardModelPdu.curPageNo = GlobalConfig.activeDocCurPage;//当前激活的文档页码
 
-        whiteBoardModelPdu.pointGroup =EngineUtils.arrayToJsonString(_param.pointGroup);
-        whiteBoardModelPdu.color=_param.color||"#000000";
+        whiteBoardModelPdu.pointGroup = EngineUtils.arrayToJsonString(_param.pointGroup);
+        whiteBoardModelPdu.color = _param.color || "#000000";
 
         return whiteBoardModelPdu;
     }
-    unPackPdu(owner, itemIdx,itemData){
-        try{
+
+    unPackPdu(owner, itemIdx, itemData) {
+        try {
             loger.log("白板收到数据===unPackPdu ");
-            let whiteBoardModelPdu= pdu['RCWhiteBoardDataModelPdu'].decode(itemData);
+            let whiteBoardModelPdu = pdu['RCWhiteBoardDataModelPdu'].decode(itemData);
             //console.log(whiteBoardModelPdu);
             //loger.log(whiteBoardModelPdu);
-            let _pointGroup= EngineUtils.arrayFromJsonString(whiteBoardModelPdu.pointGroup);
-            whiteBoardModelPdu.pointGroup=_pointGroup;
+            let _pointGroup = EngineUtils.arrayFromJsonString(whiteBoardModelPdu.pointGroup);
+            whiteBoardModelPdu.pointGroup = _pointGroup;
             this.annoInfos[itemIdx] = whiteBoardModelPdu;
             return whiteBoardModelPdu;
-        }catch (err){
-            console.log("unPackPdu Pdu解析错误,itemIdx="+itemIdx+"  err:"+err.message);
+        } catch (err) {
+            loger.log("unPackPdu Pdu解析错误,itemIdx=" + itemIdx + "  err:" + err.message);
         }
         return null;
     }
diff --git a/src/mcu.js b/src/mcu.js
index 3c67abe..33c5430 100644
--- a/src/mcu.js
+++ b/src/mcu.js
@@ -46,7 +46,7 @@ class MCU extends Emiter {
   _sendJoinClassRequest(){
     //const classInfo = this.classInfo;
     loger.log('MCU-发送加入课堂请求.');
-    console.log(this.classInfo);
+    loger.log(this.classInfo);
     var descriptorPdu = new pdu['RCConferenceDescriptorPdu'];
     descriptorPdu.id = this.classInfo.classId;
     descriptorPdu.name = this.classInfo.className||"";
@@ -132,7 +132,7 @@ class MCU extends Emiter {
    // let _mcuConfDesc=new pdu['RCConferenceDescriptorPdu'].decode(mcuConfDesc);
     loger.log('_updateMCUConfInfoDescription.');
     //let classDescription=new pdu['RCConferenceDescriptorPdu'].decode(_data);
-    console.log(_data);
+    loger.log(_data);
     //let info = this.mcuClassInfo.info;
     //info._conference_name = ArrayBufferUtil.uint8ArrayToStr(mcuConfDesc.name, 0);
     //info._capacity = mcuConfDesc.capacity;
@@ -170,7 +170,7 @@ class MCU extends Emiter {
   // 主动建立MCU连接
   joinMCU(_classInfo) {
     loger.log('开始建立EverSocket通道.');
-    console.log(_classInfo);
+    loger.log(_classInfo);
     _classInfo.classId = parseInt(_classInfo.classId); // classId 必须整形
     this.classInfo = _classInfo;
     // 创建刷新nodeId