正在显示
3 个修改的文件
包含
373 行增加
和
2 行删除
| @@ -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.28.1.20171110"; | 66 | + GlobalConfig.sdkVersion = "v2.28.2.20171111"; |
| 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 | //设置 |
| @@ -594,6 +594,7 @@ export default class MessageEntrance extends Emiter { | @@ -594,6 +594,7 @@ export default class MessageEntrance extends Emiter { | ||
| 594 | GlobalConfig.portal = GlobalConfig.replacePort(GlobalConfig.portal, ":80", ""); | 594 | GlobalConfig.portal = GlobalConfig.replacePort(GlobalConfig.portal, ":80", ""); |
| 595 | } | 595 | } |
| 596 | 596 | ||
| 597 | + GlobalConfig.paramUserId= _param.userId || "0"; | ||
| 597 | GlobalConfig.userId = "" + _param.userId || "0"; | 598 | GlobalConfig.userId = "" + _param.userId || "0"; |
| 598 | //H5处理 | 599 | //H5处理 |
| 599 | GlobalConfig.isH5 = _param.isH5 || false;//外部传入的参数,是否是H5 | 600 | GlobalConfig.isH5 = _param.isH5 || false;//外部传入的参数,是否是H5 |
| @@ -672,7 +673,8 @@ export default class MessageEntrance extends Emiter { | @@ -672,7 +673,8 @@ export default class MessageEntrance extends Emiter { | ||
| 672 | GlobalConfig.hasMicrophone = (typeof _param.hasMicrophone == "boolean") ? _param.hasMicrophone : false; | 673 | GlobalConfig.hasMicrophone = (typeof _param.hasMicrophone == "boolean") ? _param.hasMicrophone : false; |
| 673 | 674 | ||
| 674 | //loger.log("autoLoginMd5", GlobalConfig.classId, GlobalConfig.userId, GlobalConfig.userRole); | 675 | //loger.log("autoLoginMd5", GlobalConfig.classId, GlobalConfig.userId, GlobalConfig.userRole); |
| 675 | - let autoLoginMd5 = MD5("" + GlobalConfig.classId + GlobalConfig.userId + GlobalConfig.userRole); | 676 | + let autoLoginMd5 = MD5("" + GlobalConfig.classId + GlobalConfig.paramUserId + GlobalConfig.userRole); |
| 677 | + //let autoLoginMd5 = MD5("" + GlobalConfig.classId + GlobalConfig.userId + GlobalConfig.userRole); | ||
| 676 | //loger.log("joinClass-GlobalConfig.autoLogin", GlobalConfig.autoLogin, "autoLoginMd5-", autoLoginMd5); | 678 | //loger.log("joinClass-GlobalConfig.autoLogin", GlobalConfig.autoLogin, "autoLoginMd5-", autoLoginMd5); |
| 677 | if (GlobalConfig.autoLogin && autoLoginMd5 == GlobalConfig.autoLogin || GlobalConfig.isInvisible) { | 679 | if (GlobalConfig.autoLogin && autoLoginMd5 == GlobalConfig.autoLogin || GlobalConfig.isInvisible) { |
| 678 | // MD5(classId+userId+userRole)==m | 680 | // MD5(classId+userId+userRole)==m |
| @@ -545,6 +545,7 @@ GlobalConfig.returnCitySN = null;//获取的ip数据 {"cip":"60.253.214.122","c | @@ -545,6 +545,7 @@ GlobalConfig.returnCitySN = null;//获取的ip数据 {"cip":"60.253.214.122","c | ||
| 545 | GlobalConfig.deviceType = 0; //设备类型 0:电脑 1:ios 2:安卓 | 545 | GlobalConfig.deviceType = 0; //设备类型 0:电脑 1:ios 2:安卓 |
| 546 | GlobalConfig.userIp = ""; //用户当前IP | 546 | GlobalConfig.userIp = ""; //用户当前IP |
| 547 | GlobalConfig.userId = 0; | 547 | GlobalConfig.userId = 0; |
| 548 | +GlobalConfig.paramUserId=0; | ||
| 548 | GlobalConfig.userName = ""; | 549 | GlobalConfig.userName = ""; |
| 549 | GlobalConfig.handUpTime = 0; | 550 | GlobalConfig.handUpTime = 0; |
| 550 | GlobalConfig.level = 0; | 551 | GlobalConfig.level = 0; |
src/RecordInfoMatch.js
0 → 100644
| 1 | +import Emiter from 'Emiter'; | ||
| 2 | +import MessageTypes from 'MessageTypes'; | ||
| 3 | +import Loger from 'Loger'; | ||
| 4 | + | ||
| 5 | +import MediaModule from "apes/MediaModule"; | ||
| 6 | + | ||
| 7 | +import Base64 from 'base64-js'; | ||
| 8 | +import GlobalConfig from 'GlobalConfig'; | ||
| 9 | +import EngineUtils from 'EngineUtils'; | ||
| 10 | + | ||
| 11 | + | ||
| 12 | +// 日志对象 | ||
| 13 | +const loger = Loger.getLoger('RecordInfoParse'); | ||
| 14 | +class RecordInfoMatch extends Emiter { | ||
| 15 | + constructor() { | ||
| 16 | + super(); | ||
| 17 | + this.recordMessages = {}; | ||
| 18 | + this.jsonPathList = {}; | ||
| 19 | + this.m3u8jsonDataList = {}; | ||
| 20 | + this.streamInfoLen = 0; | ||
| 21 | + this.filePath = ""; | ||
| 22 | + this.matchStreams = {};//记录匹配完成的数据 | ||
| 23 | + this.unMatchStreams = {};//记录匹配完成的数据 | ||
| 24 | + this.unMatchUid = {};//没有匹配到的uid | ||
| 25 | + } | ||
| 26 | + | ||
| 27 | + start() { | ||
| 28 | + let serverIp = GlobalConfig.recordFileSever || "123.56.73.119:8080"; | ||
| 29 | + this.filePath = `${GlobalConfig.locationProtocol + serverIp}`; | ||
| 30 | + this.getRecordInfo(()=> { | ||
| 31 | + let requestLen = Object.keys(this.jsonPathList).length; | ||
| 32 | + let currentLen = 0; | ||
| 33 | + let fileNameArr; | ||
| 34 | + for (let i in this.jsonPathList) { | ||
| 35 | + this.getRecordFileJSON(this.jsonPathList [i], (data)=> { | ||
| 36 | + currentLen++; | ||
| 37 | + console.log(i, "getRecordFileJSON请求返回", currentLen); | ||
| 38 | + if (data) { | ||
| 39 | + for (let k in data) { | ||
| 40 | + let arr = data[k]; | ||
| 41 | + let indexStr = ".m3u8"; | ||
| 42 | + //"694537045_20171103073546522.m3u8" //522.m3u8是需要截取掉的内容 | ||
| 43 | + for (let j of arr) { | ||
| 44 | + if (j && j.indexOf(indexStr) >= 0) { | ||
| 45 | + //console.log("视频地址:"+i+"/"+k+"/"+j); | ||
| 46 | + fileNameArr = j.split("_"); | ||
| 47 | + if (fileNameArr && fileNameArr.length > 0) { | ||
| 48 | + let stream = fileNameArr[1]; | ||
| 49 | + //20171106102811807 -->20171106102811 | ||
| 50 | + stream = stream.substr(0, 14); | ||
| 51 | + if (!this.m3u8jsonDataList[fileNameArr[0]]) { | ||
| 52 | + this.m3u8jsonDataList[fileNameArr[0]] = {} | ||
| 53 | + } | ||
| 54 | + //筛除一些重复流地址,会出现多录制的情况,保留一个即可 | ||
| 55 | + this.m3u8jsonDataList[fileNameArr[0]][stream] = { | ||
| 56 | + video_url: this.filePath + "/" + i + "/" + k + "/" + j, | ||
| 57 | + creatDate: i, | ||
| 58 | + folder: k, | ||
| 59 | + stream: j, | ||
| 60 | + createTimeUTC: stream | ||
| 61 | + }; | ||
| 62 | + } | ||
| 63 | + | ||
| 64 | + } | ||
| 65 | + } | ||
| 66 | + } | ||
| 67 | + } | ||
| 68 | + if (currentLen >= requestLen) { | ||
| 69 | + console.log("视频数据获取完成", this.m3u8jsonDataList); | ||
| 70 | + this.matchRecordFile(this.recordMessages, this.m3u8jsonDataList); | ||
| 71 | + } | ||
| 72 | + }); | ||
| 73 | + } | ||
| 74 | + }); | ||
| 75 | + } | ||
| 76 | + | ||
| 77 | + getRecordInfo(_callback) { | ||
| 78 | + //获取课堂录制信息 get localhost:3000/recordInfo/getRecordInfo/7d72365eb9834353397e3e3f9d460bdda | ||
| 79 | + //localhost:3000/recordInfo/getRecordInfo/ 后面直接添加课堂号 channel | ||
| 80 | + if (!GlobalConfig.getRecordInfoInterfaces) { | ||
| 81 | + loger.log("AG-获取媒体录制信息->失败->接口地址无效"); | ||
| 82 | + if (_callback) { | ||
| 83 | + _callback(); | ||
| 84 | + } | ||
| 85 | + return; | ||
| 86 | + } | ||
| 87 | + let url = `${GlobalConfig.locationProtocol + GlobalConfig.getRecordInfoInterfaces}/${GlobalConfig.channelId}`; | ||
| 88 | + loger.log('AG-获取媒体录制信息.', url); | ||
| 89 | + fetch(url, { | ||
| 90 | + timeout: 15000 | ||
| 91 | + }) | ||
| 92 | + .then(ret => { | ||
| 93 | + if (ret.ok) { | ||
| 94 | + return ret.json(); | ||
| 95 | + } else { | ||
| 96 | + loger.error(`AG-获取媒体录制信息-网络异常.状态码:${ret}`); | ||
| 97 | + if (_callback) { | ||
| 98 | + _callback(); | ||
| 99 | + } | ||
| 100 | + throw ''; | ||
| 101 | + } | ||
| 102 | + }) | ||
| 103 | + .then(ret => { | ||
| 104 | + loger.log('AG-获取媒体录制信息-完成'); | ||
| 105 | + for (let i = 0; i < ret.returnData.data.length; i++) { | ||
| 106 | + let item = ret.returnData.data[i]; | ||
| 107 | + if (item.status == 1) { | ||
| 108 | + this.streamInfoLen++; | ||
| 109 | + //console.log(JSON.stringify(item)); | ||
| 110 | + delete item.appId; | ||
| 111 | + delete item.id; | ||
| 112 | + let time = parseInt(item.createTime); | ||
| 113 | + let timeInfo = this.timestampToUTCTime(time); | ||
| 114 | + //return {yymmddhhmmss:yymmddhhmmss,yymmdd:yymmdd} | ||
| 115 | + item.seek = 0; | ||
| 116 | + item.createTimeUTC = timeInfo.yymmddhhmmss; | ||
| 117 | + item.creatDate = timeInfo.yymmdd; | ||
| 118 | + this.jsonPathList [timeInfo.yymmdd] = this.filePath + "/" + timeInfo.yymmdd + "/json/" + item.channel + ".json"; | ||
| 119 | + item.stream_id = item.channel + "_" + item.userId + "_" + item.timestamp; | ||
| 120 | + | ||
| 121 | + if (!this.recordMessages[item.uid]) { | ||
| 122 | + this.recordMessages[item.uid] = {}; | ||
| 123 | + } | ||
| 124 | + this.recordMessages[item.uid][item.timestamp] = item; | ||
| 125 | + } | ||
| 126 | + } | ||
| 127 | + if (_callback) { | ||
| 128 | + _callback(); | ||
| 129 | + } | ||
| 130 | + }) | ||
| 131 | + .catch(err => { | ||
| 132 | + loger.error(`AG-获取媒体录制信息-异常.状态码:${err}`); | ||
| 133 | + if (_callback) { | ||
| 134 | + _callback(); | ||
| 135 | + } | ||
| 136 | + }); | ||
| 137 | + } | ||
| 138 | + | ||
| 139 | + getRecordFileJSON(path, _callback) { | ||
| 140 | + let url = path + "?t=" + new Date().getTime(); | ||
| 141 | + /* $.ajax( | ||
| 142 | + { | ||
| 143 | + type: "GET", | ||
| 144 | + url: location, | ||
| 145 | + dataType: 'json', | ||
| 146 | + success: function (data) { | ||
| 147 | + console.log("getRecordFileJSON success", data); | ||
| 148 | + if (_callback) { | ||
| 149 | + _callback(data); | ||
| 150 | + } | ||
| 151 | + }, | ||
| 152 | + error: function (data) { | ||
| 153 | + //alert(data.code); | ||
| 154 | + console.log("getRecordFileJSON error", data); | ||
| 155 | + if (_callback) { | ||
| 156 | + _callback(null); | ||
| 157 | + } | ||
| 158 | + } | ||
| 159 | + } | ||
| 160 | + );*/ | ||
| 161 | + fetch(url, { | ||
| 162 | + timeout: 5000, | ||
| 163 | + method: 'GET', | ||
| 164 | + }) | ||
| 165 | + .then(ret => { | ||
| 166 | + if (ret.ok) { | ||
| 167 | + return ret.json(); | ||
| 168 | + } else { | ||
| 169 | + loger.error(`AG-getRecordFileJSON-网络异常.状态码:${ret}`); | ||
| 170 | + if (_callback) { | ||
| 171 | + _callback(); | ||
| 172 | + } | ||
| 173 | + throw ''; | ||
| 174 | + } | ||
| 175 | + }) | ||
| 176 | + .then(ret => { | ||
| 177 | + loger.log('AG-getRecordFileJSON-完成'); | ||
| 178 | + if (_callback) { | ||
| 179 | + _callback(ret); | ||
| 180 | + } | ||
| 181 | + }) | ||
| 182 | + .catch(err => { | ||
| 183 | + loger.error(`AG-getRecordFileJSON-异常.状态码:${err}`); | ||
| 184 | + if (_callback) { | ||
| 185 | + _callback(); | ||
| 186 | + } | ||
| 187 | + }); | ||
| 188 | + } | ||
| 189 | + | ||
| 190 | + matchRecordFile(_messages, _m3u8List) { | ||
| 191 | + let _recordMessages = _messages; | ||
| 192 | + let _m3u8jsonDataList = _m3u8List; | ||
| 193 | + console.log("匹配之前的消息集合", _recordMessages); | ||
| 194 | + console.log("匹配之前的视频地址集合", _m3u8jsonDataList); | ||
| 195 | + let matchStreams = {}; | ||
| 196 | + let uidRecordInfo; | ||
| 197 | + let uidRecordFile; | ||
| 198 | + | ||
| 199 | + for (let k in _recordMessages) { | ||
| 200 | + this.matchForUid(k, _recordMessages[k], _m3u8jsonDataList[k]); | ||
| 201 | + } | ||
| 202 | + | ||
| 203 | + console.log("unMatchUid", this.matchStreams); | ||
| 204 | + console.log("_recordMessages", _recordMessages); | ||
| 205 | + console.log("_m3u8jsonDataList", _m3u8jsonDataList); | ||
| 206 | + console.log("最终匹配完成的数量为->" + Object.keys(this.matchStreams).length, "未匹配成功的数量为->" + (this.streamInfoLen - parseInt(Object.keys(this.matchStreams).length))); | ||
| 207 | + console.log("没有录制文件的用户", this.unMatchUid); | ||
| 208 | + this._emit(RecordInfoMatch.RECORD_INFO_MATCH_COMPLETE, this.matchStreams); | ||
| 209 | + } | ||
| 210 | + | ||
| 211 | + matchForUid(k, _recordMessages, _m3u8jsonDataList) { | ||
| 212 | + let uidRecordInfo = _recordMessages; | ||
| 213 | + let uidRecordFile = _m3u8jsonDataList; | ||
| 214 | + if (!uidRecordFile) { | ||
| 215 | + console.log(k, "没有录制文件"); | ||
| 216 | + this.unMatchUid[k] = uidRecordInfo; | ||
| 217 | + } else { | ||
| 218 | + | ||
| 219 | + let uidRecordInfoArr = Object.values(uidRecordInfo); | ||
| 220 | + let uidRecordFileArr = Object.values(uidRecordFile); | ||
| 221 | + uidRecordInfoArr = uidRecordInfoArr.sort(function (a, b) { | ||
| 222 | + return parseInt(a.createTimeUTC) - parseInt(b.createTimeUTC); | ||
| 223 | + }); | ||
| 224 | + uidRecordFileArr = uidRecordFileArr.sort(function (a, b) { | ||
| 225 | + return parseInt(a.createTimeUTC) - parseInt(b.createTimeUTC); | ||
| 226 | + }); | ||
| 227 | + | ||
| 228 | + if (uidRecordInfoArr.length == uidRecordFileArr.length && uidRecordFileArr.length > 0) { | ||
| 229 | + //1.如果文件数量和消息数量相等,直接关联即可 | ||
| 230 | + console.log(k + "->数量相同->直接匹配", uidRecordInfoArr.length); | ||
| 231 | + for (let h = 0; h < uidRecordInfoArr.length; h++) { | ||
| 232 | + let item = uidRecordInfoArr[h]; | ||
| 233 | + item.video_url = uidRecordFileArr[h].video_url; | ||
| 234 | + this.matchStreams[item.stream_id] = item; | ||
| 235 | + } | ||
| 236 | + | ||
| 237 | + } else { | ||
| 238 | + //2.通过时间戳匹配 | ||
| 239 | + for (let f in uidRecordInfo) { | ||
| 240 | + let time = parseInt(uidRecordInfo[f].createTimeUTC); | ||
| 241 | + let video_url = ""; | ||
| 242 | + let video_urlObj = uidRecordFile[k + "_" + time]; | ||
| 243 | + if (video_urlObj && video_urlObj.video_url) { | ||
| 244 | + video_url = video_urlObj.video_url; | ||
| 245 | + } | ||
| 246 | + //模糊 | ||
| 247 | + if (!video_url) { | ||
| 248 | + video_urlObj = uidRecordFile[k + "_" + (time + 1)]; | ||
| 249 | + if (video_urlObj && video_urlObj.video_url) { | ||
| 250 | + video_url = video_urlObj.video_url; | ||
| 251 | + } | ||
| 252 | + } | ||
| 253 | + if (!video_url) { | ||
| 254 | + video_urlObj = uidRecordFile[k + "_" + (time - 1)]; | ||
| 255 | + if (video_urlObj && video_urlObj.video_url) { | ||
| 256 | + video_url = video_urlObj.video_url; | ||
| 257 | + } | ||
| 258 | + } | ||
| 259 | + | ||
| 260 | + //通过时间戳匹配 结束 | ||
| 261 | + if (video_url) { | ||
| 262 | + let item = uidRecordInfo[f]; | ||
| 263 | + item.video_url = video_url; | ||
| 264 | + this.matchStreams[item.stream_id] = item; | ||
| 265 | + } else { | ||
| 266 | + console.log(k + "_" + time, "按时间戳没有查找到->"); | ||
| 267 | + } | ||
| 268 | + } | ||
| 269 | + | ||
| 270 | + //3.最后一次通过间隔查找 | ||
| 271 | + if (uidRecordInfoArr.length != uidRecordFileArr.length && uidRecordFileArr.length > 0 && uidRecordInfoArr.length > 0) { | ||
| 272 | + console.log(k + "->数量不同 消息数量:" + uidRecordInfoArr.length, "视频数量:" + uidRecordFileArr.length); | ||
| 273 | + //按消息的数量大于视频数量处理 | ||
| 274 | + let lastFileItem;//记录最后一个 | ||
| 275 | + for (let h = 0; h < uidRecordInfoArr.length; h++) { | ||
| 276 | + let infoItem = uidRecordInfoArr[h]; | ||
| 277 | + let fileItem = uidRecordFileArr[h]; | ||
| 278 | + if (fileItem) { | ||
| 279 | + infoItem.video_url = fileItem.video_url; | ||
| 280 | + | ||
| 281 | + //如果之前没有匹配到才设置 | ||
| 282 | + if (!this.matchStreams[infoItem.stream_id]) { | ||
| 283 | + this.matchStreams[infoItem.stream_id] = infoItem; | ||
| 284 | + } | ||
| 285 | + lastFileItem = infoItem;//记录最后一个文件的数据 | ||
| 286 | + } else { | ||
| 287 | + if (lastFileItem) { | ||
| 288 | + infoItem.video_url = lastFileItem.video_url; | ||
| 289 | + infoItem.seek = parseInt(infoItem.createTimeUTC) - parseInt(lastFileItem.createTimeUTC); | ||
| 290 | + if (!this.matchStreams[infoItem.stream_id]) { | ||
| 291 | + this.matchStreams[infoItem.stream_id] = infoItem; | ||
| 292 | + } | ||
| 293 | + } | ||
| 294 | + } | ||
| 295 | + | ||
| 296 | + } | ||
| 297 | + } | ||
| 298 | + | ||
| 299 | + /* | ||
| 300 | + //没有查找到之后,如果两次推流的消息时间过短,只会有一个视频,需要再次匹配 | ||
| 301 | + console.log("uidRecordInfoUnsearch", uidRecordInfoUnsearch, uidRecordInfo); | ||
| 302 | + if (Object.keys(uidRecordInfoUnsearch).length > 0) { | ||
| 303 | + let item; | ||
| 304 | + let item2; | ||
| 305 | + let minInterval = 10000; | ||
| 306 | + let nearItem = null; | ||
| 307 | + for (let s in uidRecordInfoUnsearch) { | ||
| 308 | + item = uidRecordInfoUnsearch[s]; | ||
| 309 | + for (let h in uidRecordInfo) { | ||
| 310 | + item2 = uidRecordInfo[h]; | ||
| 311 | + if (item2 && item2.video_url) { | ||
| 312 | + let interval = parseInt((item.createTime) * 0.001 - parseInt(item2.createTime) * 0.001); | ||
| 313 | + if (minInterval > interval) { | ||
| 314 | + nearItem = item2; | ||
| 315 | + minInterval = interval; | ||
| 316 | + } | ||
| 317 | + minInterval = Math.min(minInterval, interval); | ||
| 318 | + //console.log("两次推流消息的间隔",interval); | ||
| 319 | + } | ||
| 320 | + } | ||
| 321 | + } | ||
| 322 | + if (item && nearItem) { | ||
| 323 | + console.log("查找到最接近的消息", nearItem, "seek", minInterval); | ||
| 324 | + item.video_url = nearItem.video_url; | ||
| 325 | + item.seek = minInterval; | ||
| 326 | + matchStreams[item.stream_id] = item; | ||
| 327 | + } | ||
| 328 | + | ||
| 329 | + }*/ | ||
| 330 | + } | ||
| 331 | + } | ||
| 332 | + | ||
| 333 | + } | ||
| 334 | + | ||
| 335 | + | ||
| 336 | + timestampToUTCTime(_timestamp) { | ||
| 337 | + let date = new Date(_timestamp - 8 * 60 * 60 * 1000);//GMT 转UTC 减8 | ||
| 338 | + let y = "" + date.getFullYear(); | ||
| 339 | + let month = "" + (date.getMonth() + 1); | ||
| 340 | + let d = "" + date.getDate(); | ||
| 341 | + let h = "" + (date.getHours()); | ||
| 342 | + let minutes = "" + date.getMinutes(); | ||
| 343 | + let s = "" + date.getSeconds(); | ||
| 344 | + if (month.length < 2) { | ||
| 345 | + month = "0" + month; | ||
| 346 | + } | ||
| 347 | + if (d.length < 2) { | ||
| 348 | + d = "0" + d; | ||
| 349 | + } | ||
| 350 | + if (h.length < 2) { | ||
| 351 | + h = "0" + h; | ||
| 352 | + } | ||
| 353 | + if (minutes.length < 2) { | ||
| 354 | + minutes = "0" + minutes; | ||
| 355 | + } | ||
| 356 | + if (s.length < 2) { | ||
| 357 | + s = "0" + s; | ||
| 358 | + } | ||
| 359 | + let yymmddhhmmss = "" + y + month + d + h + minutes + s; | ||
| 360 | + let yymmdd = "" + y + month + d; | ||
| 361 | + console.log(_timestamp, yymmdd, yymmddhhmmss, date); | ||
| 362 | + return {yymmddhhmmss: yymmddhhmmss, yymmdd: yymmdd} | ||
| 363 | + } | ||
| 364 | +} | ||
| 365 | + | ||
| 366 | +RecordInfoMatch.prototype.RECORD_INFO_MATCH_COMPLETE = RecordInfoMatch.RECORD_INFO_MATCH_COMPLETE = 'recordInfoMatchComplete';//录制数据匹配完成 | ||
| 367 | +export default new RecordInfoMatch; | ||
| 368 | + |
-
请 注册 或 登录 后发表评论