diff --git a/src/EngineEntrance.js b/src/EngineEntrance.js
index d724b08..7aca902 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.38.11.20171214";
+    GlobalConfig.sdkVersion = "v2.38.13.20171216";
     loger.warn("sdkVersion:" + GlobalConfig.sdkVersion);
     console.log("sdkVersion:" + GlobalConfig.sdkVersion);
     //设置
diff --git a/src/RecordInfoMatch.js b/src/RecordInfoMatch.js
index d7a0bbc..1deaf6a 100644
--- a/src/RecordInfoMatch.js
+++ b/src/RecordInfoMatch.js
@@ -250,7 +250,9 @@ class RecordInfoMatch extends Emiter {
     console.log("_recordMessages", _recordMessages);
     console.log("_m3u8jsonDataList", _m3u8jsonDataList);
     console.log("最终匹配完成的数量为->" + Object.keys(this.matchStreams).length);
-    console.error("没有录制文件的用户", this.unMatchUid);
+    if(Object.keys(this.unMatchUid).length>0){
+      console.error("没有录制文件的用户", this.unMatchUid);
+    }
     this._emit(RecordInfoMatch.RECORD_INFO_MATCH_COMPLETE, this.matchStreams);
   }
 
@@ -274,9 +276,12 @@ class RecordInfoMatch extends Emiter {
 
       if (uidRecordInfoArr.length == uidRecordFileArr.length && uidRecordFileArr.length > 0) {
         //1.如果文件数量和消息数量相等,直接关联即可
-        console.log(k + "->数量相同->直接匹配", uidRecordInfoArr.length);
+        console.log(k + "->数量相同->直接匹配->数量:", uidRecordInfoArr.length);
         for (let h = 0; h < uidRecordInfoArr.length; h++) {
           let item = uidRecordInfoArr[h];
+          let interval=this.utcdateToTimestamp(uidRecordFileArr[h].creatTimeUTC)-this.utcdateToTimestamp(item.creatTimeUTC);
+          interval=parseInt(interval/1000);
+          console.log("数量相同->直接匹配->间隔->视频文件时间-视频消息时间=",interval);
           item.video_url = uidRecordFileArr[h].video_url;
           this.matchStreams[item.stream_id] = item;
         }
@@ -319,11 +324,20 @@ class RecordInfoMatch extends Emiter {
           console.log(k + "->数量不同  消息数量:" + uidRecordInfoArr.length, "视频数量:" + uidRecordFileArr.length);
           //按消息的数量大于视频数量处理
           let lastVideoFileItem;//记录最后一个
+          let messageAndFileInterval=0;//默认为录制消息和录制视频生成的时间戳差距为0,实际情况为视频生成的时间戳要晚于消息的时间戳
           for (let s = 0; s < uidRecordInfoArr.length; s++) {
+            console.log("开始查找->",s,uidRecordInfoArr);
             if(s==0){
               let infoItem = uidRecordInfoArr[s];
               let videoFileItem = uidRecordFileArr[s];
               infoItem.video_url = videoFileItem.video_url;
+              let interval=this.utcdateToTimestamp(videoFileItem.creatTimeUTC)-this.utcdateToTimestamp(infoItem.creatTimeUTC);
+              interval=parseInt(interval/1000);
+              //第一个视频消息和第一个生成的视频文件时间不能超过40秒,超过30秒就是没有生成视频文件
+              if(Math.abs(interval)<40){
+                messageAndFileInterval=interval;//记录第一个视频文件和消息的间隔,后面的文件都需要减去这个间隔
+              }
+              console.log("数量不同->间隔->视频文件时间-视频消息时间=",interval);
               //如果之前没有匹配到才设置
               if (!this.matchStreams[infoItem.stream_id]) {
                 this.matchStreams[infoItem.stream_id] = infoItem;
@@ -331,11 +345,10 @@ class RecordInfoMatch extends Emiter {
             }else {
               let infoItem = JSON.stringify(uidRecordInfoArr[s]);
               infoItem=JSON.parse(infoItem);
-              console.log("查找->",s,uidRecordInfoArr);
               let videoFileItem=this.getNearestTimeData(infoItem.creatTimeUTC,uidRecordFileArr);
               if(videoFileItem){
                 infoItem.video_url = videoFileItem.video_url;
-                infoItem.seek=videoFileItem.seek;
+                infoItem.seek=parseInt(videoFileItem.seek+messageAndFileInterval);//减去视频和录制消息生成的间隔
                 //如果之前没有匹配到才设置
                 if (!this.matchStreams[infoItem.stream_id]) {
                   this.matchStreams[infoItem.stream_id] = infoItem;
@@ -371,9 +384,86 @@ class RecordInfoMatch extends Emiter {
   * 根据时间获取间隔最短的的数据
   * */
   getNearestTimeData(time,videoArr){
-      let _time=parseInt(time);
-      let _nearstTimeDistance=100000;//默认设置为一个超长的值
-      let nearstTimeItem=null;
+    let _time=parseInt(time);
+    let _nearstTimeDistance=100000;//默认设置为一个超长的值
+    let nearstTimeItem=null;
+    for(let k=0;k<videoArr.length;k++){
+      //计算最近时间
+      let interval=this.utcdateToTimestamp(_time)-this.utcdateToTimestamp(videoArr[k].creatTimeUTC);
+      interval=parseInt(interval/1000);
+      console.log("getNearestTimeData-视频消息和视频文件时间差->",interval);
+      if(interval>-12&&interval<_nearstTimeDistance){
+        //记录时间点最接近
+        nearstTimeItem=videoArr[k];
+        //nearstTimeItem.seek=interval;
+        _nearstTimeDistance=Math.abs(interval);
+      }
+    }
+
+    let itemJson="";
+    if(nearstTimeItem){
+      itemJson=JSON.stringify(nearstTimeItem);
+      let finelItem=JSON.parse(itemJson);
+      finelItem.seek=parseInt((this.utcdateToTimestamp(_time)-this.utcdateToTimestamp(finelItem.creatTimeUTC))/1000);
+      console.log("nearstTimeItem->",finelItem);
+      return finelItem;
+    }
+    console.log("nearstTimeItem->没有找到数据");
+    return null
+  }
+
+  /*
+  *
+  * utc时间转换为时间戳
+  * */
+  utcdateToTimestamp (_d) {
+    _d=""+_d;//转换为字符串
+    if(!_d||_d.length!=14){
+      console.error("时间长度不正确->必须是->YYMMDDhhmmss",_d);
+      return 0;
+    }
+    let year = parseInt(_d.substr(0, 4));
+    let month = parseInt(_d.substr(4, 2));
+    let date = parseInt(_d.substr(6, 2));
+    let hour = parseInt(_d.substr(8, 2));
+    let minute = parseInt(_d.substr(10, 2));
+    let second = parseInt(_d.substr(12, 2));
+    //console.log(_d,"->",year,month,date,hour,minute,second);
+    let timestamp=new Date(year,(month-1),date,hour,minute,second).getTime();
+    return timestamp;
+  }
+  //getNearestTimeData(time,videoArr){
+  //    let _time=parseInt(time);
+  //    let _nearstTimeDistance=100000;//默认设置为一个超长的值
+  //    let nearstTimeItem=null;
+  //  for(let k=0;k<videoArr.length;k++){
+  //    //计算最近时间
+  //    let interval=parseInt(parseInt(_time)-parseInt(videoArr[k].creatTime))/1000;
+  //    console.log("getNearestTimeData",interval,_time,k,videoArr[k].creatTime);
+  //    if(interval>-12&&interval<_nearstTimeDistance){
+  //      //记录时间点最接近
+  //      nearstTimeItem=videoArr[k];
+  //      nearstTimeItem.seek=interval;
+  //      _nearstTimeDistance=Math.abs(interval);
+  //    }
+  //  }
+  //
+  //  let itemJson="";
+  //  if(nearstTimeItem){
+  //    itemJson=JSON.stringify(nearstTimeItem);
+  //    let finelItem=JSON.parse(itemJson);
+  //    finelItem.seek=parseInt(parseInt(_time)-parseInt(videoArr[k].creatTime))/1000;
+  //    console.log("nearstTimeItem->",finelItem);
+  //    return finelItem;
+  //  }
+  //  console.log("nearstTimeItem->没有找到数据");
+  //  return null
+  //}
+
+  /*getNearestTimeData(time,_creatTime,videoArr){
+    let _time=parseInt(time);
+    let _nearstTimeDistance=100000;//默认设置为一个超长的值
+    let nearstTimeItem=null;
     for(let k=0;k<videoArr.length;k++){
       //计算最近时间
       let interval=_time-parseInt(videoArr[k].creatTimeUTC);
@@ -396,7 +486,7 @@ class RecordInfoMatch extends Emiter {
     }
     console.log("nearstTimeItem->没有找到数据");
     return null
-  }
+  }*/
 
   timestampToUTCTime(_timestamp) {
     let date = new Date(_timestamp - 8 * 60 * 60 * 1000);//GMT 转UTC 减8
diff --git a/src/RecordPlayBackParse.js b/src/RecordPlayBackParse.js
index 24c7c4c..25fd582 100644
--- a/src/RecordPlayBackParse.js
+++ b/src/RecordPlayBackParse.js
@@ -141,6 +141,7 @@ class RecordPlayBackParse extends Emiter {
 
   //解析和储存,录制回放EverSocket底层消息处理  data-数据;timestamp-数据对应的时间戳
   _parseSaveSocketMsgReceivedHandler(data, timestamp) {
+    //console.log("脚本消息时间",timestamp);
     let pduMsg = pdu.decode_pdu(data);
     let pduType = pduMsg.get("type");
     let pduData = pduMsg.get("data");
@@ -739,10 +740,37 @@ class RecordPlayBackParse extends Emiter {
     }
     console.log("TX MediaModule.streams", MediaModule.streams);
   }
-
   //解析录制的rec数据
   parseArrayBuf() {
-    //this._messages = {};
+    let lowTimestamp = 0;
+    let isLowTime = false;
+
+  /*  let byteLength = parseBuffer.offset;
+    parseBuffer.byteOffset = 0;
+    var position = 0;
+    while (position < byteLength) {
+      let timestamp = parseBuffer.readUInt32(position);
+      position += 4;//4字节
+      let byteLen = parseBuffer.readUInt32(position);
+      position += 4;//4字节
+      let byteData = parseBuffer.buffer.slice(position, (position + byteLen));
+      position += byteLen;
+
+      if (timestamp < this._recordPlaybackMaxTime) {
+        if (isLowTime == false) {
+          lowTimestamp = timestamp;
+          this._recordPlaybackMaxTime += 10;
+        }
+        isLowTime = true;
+        timestamp = this._recordPlaybackMaxTime + (timestamp - lowTimestamp)
+      } else {
+        isLowTime = false;
+      }
+      this._recordPlaybackMaxTime = Math.max(this._recordPlaybackMaxTime, timestamp);
+      //按时间戳解保存数据
+      this._parseSaveSocketMsgReceivedHandler(byteData, timestamp);
+    }*/
+
     let byteLength = parseBuffer.offset;
     parseBuffer.byteOffset = 0;
     var position = 0;
@@ -755,7 +783,7 @@ class RecordPlayBackParse extends Emiter {
       position += byteLen;
 
       if(this._recordPlaybackMaxTime>timestamp){
-        loger.warn("脚本录制文件中的数据时间戳重叠了!!!!",this._recordPlaybackMaxTime,timestamp,"相差:"+this._recordPlaybackMaxTime-timestamp);
+        loger.warn("脚本录制文件中的数据时间戳重叠了!!!!",this._recordPlaybackMaxTime,timestamp);
         if( this.lastParseTime==0){
           this.lastParseTime=this._recordPlaybackMaxTime;
           this.lastParseTimeDistance=(this._recordPlaybackMaxTime-timestamp)*2;
@@ -764,10 +792,10 @@ class RecordPlayBackParse extends Emiter {
       }
       //记录最后一个数据的时间戳作为整个录制回放的总时间戳
       this._recordPlaybackMaxTime = Math.max(this._recordPlaybackMaxTime,timestamp);
-
       //按时间戳解保存数据
       this._parseSaveSocketMsgReceivedHandler(byteData, timestamp);
     }
+
     this._recordPlaybackTimestamp = 0;
     this._isReady = true;
     this._stopTimerCounter();
diff --git a/src/apes/VideoApe.js b/src/apes/VideoApe.js
index cd00c66..d6004e9 100644
--- a/src/apes/VideoApe.js
+++ b/src/apes/VideoApe.js
@@ -716,7 +716,7 @@ class VideoApe extends Ape {
         }
         if (replay.code == 0) {
           receiveChannelInfo.replay = replay.playUrl;
-          receiveChannelInfo.seek=receiveChannelInfo.seek+replay.seek;
+          receiveChannelInfo.seek=parseInt(parseInt(receiveChannelInfo.seek)+parseInt(replay.seek));
         }
 
         if (unpackChannelInfo.mediaType != ApeConsts.MEDIA_TYPE_SHARE&&