李勇

修改录制文件和录制消息匹配规则,录制消息的来源来自MCU录制的rec文件,不再从nodeJs获取,有些数据丢失;更换了录制回放的文件地址

@@ -63,7 +63,7 @@ export default class MessageEntrance extends Emiter { @@ -63,7 +63,7 @@ export default class MessageEntrance extends Emiter {
63 super(); 63 super();
64 this.lastClassActiveTime=0;//最后一次课堂激活的时间戳 64 this.lastClassActiveTime=0;//最后一次课堂激活的时间戳
65 //sdk 信息 65 //sdk 信息
66 - GlobalConfig.sdkVersion = "v2.29.5.20171114"; 66 + GlobalConfig.sdkVersion = "v2.30.2.20171117";
67 loger.warn("sdkVersion:" + GlobalConfig.sdkVersion); 67 loger.warn("sdkVersion:" + GlobalConfig.sdkVersion);
68 console.log("sdkVersion:" + GlobalConfig.sdkVersion); 68 console.log("sdkVersion:" + GlobalConfig.sdkVersion);
69 //设置 69 //设置
@@ -10,7 +10,7 @@ import EngineUtils from 'EngineUtils'; @@ -10,7 +10,7 @@ import EngineUtils from 'EngineUtils';
10 10
11 11
12 // 日志对象 12 // 日志对象
13 -const loger = Loger.getLoger('RecordInfoParse'); 13 +const loger = Loger.getLoger('RecordInfoMatch');
14 class RecordInfoMatch extends Emiter { 14 class RecordInfoMatch extends Emiter {
15 constructor() { 15 constructor() {
16 super(); 16 super();
@@ -24,10 +24,18 @@ class RecordInfoMatch extends Emiter { @@ -24,10 +24,18 @@ class RecordInfoMatch extends Emiter {
24 this.unMatchUid = {};//没有匹配到的uid 24 this.unMatchUid = {};//没有匹配到的uid
25 } 25 }
26 26
27 - start() {  
28 - let serverIp = GlobalConfig.recordFileSever || "123.56.73.119:8080"; 27 + start(_recordMessagesList) {
  28 + this.recordMessagesList=_recordMessagesList;
  29 + let serverIp = GlobalConfig.recordFileSever || "playbak.xuedianyun.com:8080";
29 this.filePath = `${GlobalConfig.locationProtocol + serverIp}`; 30 this.filePath = `${GlobalConfig.locationProtocol + serverIp}`;
30 - this.getRecordInfo(()=> { 31 +
  32 + if(GlobalConfig.locationProtocol=="https://"){
  33 + this.filePath=this.filePath.replace(":8080","");
  34 + }
  35 +
  36 + //this.getRecordInfo(()=> {
  37 + this.parseRecordMessage(_recordMessagesList,()=> {
  38 + console.log("JSON数据列表",this.jsonPathList);
31 let requestLen = Object.keys(this.jsonPathList).length; 39 let requestLen = Object.keys(this.jsonPathList).length;
32 let currentLen = 0; 40 let currentLen = 0;
33 let fileNameArr; 41 let fileNameArr;
@@ -53,7 +61,7 @@ class RecordInfoMatch extends Emiter { @@ -53,7 +61,7 @@ class RecordInfoMatch extends Emiter {
53 } 61 }
54 //筛除一些重复流地址,会出现多录制的情况,保留一个即可 62 //筛除一些重复流地址,会出现多录制的情况,保留一个即可
55 this.m3u8jsonDataList[fileNameArr[0]][stream] = { 63 this.m3u8jsonDataList[fileNameArr[0]][stream] = {
56 - video_url: this.filePath + "/" + i + "/" + k + "/" + j, 64 + video_url: this.filePath + "/samples/" + i + "/" + k + "/" + j,
57 creatDate: i, 65 creatDate: i,
58 folder: k, 66 folder: k,
59 stream: j, 67 stream: j,
@@ -102,7 +110,8 @@ class RecordInfoMatch extends Emiter { @@ -102,7 +110,8 @@ class RecordInfoMatch extends Emiter {
102 }) 110 })
103 .then(ret => { 111 .then(ret => {
104 loger.log('AG-获取媒体录制信息-完成'); 112 loger.log('AG-获取媒体录制信息-完成');
105 - for (let i = 0; i < ret.returnData.data.length; i++) { 113 + this.parseRecordMessage(ret.returnData.data,_callback);
  114 + /* for (let i = 0; i < ret.returnData.data.length; i++) {
106 let item = ret.returnData.data[i]; 115 let item = ret.returnData.data[i];
107 if (item.status == 1) { 116 if (item.status == 1) {
108 this.streamInfoLen++; 117 this.streamInfoLen++;
@@ -126,7 +135,7 @@ class RecordInfoMatch extends Emiter { @@ -126,7 +135,7 @@ class RecordInfoMatch extends Emiter {
126 } 135 }
127 if (_callback) { 136 if (_callback) {
128 _callback(); 137 _callback();
129 - } 138 + }*/
130 }) 139 })
131 .catch(err => { 140 .catch(err => {
132 loger.error(`AG-获取媒体录制信息-异常.状态码:${err}`); 141 loger.error(`AG-获取媒体录制信息-异常.状态码:${err}`);
@@ -136,6 +145,38 @@ class RecordInfoMatch extends Emiter { @@ -136,6 +145,38 @@ class RecordInfoMatch extends Emiter {
136 }); 145 });
137 } 146 }
138 147
  148 + parseRecordMessage(_data,_callback){
  149 + if(!_data||_data.length<1){
  150 + console.log("录制消息数据无效",_data)
  151 + return;
  152 + }
  153 + for (let i = 0; i <_data.length; i++) {
  154 + let item =_data[i];
  155 + if (item.status == 1) {
  156 + this.streamInfoLen++;
  157 + //console.log(JSON.stringify(item));
  158 + delete item.appId;
  159 + delete item.id;
  160 + let time = parseInt(item.createTime);
  161 + let timeInfo = this.timestampToUTCTime(time);
  162 + //return {yymmddhhmmss:yymmddhhmmss,yymmdd:yymmdd}
  163 + item.seek = 0;
  164 + item.createTimeUTC = timeInfo.yymmddhhmmss;
  165 + item.creatDate = timeInfo.yymmdd;
  166 + this.jsonPathList [timeInfo.yymmdd] = this.filePath + "/samples/" + timeInfo.yymmdd + "/json/" + item.channel + ".json";
  167 + item.stream_id = item.channel + "_" + item.userId + "_" + item.timestamp;
  168 +
  169 + if (!this.recordMessages[item.uid]) {
  170 + this.recordMessages[item.uid] = {};
  171 + }
  172 + this.recordMessages[item.uid][item.timestamp] = item;
  173 + }
  174 + }
  175 + if (_callback) {
  176 + _callback();
  177 + }
  178 + }
  179 +
139 getRecordFileJSON(path, _callback) { 180 getRecordFileJSON(path, _callback) {
140 let url = path + "?t=" + new Date().getTime(); 181 let url = path + "?t=" + new Date().getTime();
141 /* $.ajax( 182 /* $.ajax(
@@ -39,6 +39,7 @@ class RecordPlayBackParse extends Emiter { @@ -39,6 +39,7 @@ class RecordPlayBackParse extends Emiter {
39 this.isgetRecordFileURLFromAgo = false;//是否已经加载AGO的录制文件地址数据 39 this.isgetRecordFileURLFromAgo = false;//是否已经加载AGO的录制文件地址数据
40 40
41 this._apes = {}; 41 this._apes = {};
  42 + this.videoPublishMessages=[];//记录推流控制的消息
42 this._videoApeBroadcastMssages = {};//视频模块的广播消息 43 this._videoApeBroadcastMssages = {};//视频模块的广播消息
43 this.mediaChannleList = {}; 44 this.mediaChannleList = {};
44 this._conferApeMssages = {};//会议数据 45 this._conferApeMssages = {};//会议数据
@@ -229,8 +230,9 @@ class RecordPlayBackParse extends Emiter { @@ -229,8 +230,9 @@ class RecordPlayBackParse extends Emiter {
229 } 230 }
230 } 231 }
231 console.warn("最终匹配完成的视频流数据", MediaModule.streams); 232 console.warn("最终匹配完成的视频流数据", MediaModule.streams);
232 - //解析课堂录制的rec文件  
233 - this.parseArrayBuf(); 233 + this._emit(RecordPlayBackParse.CLASS_JOIN_RECORD_PLAYBACK_SUCCESS, {"recordPlaybackMaxTime": this._recordPlaybackMaxTime});
  234 + ////解析课堂录制的rec文件
  235 + //this.parseArrayBuf();
234 } 236 }
235 237
236 //保存各个模块的MCU原始数据 238 //保存各个模块的MCU原始数据
@@ -353,8 +355,9 @@ class RecordPlayBackParse extends Emiter { @@ -353,8 +355,9 @@ class RecordPlayBackParse extends Emiter {
353 } 355 }
354 })*/ 356 })*/
355 this.getMediaRecrodInfoFromTx(()=> { 357 this.getMediaRecrodInfoFromTx(()=> {
356 - //AGO启动录制消息和文件匹配  
357 - this.recordInfoMatch.start(); 358 + /*//AGO启动录制消息和文件匹配
  359 + this.recordInfoMatch.start();*/
  360 + this.parseArrayBuf();
358 }); 361 });
359 362
360 } 363 }
@@ -771,7 +774,12 @@ class RecordPlayBackParse extends Emiter { @@ -771,7 +774,12 @@ class RecordPlayBackParse extends Emiter {
771 console.log('聊天数据', this._chatApeMssages); 774 console.log('聊天数据', this._chatApeMssages);
772 console.log('视频模块广播消息', this._videoApeBroadcastMssages); 775 console.log('视频模块广播消息', this._videoApeBroadcastMssages);
773 loger.log("录制回放数据解析完成,录制回放的总时间长为->", this._recordPlaybackMaxTime, "recordTimestamp:" + GlobalConfig.recordTimestamp); 776 loger.log("录制回放数据解析完成,录制回放的总时间长为->", this._recordPlaybackMaxTime, "recordTimestamp:" + GlobalConfig.recordTimestamp);
774 - this._emit(RecordPlayBackParse.CLASS_JOIN_RECORD_PLAYBACK_SUCCESS, {"recordPlaybackMaxTime": this._recordPlaybackMaxTime}); 777 + console.log('videoPublishMessages', this.videoPublishMessages);
  778 +
  779 + //AGO启动录制消息和文件匹配
  780 + this.recordInfoMatch.start(this.videoPublishMessages);
  781 +
  782 + //this._emit(RecordPlayBackParse.CLASS_JOIN_RECORD_PLAYBACK_SUCCESS, {"recordPlaybackMaxTime": this._recordPlaybackMaxTime});
775 } 783 }
776 784
777 //根据时间查找数据 785 //根据时间查找数据
@@ -1078,6 +1086,10 @@ class RecordPlayBackParse extends Emiter { @@ -1078,6 +1086,10 @@ class RecordPlayBackParse extends Emiter {
1078 timestamp: timestamp 1086 timestamp: timestamp
1079 }; 1087 };
1080 //this._videoApeBroadcastMssages[timestamp]={parseData:videoReceivePdu,byteData:data,timestamp: timestamp}; 1088 //this._videoApeBroadcastMssages[timestamp]={parseData:videoReceivePdu,byteData:data,timestamp: timestamp};
  1089 + if(videoReceivePdu&&videoReceivePdu.data){
  1090 + videoReceivePdu.data.createTime=videoReceivePdu.data.timestamp;
  1091 + }
  1092 + this.videoPublishMessages.push(videoReceivePdu.data);
1081 } 1093 }
1082 1094
1083 } catch (err) { 1095 } catch (err) {