修改录制文件和录制消息匹配规则,录制消息的来源来自MCU录制的rec文件,不再从nodeJs获取,有些数据丢失;更换了录制回放的文件地址
正在显示
3 个修改的文件
包含
66 行增加
和
13 行删除
| @@ -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) { |
-
请 注册 或 登录 后发表评论