正在显示
3 个修改的文件
包含
187 行增加
和
70 行删除
| @@ -7,6 +7,7 @@ import Emiter from './Emiter'; | @@ -7,6 +7,7 @@ import Emiter from './Emiter'; | ||
| 7 | import Sass from 'Sass'; | 7 | import Sass from 'Sass'; |
| 8 | import ServerCheck from 'ServerCheck'; | 8 | import ServerCheck from 'ServerCheck'; |
| 9 | import RecordPlayBackParse from 'RecordPlayBackParse'; | 9 | import RecordPlayBackParse from 'RecordPlayBackParse'; |
| 10 | +import MD5 from "md5"; | ||
| 10 | import Mcu from 'mcu'; | 11 | import Mcu from 'mcu'; |
| 11 | import MessageTypes from 'MessageTypes'; | 12 | import MessageTypes from 'MessageTypes'; |
| 12 | import Loger from 'Loger'; | 13 | import Loger from 'Loger'; |
| @@ -329,14 +330,24 @@ export default class MessageEntrance extends Emiter { | @@ -329,14 +330,24 @@ export default class MessageEntrance extends Emiter { | ||
| 329 | if (GlobalConfig.userName == null || GlobalConfig.userName == "") { | 330 | if (GlobalConfig.userName == null || GlobalConfig.userName == "") { |
| 330 | GlobalConfig.userName = _param.userName; | 331 | GlobalConfig.userName = _param.userName; |
| 331 | } | 332 | } |
| 333 | + GlobalConfig.autoLogin=_param.autoLogin||""; | ||
| 332 | GlobalConfig.password = _param.password || ""; | 334 | GlobalConfig.password = _param.password || ""; |
| 333 | GlobalConfig.hasCamera = (typeof _param.hasCamera == "boolean") ? _param.hasCamera : false; | 335 | GlobalConfig.hasCamera = (typeof _param.hasCamera == "boolean") ? _param.hasCamera : false; |
| 334 | GlobalConfig.hasMicrophone = (typeof _param.hasMicrophone == "boolean") ? _param.hasMicrophone : false; | 336 | GlobalConfig.hasMicrophone = (typeof _param.hasMicrophone == "boolean") ? _param.hasMicrophone : false; |
| 335 | 337 | ||
| 336 | - //debugger; | ||
| 337 | - //开始校验 | ||
| 338 | - if (_sass) { | ||
| 339 | - _sass.passwordAndMd5Checking(GlobalConfig.getClassInfo()); | 338 | + loger.log("autoLoginMd5",GlobalConfig.classId,GlobalConfig.userId,GlobalConfig.userRole); |
| 339 | + let autoLoginMd5=MD5(""+GlobalConfig.classId+GlobalConfig.userId+GlobalConfig.userRole); | ||
| 340 | + loger.log("joinClass-GlobalConfig.autoLogin",GlobalConfig.autoLogin,"autoLoginMd5-",autoLoginMd5); | ||
| 341 | + if(GlobalConfig.autoLogin&&autoLoginMd5==GlobalConfig.autoLogin){ | ||
| 342 | + // MD5(classId+userId+userRole)==m | ||
| 343 | + //自动登录,跳过验证流程 | ||
| 344 | + loger.log("自动登录"); | ||
| 345 | + this._sassJoinSuccessHandler(); | ||
| 346 | + }else { | ||
| 347 | + //不能自动登录,开始校验 | ||
| 348 | + if (_sass) { | ||
| 349 | + _sass.passwordAndMd5Checking(GlobalConfig.getClassInfo()); | ||
| 350 | + } | ||
| 340 | } | 351 | } |
| 341 | } | 352 | } |
| 342 | 353 |
| @@ -70,6 +70,7 @@ class GlobalConfig { | @@ -70,6 +70,7 @@ class GlobalConfig { | ||
| 70 | classStatusInfo.classStartTime=this.classStartTime;//课堂点击开始时间 | 70 | classStatusInfo.classStartTime=this.classStartTime;//课堂点击开始时间 |
| 71 | classStatusInfo.classStopTime=this.classStopTime;//最后一次停止的时间(点暂停或结束),每次发送数据都获取当前时间戳 | 71 | classStatusInfo.classStopTime=this.classStopTime;//最后一次停止的时间(点暂停或结束),每次发送数据都获取当前时间戳 |
| 72 | classStatusInfo.classTimestamp=this.classTimestamp;//相对于点开始课堂的时间戳 | 72 | classStatusInfo.classTimestamp=this.classTimestamp;//相对于点开始课堂的时间戳 |
| 73 | + classStatusInfo.recordPlaybackMaxTime=this.recordPlaybackMaxTime;//相对于点开始课堂的时间戳 | ||
| 73 | 74 | ||
| 74 | classStatusInfo.classBeginTime=this.classBeginTime;//课堂创建的时间,这个是Sass返回的 | 75 | classStatusInfo.classBeginTime=this.classBeginTime;//课堂创建的时间,这个是Sass返回的 |
| 75 | classStatusInfo.classEndTime=this.classEndTime;//课堂结束的时间,这个是Sass返回的 | 76 | classStatusInfo.classEndTime=this.classEndTime;//课堂结束的时间,这个是Sass返回的 |
| @@ -297,6 +298,7 @@ GlobalConfig.classBeginTime="";//课堂创建的时间,这个是Sass返回的 | @@ -297,6 +298,7 @@ GlobalConfig.classBeginTime="";//课堂创建的时间,这个是Sass返回的 | ||
| 297 | GlobalConfig.classEndTime="";//课堂结束的时间,这个是Sass返回的 | 298 | GlobalConfig.classEndTime="";//课堂结束的时间,这个是Sass返回的 |
| 298 | GlobalConfig.classTimestamp=0;//从课堂开始到现在的时 | 299 | GlobalConfig.classTimestamp=0;//从课堂开始到现在的时 |
| 299 | 300 | ||
| 301 | +GlobalConfig.recordPlaybackMaxTime=0;//录制回放的总时间 | ||
| 300 | GlobalConfig.recordStatus=false;//当前录制状态 | 302 | GlobalConfig.recordStatus=false;//当前录制状态 |
| 301 | GlobalConfig.recordTimestamp=0;//相对于首次开始录制的进行时间 | 303 | GlobalConfig.recordTimestamp=0;//相对于首次开始录制的进行时间 |
| 302 | GlobalConfig.recordFileName="";//录制的文件名,如 果为空就创建一个 | 304 | GlobalConfig.recordFileName="";//录制的文件名,如 果为空就创建一个 |
| @@ -17,11 +17,11 @@ import TimerCounter from "TimerCounter"; | @@ -17,11 +17,11 @@ import TimerCounter from "TimerCounter"; | ||
| 17 | let parseBuffer; | 17 | let parseBuffer; |
| 18 | // 日志对象 | 18 | // 日志对象 |
| 19 | const loger = Loger.getLoger('RecordPlayBackParse'); | 19 | const loger = Loger.getLoger('RecordPlayBackParse'); |
| 20 | -const Default=0;//未开始 | ||
| 21 | -const PLAY=1;//播放中 | ||
| 22 | -const PAUSE=2;//暂停 | ||
| 23 | -const SEEK=3;//seek | ||
| 24 | -const STOP=4;//停止 | 20 | +const Default = 0;//未开始 |
| 21 | +const PLAY = 1;//播放中 | ||
| 22 | +const PAUSE = 2;//暂停 | ||
| 23 | +const SEEK = 3;//seek | ||
| 24 | +const STOP = 4;//停止 | ||
| 25 | 25 | ||
| 26 | class RecordPlayBackParse extends Emiter { | 26 | class RecordPlayBackParse extends Emiter { |
| 27 | constructor() { | 27 | constructor() { |
| @@ -32,9 +32,17 @@ class RecordPlayBackParse extends Emiter { | @@ -32,9 +32,17 @@ class RecordPlayBackParse extends Emiter { | ||
| 32 | console.log(parseBuffer); | 32 | console.log(parseBuffer); |
| 33 | this._recordPlaybackTimestamp = 0;//回放的时间 | 33 | this._recordPlaybackTimestamp = 0;//回放的时间 |
| 34 | this._recordPlaybackMaxTime = 0;//录制回放的总时间 | 34 | this._recordPlaybackMaxTime = 0;//录制回放的总时间 |
| 35 | - this._isReady=false;//录制回放是否已经准备完成 | 35 | + this._isReady = false;//录制回放是否已经准备完成 |
| 36 | this._apes = {}; | 36 | this._apes = {}; |
| 37 | this._messages = {}; | 37 | this._messages = {}; |
| 38 | + | ||
| 39 | + this._conferApeMssages = {};//会议数据 | ||
| 40 | + this._chatApeMssages = {};//聊天数据 | ||
| 41 | + this._videoApeMssages = {};//视频数据 | ||
| 42 | + this._audioApeMssages = {};//音频数据 | ||
| 43 | + this._docApeMssages = {};//文档数据 | ||
| 44 | + this._whiteApeMssages = {};//白板数据 | ||
| 45 | + | ||
| 38 | this._timerCounter = new TimerCounter();//计时器 | 46 | this._timerCounter = new TimerCounter();//计时器 |
| 39 | this._timerCounter.addTimerCallBack(this._timerCounterUptate.bind(this), 1); | 47 | this._timerCounter.addTimerCallBack(this._timerCounterUptate.bind(this), 1); |
| 40 | } | 48 | } |
| @@ -45,8 +53,10 @@ class RecordPlayBackParse extends Emiter { | @@ -45,8 +53,10 @@ class RecordPlayBackParse extends Emiter { | ||
| 45 | this._apes[ape._session_id] = ape; | 53 | this._apes[ape._session_id] = ape; |
| 46 | } | 54 | } |
| 47 | 55 | ||
| 48 | - // 录制回放EverSocket底层消息处理 | ||
| 49 | - _everSocketMsgReceivedHandler(data) { | 56 | + // 录制回放EverSocket底层消息处理 data-数据;timestamp-数据对应的时间戳 |
| 57 | + // 1.如果第二个参数timestamp不为空,数据就不往外发送,只做解析和储存 | ||
| 58 | + // 2.如果第二个参数timestamp为空,数据就发送给各个ape处理; | ||
| 59 | + _everSocketMsgReceivedHandler(data, timestamp) { | ||
| 50 | let pduMsg = pdu.decode_pdu(data); | 60 | let pduMsg = pdu.decode_pdu(data); |
| 51 | let pduType = pduMsg.get("type"); | 61 | let pduType = pduMsg.get("type"); |
| 52 | let pduData = pduMsg.get("data"); | 62 | let pduData = pduMsg.get("data"); |
| @@ -82,13 +92,41 @@ class RecordPlayBackParse extends Emiter { | @@ -82,13 +92,41 @@ class RecordPlayBackParse extends Emiter { | ||
| 82 | //先判断当前消息属于哪个APE 根据 sessionId来判断 | 92 | //先判断当前消息属于哪个APE 根据 sessionId来判断 |
| 83 | let ape = this._apes[pduMsg.sessionId]; | 93 | let ape = this._apes[pduMsg.sessionId]; |
| 84 | let sessionLabel = ApeConsts(pduMsg.sessionId); | 94 | let sessionLabel = ApeConsts(pduMsg.sessionId); |
| 85 | - if (ape) { | ||
| 86 | - let subTypeLabel = pdu.id2type(pduMsg.subType); | ||
| 87 | - //loger.log('MCU-SecondLayer封装消息', 'sessionId', sessionLabel, pduMsg.sessionId, 'subtype', subTypeLabel, pduMsg.subType); | ||
| 88 | - //ape广播事件,只要ape中监听就能收到 | ||
| 89 | - ape._emit(pduMsg.subType, pduMsg.data); | 95 | + if (timestamp) { |
| 96 | + //只做解析存储,不对外发送 | ||
| 97 | + loger.log('解析数据-timestamp->', timestamp, 'sessionId->', pduMsg.sessionId, 'sessionLabel->', sessionLabel); | ||
| 98 | + switch (pduMsg.sessionId) { | ||
| 99 | + case ApeConsts.CONFERENCE_SESSION_ID: | ||
| 100 | + this.saveParseData(data, timestamp, this._conferApeMssages); | ||
| 101 | + break; | ||
| 102 | + case ApeConsts.CHAT_SESSION_ID: | ||
| 103 | + this.saveParseData(data, timestamp, this._chatApeMssages); | ||
| 104 | + break; | ||
| 105 | + case ApeConsts.DOCSHARING_SESSION_ID: | ||
| 106 | + this.saveParseData(data, timestamp, this._docApeMssages); | ||
| 107 | + break; | ||
| 108 | + case ApeConsts.WHITEBOARD_SESSION_ID: | ||
| 109 | + this.saveParseData(data, timestamp, this._whiteApeMssages); | ||
| 110 | + break; | ||
| 111 | + case ApeConsts.VIDEO_SESSION_ID: | ||
| 112 | + this.saveParseData(data, timestamp, this._videoApeMssages); | ||
| 113 | + break; | ||
| 114 | + case ApeConsts.AUDIO_SESSION_ID: | ||
| 115 | + this.saveParseData(data, timestamp, this._audioApeMssages); | ||
| 116 | + break; | ||
| 117 | + default: | ||
| 118 | + break; | ||
| 119 | + } | ||
| 90 | } else { | 120 | } else { |
| 91 | - loger.warn(sessionLabel + '尚未注册'); | 121 | + //对方发送消息 |
| 122 | + if (ape) { | ||
| 123 | + let subTypeLabel = pdu.id2type(pduMsg.subType); | ||
| 124 | + //loger.log('MCU-SecondLayer封装消息', 'sessionId', sessionLabel, pduMsg.sessionId, 'subtype', subTypeLabel, pduMsg.subType); | ||
| 125 | + //ape广播事件,只要ape中监听就能收到 | ||
| 126 | + ape._emit(pduMsg.subType, pduMsg.data); | ||
| 127 | + } else { | ||
| 128 | + loger.warn(sessionLabel + '尚未注册'); | ||
| 129 | + } | ||
| 92 | } | 130 | } |
| 93 | break; | 131 | break; |
| 94 | default: | 132 | default: |
| @@ -96,6 +134,17 @@ class RecordPlayBackParse extends Emiter { | @@ -96,6 +134,17 @@ class RecordPlayBackParse extends Emiter { | ||
| 96 | } | 134 | } |
| 97 | } | 135 | } |
| 98 | 136 | ||
| 137 | + //保存数据 | ||
| 138 | + saveParseData(data, timestamp, apeMessages) { | ||
| 139 | + let messageItem = apeMessages[timestamp]; | ||
| 140 | + if (!messageItem) { | ||
| 141 | + apeMessages[timestamp] = [];//数组存数据,因为有1秒内收到多个消息的情况,timestamp是按秒记录的 | ||
| 142 | + messageItem = apeMessages[timestamp]; | ||
| 143 | + } | ||
| 144 | + messageItem.push({"timestamp": timestamp, "byteData": data}); | ||
| 145 | + | ||
| 146 | + } | ||
| 147 | + | ||
| 99 | //开启计时器 | 148 | //开启计时器 |
| 100 | _startTimerCounter() { | 149 | _startTimerCounter() { |
| 101 | this._timerCounter.startTimer(); | 150 | this._timerCounter.startTimer(); |
| @@ -108,23 +157,28 @@ class RecordPlayBackParse extends Emiter { | @@ -108,23 +157,28 @@ class RecordPlayBackParse extends Emiter { | ||
| 108 | 157 | ||
| 109 | _timerCounterUptate() { | 158 | _timerCounterUptate() { |
| 110 | this._recordPlaybackTimestamp = this._recordPlaybackTimestamp + 1;//计时 | 159 | this._recordPlaybackTimestamp = this._recordPlaybackTimestamp + 1;//计时 |
| 111 | - if(this._recordPlaybackTimestamp>=this._recordPlaybackMaxTime){ | 160 | + if (this._recordPlaybackTimestamp >= this._recordPlaybackMaxTime) { |
| 112 | this._stopTimerCounter(); | 161 | this._stopTimerCounter(); |
| 113 | - loger.log("录制回放结束...当前时间->", this._recordPlaybackTimestamp," 总时间->",this._recordPlaybackMaxTime); | ||
| 114 | - this._emit(MessageTypes.RECORD_PLAYBACK_UPDATE,{"status":STOP}); | 162 | + loger.log("录制回放结束...当前时间->", this._recordPlaybackTimestamp, " 总时间->", this._recordPlaybackMaxTime); |
| 163 | + this._emit(MessageTypes.RECORD_PLAYBACK_UPDATE, {"status": STOP}); | ||
| 115 | return; | 164 | return; |
| 116 | } | 165 | } |
| 117 | 166 | ||
| 118 | loger.log("录制回放中...", this._recordPlaybackTimestamp); | 167 | loger.log("录制回放中...", this._recordPlaybackTimestamp); |
| 119 | this._emit(MessageTypes.CLASS_UPDATE_TIMER, {"classTimestamp": this._recordPlaybackTimestamp}); | 168 | this._emit(MessageTypes.CLASS_UPDATE_TIMER, {"classTimestamp": this._recordPlaybackTimestamp}); |
| 120 | 169 | ||
| 121 | - //根据时间查找消息数据 | ||
| 122 | - this._searchMessageFromTime(this._recordPlaybackTimestamp); | 170 | + //各个APE模块根据时间查找消息数据 |
| 171 | + this._searchMessageFromTime(this._recordPlaybackTimestamp, this._conferApeMssages); | ||
| 172 | + this._searchMessageFromTime(this._recordPlaybackTimestamp, this._chatApeMssages); | ||
| 173 | + this._searchMessageFromTime(this._recordPlaybackTimestamp, this._docApeMssages); | ||
| 174 | + this._searchMessageFromTime(this._recordPlaybackTimestamp, this._whiteApeMssages); | ||
| 175 | + this._searchMessageFromTime(this._recordPlaybackTimestamp, this._videoApeMssages); | ||
| 176 | + this._searchMessageFromTime(this._recordPlaybackTimestamp, this._audioApeMssages); | ||
| 123 | } | 177 | } |
| 124 | 178 | ||
| 125 | //加载录制文件 | 179 | //加载录制文件 |
| 126 | readyRecordPlay() { | 180 | readyRecordPlay() { |
| 127 | - this._isReady=false; | 181 | + this._isReady = false; |
| 128 | this._stopTimerCounter(); | 182 | this._stopTimerCounter(); |
| 129 | loger.log("读取回放数据"); | 183 | loger.log("读取回放数据"); |
| 130 | //let url = `http://123.56.73.119:80/h5dev/20170306/1357644520_20170306.rec`; | 184 | //let url = `http://123.56.73.119:80/h5dev/20170306/1357644520_20170306.rec`; |
| @@ -182,103 +236,153 @@ class RecordPlayBackParse extends Emiter { | @@ -182,103 +236,153 @@ class RecordPlayBackParse extends Emiter { | ||
| 182 | position += byteLen; | 236 | position += byteLen; |
| 183 | console.log(timestamp, byteLen, byteData); | 237 | console.log(timestamp, byteLen, byteData); |
| 184 | 238 | ||
| 185 | - let messageItem=this._messages[timestamp]; | ||
| 186 | - if(!messageItem){ | ||
| 187 | - this._messages[timestamp]=[];//数组存数据,因为有1秒内收到多个消息的情况,timestamp是按秒记录的 | ||
| 188 | - messageItem=this._messages[timestamp]; | 239 | + let messageItem = this._messages[timestamp]; |
| 240 | + if (!messageItem) { | ||
| 241 | + this._messages[timestamp] = [];//数组存数据,因为有1秒内收到多个消息的情况,timestamp是按秒记录的 | ||
| 242 | + messageItem = this._messages[timestamp]; | ||
| 189 | } | 243 | } |
| 190 | messageItem.push({"timestamp": timestamp, "byteData": byteData}); | 244 | messageItem.push({"timestamp": timestamp, "byteData": byteData}); |
| 191 | 245 | ||
| 246 | + this._everSocketMsgReceivedHandler(byteData, timestamp); | ||
| 192 | //记录最后一个数据的时间戳作为整个录制回放的总时间戳 | 247 | //记录最后一个数据的时间戳作为整个录制回放的总时间戳 |
| 193 | - this._recordPlaybackMaxTime=timestamp; | 248 | + this._recordPlaybackMaxTime = timestamp; |
| 194 | } | 249 | } |
| 195 | - this._recordPlaybackTimestamp=0; | ||
| 196 | - this._isReady=true; | 250 | + this._recordPlaybackTimestamp = 0; |
| 251 | + this._isReady = true; | ||
| 197 | this._stopTimerCounter(); | 252 | this._stopTimerCounter(); |
| 198 | 253 | ||
| 199 | - GlobalConfig.recordPlaybackMaxTime=this._recordPlaybackMaxTime; | ||
| 200 | - loger.log("录制回放数据解析完成,录制回放的总时间长为->",this._recordPlaybackMaxTime); | ||
| 201 | - console.log(this._messages); | ||
| 202 | - this._emit(RecordPlayBackParse.CLASS_JOIN_RECORD_PLAYBACK_SUCCESS,{"recordPlaybackMaxTime":this._recordPlaybackMaxTime}); | 254 | + GlobalConfig.recordPlaybackMaxTime = this._recordPlaybackMaxTime; |
| 255 | + loger.log("录制回放数据解析完成,录制回放的总时间长为->", this._recordPlaybackMaxTime); | ||
| 256 | + console.log("_messages", this._messages); | ||
| 257 | + console.log("_conferApeMssages", this._conferApeMssages); | ||
| 258 | + console.log("_chatApeMssages", this._chatApeMssages); | ||
| 259 | + console.log("_docApeMssages", this._docApeMssages); | ||
| 260 | + console.log("_whiteApeMssages", this._whiteApeMssages); | ||
| 261 | + console.log("_videoApeMssages", this._videoApeMssages); | ||
| 262 | + console.log("_audioApeMssages", this._audioApeMssages); | ||
| 263 | + | ||
| 264 | + this._emit(RecordPlayBackParse.CLASS_JOIN_RECORD_PLAYBACK_SUCCESS, {"recordPlaybackMaxTime": this._recordPlaybackMaxTime}); | ||
| 203 | } | 265 | } |
| 204 | 266 | ||
| 205 | //根据时间查找数据 | 267 | //根据时间查找数据 |
| 206 | - _searchMessageFromTime(_timestamp){ | ||
| 207 | - let msgDataArr=this._messages[_timestamp]; | ||
| 208 | - if(!msgDataArr){ | 268 | + _searchMessageFromTime(_timestamp, _apeMessages) { |
| 269 | + let msgDataArr = _apeMessages[_timestamp]; | ||
| 270 | + if (!msgDataArr) { | ||
| 209 | //没有数据,需要查找当前时间点属于哪一个时间戳关键帧 | 271 | //没有数据,需要查找当前时间点属于哪一个时间戳关键帧 |
| 210 | - }else { | 272 | + } else { |
| 211 | //把时间点对应的数据发送,同一秒内有存在多个数据的情况 | 273 | //把时间点对应的数据发送,同一秒内有存在多个数据的情况 |
| 212 | - for(let i=0;i<msgDataArr.length;i++){ | 274 | + for (let i = 0; i < msgDataArr.length; i++) { |
| 213 | this._everSocketMsgReceivedHandler(msgDataArr[i].byteData); | 275 | this._everSocketMsgReceivedHandler(msgDataArr[i].byteData); |
| 214 | } | 276 | } |
| 215 | } | 277 | } |
| 216 | } | 278 | } |
| 279 | + | ||
| 280 | + /*_searchMessageFromTime(_timestamp,_apeMessages){ | ||
| 281 | + let msgDataArr=this._messages[_timestamp]; | ||
| 282 | + if(!msgDataArr){ | ||
| 283 | + //没有数据,需要查找当前时间点属于哪一个时间戳关键帧 | ||
| 284 | + }else { | ||
| 285 | + //把时间点对应的数据发送,同一秒内有存在多个数据的情况 | ||
| 286 | + for(let i=0;i<msgDataArr.length;i++){ | ||
| 287 | + this._everSocketMsgReceivedHandler(msgDataArr[i].byteData); | ||
| 288 | + } | ||
| 289 | + } | ||
| 290 | + }*/ | ||
| 291 | + | ||
| 217 | //method------------外部接口------------------------------------- | 292 | //method------------外部接口------------------------------------- |
| 218 | 293 | ||
| 219 | //开始播放 | 294 | //开始播放 |
| 220 | startRecordPlayback(_param) { | 295 | startRecordPlayback(_param) { |
| 221 | - if(!this._isReady){ | ||
| 222 | - return {"code": ApeConsts.RETURN_FAILED,"data": "录制回放还未准备完成"}; | 296 | + if (!this._isReady) { |
| 297 | + return {"code": ApeConsts.RETURN_FAILED, "data": "录制回放还未准备完成"}; | ||
| 223 | } | 298 | } |
| 224 | this._startTimerCounter(); | 299 | this._startTimerCounter(); |
| 225 | - this._emit(MessageTypes.RECORD_PLAYBACK_UPDATE,{"status":PLAY}); | 300 | + this._emit(MessageTypes.RECORD_PLAYBACK_UPDATE, {"status": PLAY}); |
| 226 | } | 301 | } |
| 227 | 302 | ||
| 228 | //停止播放 | 303 | //停止播放 |
| 229 | stopRecordPlayback(_param) { | 304 | stopRecordPlayback(_param) { |
| 230 | this._recordPlaybackTimestamp = 0; | 305 | this._recordPlaybackTimestamp = 0; |
| 231 | this._stopTimerCounter(); | 306 | this._stopTimerCounter(); |
| 232 | - this._emit(MessageTypes.RECORD_PLAYBACK_UPDATE,{"status":STOP}); | 307 | + this._emit(MessageTypes.RECORD_PLAYBACK_UPDATE, {"status": STOP}); |
| 233 | } | 308 | } |
| 234 | 309 | ||
| 235 | //暂停播放 | 310 | //暂停播放 |
| 236 | pauseRecordPlayback(_param) { | 311 | pauseRecordPlayback(_param) { |
| 237 | this._stopTimerCounter(); | 312 | this._stopTimerCounter(); |
| 238 | - this._emit(MessageTypes.RECORD_PLAYBACK_UPDATE,{"status":PAUSE}); | 313 | + this._emit(MessageTypes.RECORD_PLAYBACK_UPDATE, {"status": PAUSE}); |
| 239 | } | 314 | } |
| 240 | 315 | ||
| 241 | //跳转到指定时间点播放 | 316 | //跳转到指定时间点播放 |
| 242 | seekRecordPlayback(_param) { | 317 | seekRecordPlayback(_param) { |
| 243 | - if(!this._isReady){ | ||
| 244 | - return {"code": ApeConsts.RETURN_FAILED,"data": "录制回放还未准备完成"}; | 318 | + if (!this._isReady) { |
| 319 | + return {"code": ApeConsts.RETURN_FAILED, "data": "录制回放还未准备完成"}; | ||
| 245 | } | 320 | } |
| 246 | - if(!_param||!_param.time){ | ||
| 247 | - return {"code": ApeConsts.RETURN_FAILED,"data": "参数不正确"}; | 321 | + if (!_param || !_param.time) { |
| 322 | + return {"code": ApeConsts.RETURN_FAILED, "data": "参数不正确"}; | ||
| 248 | } | 323 | } |
| 249 | //先暂停,更改进行的时间 | 324 | //先暂停,更改进行的时间 |
| 250 | this._stopTimerCounter() | 325 | this._stopTimerCounter() |
| 251 | this._recordPlaybackTimestamp = _param.time || 0; | 326 | this._recordPlaybackTimestamp = _param.time || 0; |
| 252 | 327 | ||
| 253 | - //查找关键帧 | ||
| 254 | - this._searchKeyFram(); | 328 | + //各个ape模块查找关键帧数据 |
| 329 | + this._searchKeyfram(); | ||
| 255 | } | 330 | } |
| 256 | - _searchKeyFram(){ | 331 | + |
| 332 | + _searchKeyfram() { | ||
| 257 | //查找关键帧,找到关键帧后再继续播放 | 333 | //查找关键帧,找到关键帧后再继续播放 |
| 334 | + this._searchApeMessageKeyfram(this._conferApeMssages,ApeConsts.CONFERENCE_SESSION_ID); | ||
| 335 | + this._searchApeMessageKeyfram(this._docApeMssages,ApeConsts.DOCSHARING_SESSION_ID); | ||
| 336 | + this._searchApeMessageKeyfram(this._whiteApeMssages,ApeConsts.WHITEBOARD_SESSION_ID); | ||
| 337 | + this._searchApeMessageKeyfram(this._videoApeMssages,ApeConsts.VIDEO_SESSION_ID); | ||
| 338 | + this._searchApeMessageKeyfram(this._audioApeMssages,ApeConsts.AUDIO_SESSION_ID); | ||
| 339 | + | ||
| 340 | + //聊天模块的比较特殊,消息是累计的 | ||
| 341 | + this._searchChatApeMessageKeyfram(this._chatApeMssages,ApeConsts.CHAT_SESSION_ID); | ||
| 342 | + | ||
| 343 | + | ||
| 344 | + //各个ape模块无论有没有找到关键帧数据,都继续播放 | ||
| 345 | + this._startTimerCounter(); | ||
| 346 | + } | ||
| 347 | + | ||
| 348 | + //查找ape关键帧数据 | ||
| 349 | + _searchApeMessageKeyfram(_apeMessages,_apeId) { | ||
| 258 | let messageItem; | 350 | let messageItem; |
| 259 | - let keyFrameSeek=0; | ||
| 260 | - for(let i=this._recordPlaybackTimestamp;i>0;i--){ | ||
| 261 | - messageItem=this._messages[i]; | ||
| 262 | - if(messageItem){ | ||
| 263 | - break; | 351 | + let keyFrameSeek = 0; |
| 352 | + for (let i = this._recordPlaybackTimestamp; i > 0; i--) { | ||
| 353 | + messageItem = _apeMessages[i]; | ||
| 354 | + if (messageItem) { | ||
| 355 | + keyFrameSeek = (this._recordPlaybackTimestamp - i) | ||
| 356 | + loger.log("SEEK->APE",_apeId, this._recordPlaybackTimestamp, "查找到相连的数据, messageItem.timestamp->",i, this._recordPlaybackTimestamp,keyFrameSeek, "秒"); | ||
| 357 | + //把时间点对应的数据发送,同一秒内有存在多个数据的情况 | ||
| 358 | + for (let k = 0; k < messageItem.length; k++) { | ||
| 359 | + this._everSocketMsgReceivedHandler(messageItem[k].byteData); | ||
| 360 | + } | ||
| 361 | + if(_apeId==ApeConsts.AUDIO_SESSION_ID||_apeId==ApeConsts.VIDEO_SESSION_ID){ | ||
| 362 | + this._emit(MessageTypes.RECORD_PLAYBACK_UPDATE, {"status": SEEK, "keyFrameSeek": keyFrameSeek}); | ||
| 363 | + } | ||
| 364 | + return; | ||
| 264 | } | 365 | } |
| 265 | } | 366 | } |
| 266 | - if(messageItem){ | ||
| 267 | - keyFrameSeek=(this._recordPlaybackTimestamp-messageItem.timestamp) | ||
| 268 | - loger.log("SEEK->",this._recordPlaybackTimestamp,"查找到相连的数据,seek和关键帧的位置偏移",keyFrameSeek,"秒"); | ||
| 269 | - //把时间点对应的数据发送,同一秒内有存在多个数据的情况 | ||
| 270 | - for(let i=0;i<messageItem.length;i++){ | ||
| 271 | - this._everSocketMsgReceivedHandler(messageItem[i].byteData); | 367 | + loger.log("SEEK->APE",_apeId, this._recordPlaybackTimestamp, "没有查找到相连的数据"); |
| 368 | + //this._emit(MessageTypes.RECORD_PLAYBACK_UPDATE,{"status":SEEK,"keyFrameSeek":keyFrameSeek}); | ||
| 369 | + } | ||
| 370 | + | ||
| 371 | + //查找聊天模块ape关键帧数据,聊天模块比较特殊,消息是累积的,当前时间戳之前的都需要显示 | ||
| 372 | + _searchChatApeMessageKeyfram(_apeMessages) { | ||
| 373 | + let messageItem; | ||
| 374 | + let keyFrameSeek = 0; | ||
| 375 | + for (let i = this._recordPlaybackTimestamp; i > 0; i--) { | ||
| 376 | + messageItem = _apeMessages[i]; | ||
| 377 | + if (messageItem) { | ||
| 378 | + //把时间点对应的数据发送,同一秒内有存在多个数据的情况 | ||
| 379 | + for (let i = 0; i < messageItem.length; i++) { | ||
| 380 | + this._everSocketMsgReceivedHandler(messageItem[i].byteData); | ||
| 381 | + } | ||
| 272 | } | 382 | } |
| 273 | - }else { | ||
| 274 | - loger.log("SEEK->",this._recordPlaybackTimestamp,"没有查找到相连的数据"); | ||
| 275 | } | 383 | } |
| 276 | - | ||
| 277 | - this._emit(MessageTypes.RECORD_PLAYBACK_UPDATE,{"status":SEEK,"keyFrameSeek":keyFrameSeek}); | ||
| 278 | - //无论有没有找到关键帧数据,都继续播放 | ||
| 279 | - this._startTimerCounter(); | ||
| 280 | - | ||
| 281 | } | 384 | } |
| 385 | + | ||
| 282 | } | 386 | } |
| 283 | 387 | ||
| 284 | RecordPlayBackParse.prototype.CLASS_JOIN_RECORD_PLAYBACK_SUCCESS = RecordPlayBackParse.CLASS_JOIN_RECORD_PLAYBACK_SUCCESS = 'class_join_recordPlayback_success';//加入录制回放成功 | 388 | RecordPlayBackParse.prototype.CLASS_JOIN_RECORD_PLAYBACK_SUCCESS = RecordPlayBackParse.CLASS_JOIN_RECORD_PLAYBACK_SUCCESS = 'class_join_recordPlayback_success';//加入录制回放成功 |
-
请 注册 或 登录 后发表评论