1.音视频模块在录制状态发生改变的时候增加更新接口,把当前的音视频模块数据录制;
2.音视频模块发起人的身份和名称不对应的bug修复 3.媒体共享模块的消息中增加SEEK字段 4.录制回放中增加媒体共享的SEEK功能
正在显示
10 个修改的文件
包含
141 行增加
和
34 行删除
此 diff 太大无法显示。
| @@ -32,7 +32,7 @@ import QuestionApe from 'apes/QuestionApe'; | @@ -32,7 +32,7 @@ import QuestionApe from 'apes/QuestionApe'; | ||
| 32 | import UTF8 from 'utf-8'; | 32 | import UTF8 from 'utf-8'; |
| 33 | 33 | ||
| 34 | let loger = Loger.getLoger('McuClient'); | 34 | let loger = Loger.getLoger('McuClient'); |
| 35 | -let _sdkInfo = {"version": "v1.32.0.20170613", "author": "www.3mang.com"}; | 35 | +let _sdkInfo = {"version": "v1.32.1.20170614", "author": "www.3mang.com"}; |
| 36 | 36 | ||
| 37 | //APE | 37 | //APE |
| 38 | let _sass; | 38 | let _sass; |
| @@ -332,11 +332,26 @@ export default class MessageEntrance extends Emiter { | @@ -332,11 +332,26 @@ export default class MessageEntrance extends Emiter { | ||
| 332 | 332 | ||
| 333 | //开启录制成功 | 333 | //开启录制成功 |
| 334 | _onClassRecordSuccess(_param) { | 334 | _onClassRecordSuccess(_param) { |
| 335 | - if (_doc_ape) { | ||
| 336 | - _doc_ape.updaterRecordStatus(); | ||
| 337 | - } | ||
| 338 | - if (_whiteboard_ape) { | ||
| 339 | - _whiteboard_ape.updaterRecordStatus(); | 335 | + this.updaterRecordAllApeStatus(_param); |
| 336 | + } | ||
| 337 | + | ||
| 338 | + //录制状态发送改变,更新所有模块的当前数据发送到MCU | ||
| 339 | + updaterRecordAllApeStatus(_param){ | ||
| 340 | + //老师身份和非录制回放的时候执行,录制状态发送改变,需要更新当前的数据,否则已有的消息会录制不上 | ||
| 341 | + if(GlobalConfig.isHost&&!GlobalConfig.isRecordPlayBack){ | ||
| 342 | + loger.warn('录制状态发送改变->更新所有模块的当前数据发送到MCU'); | ||
| 343 | + if (_doc_ape) { | ||
| 344 | + _doc_ape.updaterRecordApeStatus(); | ||
| 345 | + } | ||
| 346 | + if (_whiteboard_ape) { | ||
| 347 | + _whiteboard_ape.updaterRecordApeStatus(); | ||
| 348 | + } | ||
| 349 | + if (_video_ape) { | ||
| 350 | + _video_ape.updaterRecordApeStatus(); | ||
| 351 | + } | ||
| 352 | + if (_audio_ape) { | ||
| 353 | + _audio_ape.updaterRecordApeStatus(); | ||
| 354 | + } | ||
| 340 | } | 355 | } |
| 341 | } | 356 | } |
| 342 | 357 | ||
| @@ -518,6 +533,7 @@ export default class MessageEntrance extends Emiter { | @@ -518,6 +533,7 @@ export default class MessageEntrance extends Emiter { | ||
| 518 | GlobalConfig.fps = _data.fps || 15; | 533 | GlobalConfig.fps = _data.fps || 15; |
| 519 | GlobalConfig.gop = _data.gop || 3; | 534 | GlobalConfig.gop = _data.gop || 3; |
| 520 | GlobalConfig.videoQuality = parseInt(_data.videoQuality); | 535 | GlobalConfig.videoQuality = parseInt(_data.videoQuality); |
| 536 | + GlobalConfig.curVideoQuality= GlobalConfig.videoQuality; | ||
| 521 | 537 | ||
| 522 | //是否自动开始(身份是host的时候才用到的) | 538 | //是否自动开始(身份是host的时候才用到的) |
| 523 | GlobalConfig.isAutoStartClass = _data.autoRecord || 0; | 539 | GlobalConfig.isAutoStartClass = _data.autoRecord || 0; |
| @@ -399,16 +399,24 @@ class RecordPlayBackParse extends Emiter { | @@ -399,16 +399,24 @@ class RecordPlayBackParse extends Emiter { | ||
| 399 | //音视频模块的查找规则和其他模块不一样,音视频按频道查找,如果课堂内存在多个频道,都要查 | 399 | //音视频模块的查找规则和其他模块不一样,音视频按频道查找,如果课堂内存在多个频道,都要查 |
| 400 | this.searchMediaApeMessageKeyfram(this.mediaChannleList); | 400 | this.searchMediaApeMessageKeyfram(this.mediaChannleList); |
| 401 | 401 | ||
| 402 | + //媒体共享模块 | ||
| 403 | + this.searchMediaShareApeMessageKeyfram(this._mediaShareApeMssages); | ||
| 404 | + | ||
| 402 | //聊天模块、白板标注模块的比较特殊,消息是累计的,默认最多30条 | 405 | //聊天模块、白板标注模块的比较特殊,消息是累计的,默认最多30条 |
| 403 | this._searchChatHistoryMessageKeyfram(this._chatApeMssages, ApeConsts.CHAT_SESSION_ID); | 406 | this._searchChatHistoryMessageKeyfram(this._chatApeMssages, ApeConsts.CHAT_SESSION_ID); |
| 404 | this._searchWhiteboradHistoryMessageKeyfram(this._whiteApeMssages, ApeConsts.WHITEBOARD_SESSION_ID); | 407 | this._searchWhiteboradHistoryMessageKeyfram(this._whiteApeMssages, ApeConsts.WHITEBOARD_SESSION_ID); |
| 405 | 408 | ||
| 409 | + | ||
| 410 | + | ||
| 406 | //各个ape模块无论有没有找到关键帧数据,都继续播放 | 411 | //各个ape模块无论有没有找到关键帧数据,都继续播放 |
| 407 | this._startTimerCounter(); | 412 | this._startTimerCounter(); |
| 408 | } | 413 | } |
| 409 | 414 | ||
| 410 | //查找ape关键帧数据 | 415 | //查找ape关键帧数据 |
| 411 | _searchApeMessageKeyfram(_apeMessages, _apeId) { | 416 | _searchApeMessageKeyfram(_apeMessages, _apeId) { |
| 417 | + if(!_apeMessages){ | ||
| 418 | + return; | ||
| 419 | + } | ||
| 412 | let messageItem; | 420 | let messageItem; |
| 413 | let keyFrameSeekTime = 0; | 421 | let keyFrameSeekTime = 0; |
| 414 | for (let i = this._recordPlaybackTimestamp; i > 0; i--) { | 422 | for (let i = this._recordPlaybackTimestamp; i > 0; i--) { |
| @@ -434,7 +442,9 @@ class RecordPlayBackParse extends Emiter { | @@ -434,7 +442,9 @@ class RecordPlayBackParse extends Emiter { | ||
| 434 | 442 | ||
| 435 | //音视频模块seek的时候,查找当前seek点的关键帧数据,所有频道的数据都需要查一下,否则多路视频的时候会显示不全 | 443 | //音视频模块seek的时候,查找当前seek点的关键帧数据,所有频道的数据都需要查一下,否则多路视频的时候会显示不全 |
| 436 | searchMediaApeMessageKeyfram(_apeMessages){ | 444 | searchMediaApeMessageKeyfram(_apeMessages){ |
| 437 | - loger.log("SEEK->查找音视频模块数据"); | 445 | + if(!_apeMessages){ |
| 446 | + return; | ||
| 447 | + } | ||
| 438 | console.log('SEEK->查找音视频模块数据',_apeMessages) | 448 | console.log('SEEK->查找音视频模块数据',_apeMessages) |
| 439 | if(_apeMessages) { | 449 | if(_apeMessages) { |
| 440 | for (let k in _apeMessages) { | 450 | for (let k in _apeMessages) { |
| @@ -453,8 +463,33 @@ class RecordPlayBackParse extends Emiter { | @@ -453,8 +463,33 @@ class RecordPlayBackParse extends Emiter { | ||
| 453 | } | 463 | } |
| 454 | } | 464 | } |
| 455 | } | 465 | } |
| 466 | + //媒体共享模块查找关键帧时间戳的消息 | ||
| 467 | + searchMediaShareApeMessageKeyfram(_apeMessages){ | ||
| 468 | + if(!_apeMessages){ | ||
| 469 | + return; | ||
| 470 | + } | ||
| 471 | + let messageItem; | ||
| 472 | + let keyFrameSeekTime = 0; | ||
| 473 | + for (let i = this._recordPlaybackTimestamp; i > 0; i--) { | ||
| 474 | + messageItem = _apeMessages[i]; | ||
| 475 | + if (messageItem) { | ||
| 476 | + keyFrameSeekTime = (this._recordPlaybackTimestamp - i) | ||
| 477 | + loger.log("SEEK->APE",'媒体共享',this._recordPlaybackTimestamp, "查找到相连的timestamp->", i, '需要seek->', keyFrameSeekTime, "秒"); | ||
| 478 | + //把时间点对应的数据发送,同一秒内有存在多个数据的情况 | ||
| 479 | + for (let k = 0; k < messageItem.length; k++) { | ||
| 480 | + this._everSocketMsgReceivedHandler(messageItem[k].byteData, keyFrameSeekTime); | ||
| 481 | + } | ||
| 482 | + return; | ||
| 483 | + } | ||
| 484 | + } | ||
| 485 | + loger.log("SEEK->APE->媒体共享", this._recordPlaybackTimestamp, "没有查找到相连的数据"); | ||
| 486 | + } | ||
| 487 | + | ||
| 456 | //查找聊天模块ape关键帧数据,聊天模块比较特殊,消息是累积的,当前时间戳之前的都需要显示 | 488 | //查找聊天模块ape关键帧数据,聊天模块比较特殊,消息是累积的,当前时间戳之前的都需要显示 |
| 457 | _searchChatHistoryMessageKeyfram(_apeMessages) { | 489 | _searchChatHistoryMessageKeyfram(_apeMessages) { |
| 490 | + if(!_apeMessages){ | ||
| 491 | + return; | ||
| 492 | + } | ||
| 458 | //最多30条数据 | 493 | //最多30条数据 |
| 459 | let counter=0; | 494 | let counter=0; |
| 460 | let messageItem; | 495 | let messageItem; |
| @@ -485,6 +520,9 @@ class RecordPlayBackParse extends Emiter { | @@ -485,6 +520,9 @@ class RecordPlayBackParse extends Emiter { | ||
| 485 | 520 | ||
| 486 | //查找白板标注模块ape关键帧数据,聊天模块比较特殊,消息是累积的,当前时间戳之前的都需要显示 | 521 | //查找白板标注模块ape关键帧数据,聊天模块比较特殊,消息是累积的,当前时间戳之前的都需要显示 |
| 487 | _searchWhiteboradHistoryMessageKeyfram(_apeMessages) { | 522 | _searchWhiteboradHistoryMessageKeyfram(_apeMessages) { |
| 523 | + if(!_apeMessages){ | ||
| 524 | + return; | ||
| 525 | + } | ||
| 488 | //最多30条数据 | 526 | //最多30条数据 |
| 489 | let counter=0; | 527 | let counter=0; |
| 490 | let messageItem; | 528 | let messageItem; |
| @@ -160,7 +160,7 @@ export default class Ape extends Emiter { | @@ -160,7 +160,7 @@ export default class Ape extends Emiter { | ||
| 160 | } | 160 | } |
| 161 | 161 | ||
| 162 | //文档数据数组内部自己处理数组 | 162 | //文档数据数组内部自己处理数组 |
| 163 | - this.tableInsertApeHandler(tableInsertItems); | 163 | + this.tableInsertApeHandler(tableInsertItems,seekTime); |
| 164 | break; | 164 | break; |
| 165 | case pdu.RCPDU_REG_TABLE_DELETE_PDU: | 165 | case pdu.RCPDU_REG_TABLE_DELETE_PDU: |
| 166 | let tableDeleteData = pdu['RCRegistryTableDeleteItemPdu'].decode(user_data); | 166 | let tableDeleteData = pdu['RCRegistryTableDeleteItemPdu'].decode(user_data); |
| @@ -181,7 +181,7 @@ export default class Ape extends Emiter { | @@ -181,7 +181,7 @@ export default class Ape extends Emiter { | ||
| 181 | } | 181 | } |
| 182 | 182 | ||
| 183 | //白板,文档数据数组内部自己处理数组 | 183 | //白板,文档数据数组内部自己处理数组 |
| 184 | - this.tableUpdateApeHandler(tableUpdateItems); | 184 | + this.tableUpdateApeHandler(tableUpdateItems,seekTime); |
| 185 | break; | 185 | break; |
| 186 | case pdu.RCPDU_REG_QUEUE_UPDATE_PDU: | 186 | case pdu.RCPDU_REG_QUEUE_UPDATE_PDU: |
| 187 | case pdu.RCPDU_REG_QUEUE_DELETE_PDU: | 187 | case pdu.RCPDU_REG_QUEUE_DELETE_PDU: |
| @@ -424,6 +424,22 @@ class AudioApe extends Ape { | @@ -424,6 +424,22 @@ class AudioApe extends Ape { | ||
| 424 | this._emit(MessageTypes.AUDIO_UPDATE, unpackChannelInfo); | 424 | this._emit(MessageTypes.AUDIO_UPDATE, unpackChannelInfo); |
| 425 | } | 425 | } |
| 426 | 426 | ||
| 427 | + //更新媒体文件模块的录制信息,每次开启录制的时候需要把当前媒体文件的信息更新一次 | ||
| 428 | + updaterRecordApeStatus(_param){ | ||
| 429 | + console.warn("录制状态发送改变->更新当前的状态->",this.mediaModule.mediaChannels); | ||
| 430 | + for (let i in this.mediaModule.mediaChannels){ | ||
| 431 | + let channelInfo=this.mediaModule.mediaChannels[i]; | ||
| 432 | + if(channelInfo){ | ||
| 433 | + if(channelInfo.status==ApeConsts.CHANNEL_STATUS_RELEASED){ | ||
| 434 | + channelInfo.owner=0; | ||
| 435 | + }else { | ||
| 436 | + channelInfo.owner=channelInfo.fromNodeId; | ||
| 437 | + } | ||
| 438 | + this.sendTableUpdateHandler(channelInfo); | ||
| 439 | + } | ||
| 440 | + } | ||
| 441 | + } | ||
| 442 | + | ||
| 427 | ///////数据的封包和解包///////////////////////////////////////// | 443 | ///////数据的封包和解包///////////////////////////////////////// |
| 428 | packPdu(_param, _itemIdx) { | 444 | packPdu(_param, _itemIdx) { |
| 429 | //验证坐标点集合数组是否合法 | 445 | //验证坐标点集合数组是否合法 |
| @@ -443,10 +459,10 @@ class AudioApe extends Ape { | @@ -443,10 +459,10 @@ class AudioApe extends Ape { | ||
| 443 | packPduModel.userId =_param.userId||"0"; | 459 | packPduModel.userId =_param.userId||"0"; |
| 444 | packPduModel.mediaType =_param.mediaType|| ApeConsts.MEDIA_TYPE_AUDIO; | 460 | packPduModel.mediaType =_param.mediaType|| ApeConsts.MEDIA_TYPE_AUDIO; |
| 445 | packPduModel.timestamp =_param.timestamp||EngineUtils.creatTimestamp(); | 461 | packPduModel.timestamp =_param.timestamp||EngineUtils.creatTimestamp(); |
| 446 | - packPduModel.fromNodeId = GlobalConfig.nodeId; | ||
| 447 | - packPduModel.userName=GlobalConfig.userName||""; | 462 | + packPduModel.fromNodeId =_param.nodeId|| GlobalConfig.nodeId; |
| 463 | + packPduModel.userName=_param.userName||GlobalConfig.userName||""; | ||
| 448 | packPduModel.toNodeId = 0; | 464 | packPduModel.toNodeId = 0; |
| 449 | - packPduModel.userRole=GlobalConfig.userRole||ApeConsts.normal; | 465 | + packPduModel.userRole=_param.userRole||GlobalConfig.userRole; |
| 450 | packPduModel.screenWidth=_param.screenWidth||GlobalConfig.screenWidth; | 466 | packPduModel.screenWidth=_param.screenWidth||GlobalConfig.screenWidth; |
| 451 | packPduModel.screenHeight=_param.screenHeight||GlobalConfig.screenHeight; | 467 | packPduModel.screenHeight=_param.screenHeight||GlobalConfig.screenHeight; |
| 452 | loger.log("packPdu->",packPduModel); | 468 | loger.log("packPdu->",packPduModel); |
| @@ -309,14 +309,19 @@ class DocApe extends Ape { | @@ -309,14 +309,19 @@ class DocApe extends Ape { | ||
| 309 | return itemDataInfo; | 309 | return itemDataInfo; |
| 310 | } | 310 | } |
| 311 | //更新文档模块的录制信息,每次开启录制的时候需要把当前文档的信息更新一次 | 311 | //更新文档模块的录制信息,每次开启录制的时候需要把当前文档的信息更新一次 |
| 312 | - updaterRecordStatus(_param){ | ||
| 313 | - if(GlobalConfig.isHost&&!GlobalConfig.isRecordPlayBack&&GlobalConfig.activeDocId>0){ | ||
| 314 | - loger.log("开启录制成功->更新当前的文档数据->docId:", GlobalConfig.activeDocId, 'page:',GlobalConfig.activeDocCurPage); | 312 | + updaterRecordApeStatus(_param){ |
| 313 | + /* if(GlobalConfig.isHost&&!GlobalConfig.isRecordPlayBack&&GlobalConfig.activeDocId>0){ | ||
| 314 | + loger.log("录制状态发送改变->更新当前的文档数据->docId:", GlobalConfig.activeDocId, 'page:',GlobalConfig.activeDocCurPage); | ||
| 315 | this.documentSwitchPage({ | 315 | this.documentSwitchPage({ |
| 316 | "itemIdx": GlobalConfig.activeDocId, | 316 | "itemIdx": GlobalConfig.activeDocId, |
| 317 | "curPageNo":GlobalConfig.activeDocCurPage | 317 | "curPageNo":GlobalConfig.activeDocCurPage |
| 318 | }); | 318 | }); |
| 319 | - } | 319 | + }*/ |
| 320 | + loger.warn("录制状态发送改变->更新当前的文档数据->docId:", GlobalConfig.activeDocId, 'page:',GlobalConfig.activeDocCurPage); | ||
| 321 | + this.documentSwitchPage({ | ||
| 322 | + "itemIdx": GlobalConfig.activeDocId, | ||
| 323 | + "curPageNo":GlobalConfig.activeDocCurPage | ||
| 324 | + }); | ||
| 320 | } | 325 | } |
| 321 | //清除当前文档模块的数据 | 326 | //清除当前文档模块的数据 |
| 322 | clearData(){ | 327 | clearData(){ |
| @@ -283,7 +283,7 @@ class MediaModule { | @@ -283,7 +283,7 @@ class MediaModule { | ||
| 283 | channelInfo.status=ApeConsts.CHANNEL_STATUS_RELEASED; | 283 | channelInfo.status=ApeConsts.CHANNEL_STATUS_RELEASED; |
| 284 | channelInfo.fromNodeId=GlobalConfig.nodeId; | 284 | channelInfo.fromNodeId=GlobalConfig.nodeId; |
| 285 | channelInfo.channelId=0;//channelId不能为0 | 285 | channelInfo.channelId=0;//channelId不能为0 |
| 286 | - channelInfo.streamId="" | 286 | + channelInfo.streamId=""; |
| 287 | channelInfo.classId=GlobalConfig.classId; | 287 | channelInfo.classId=GlobalConfig.classId; |
| 288 | channelInfo.siteId=GlobalConfig.siteId; | 288 | channelInfo.siteId=GlobalConfig.siteId; |
| 289 | channelInfo.toNodeId=0; | 289 | channelInfo.toNodeId=0; |
| @@ -149,21 +149,26 @@ class MediaSharedApe extends Ape { | @@ -149,21 +149,26 @@ class MediaSharedApe extends Ape { | ||
| 149 | //组织完整的媒体文件信息,包含上传时的信息和转换后的完整地址信息 | 149 | //组织完整的媒体文件信息,包含上传时的信息和转换后的完整地址信息 |
| 150 | _mediaSharedPackFullInfo(_itemDataInfo){ | 150 | _mediaSharedPackFullInfo(_itemDataInfo){ |
| 151 | let itemDataInfo=_itemDataInfo; | 151 | let itemDataInfo=_itemDataInfo; |
| 152 | - if(itemDataInfo.seek==null){ | 152 | + if(!itemDataInfo.seek){ |
| 153 | itemDataInfo.seek=1; | 153 | itemDataInfo.seek=1; |
| 154 | } | 154 | } |
| 155 | loger.log('mediaPackFullInfo->', itemDataInfo); | 155 | loger.log('mediaPackFullInfo->', itemDataInfo); |
| 156 | return itemDataInfo; | 156 | return itemDataInfo; |
| 157 | } | 157 | } |
| 158 | //更新媒体文件模块的录制信息,每次开启录制的时候需要把当前媒体文件的信息更新一次 | 158 | //更新媒体文件模块的录制信息,每次开启录制的时候需要把当前媒体文件的信息更新一次 |
| 159 | - updaterRecordStatus(_param){ | ||
| 160 | - if(GlobalConfig.isHost&&!GlobalConfig.isRecordPlayBack&&GlobalConfig.activeMediaId>0){ | 159 | + updaterRecordApeStatus(_param){ |
| 160 | + /*if(GlobalConfig.isHost&&!GlobalConfig.isRecordPlayBack&&GlobalConfig.activeMediaId>0){ | ||
| 161 | loger.log("开启录制成功->更新当前的媒体文件数据->fileId:", GlobalConfig.activeMediaId, 'page:',GlobalConfig.activeMediaSeek); | 161 | loger.log("开启录制成功->更新当前的媒体文件数据->fileId:", GlobalConfig.activeMediaId, 'page:',GlobalConfig.activeMediaSeek); |
| 162 | this.mediaSharedSeek({ | 162 | this.mediaSharedSeek({ |
| 163 | "itemIdx": GlobalConfig.activeMediaId, | 163 | "itemIdx": GlobalConfig.activeMediaId, |
| 164 | "seek":GlobalConfig.activeMediaSeek | 164 | "seek":GlobalConfig.activeMediaSeek |
| 165 | }); | 165 | }); |
| 166 | - } | 166 | + }*/ |
| 167 | + loger.warn("录制状态发送改变->更新当前的媒体文件数据->fileId:", GlobalConfig.activeMediaId, 'page:',GlobalConfig.activeMediaSeek); | ||
| 168 | + this.mediaSharedSeek({ | ||
| 169 | + "itemIdx": GlobalConfig.activeMediaId, | ||
| 170 | + "seek":GlobalConfig.activeMediaSeek | ||
| 171 | + }); | ||
| 167 | } | 172 | } |
| 168 | //清除当前媒体文件模块的数据 | 173 | //清除当前媒体文件模块的数据 |
| 169 | clearData(){ | 174 | clearData(){ |
| @@ -331,16 +336,17 @@ class MediaSharedApe extends Ape { | @@ -331,16 +336,17 @@ class MediaSharedApe extends Ape { | ||
| 331 | tableInsertApeHandler(_tableUpdateItems, _seekTime) { | 336 | tableInsertApeHandler(_tableUpdateItems, _seekTime) { |
| 332 | let tableInsertItems =_tableUpdateItems; | 337 | let tableInsertItems =_tableUpdateItems; |
| 333 | let tableInsertItemsLen = tableInsertItems.length; | 338 | let tableInsertItemsLen = tableInsertItems.length; |
| 334 | - loger.log('添加媒体文件->', "activeDocId->", GlobalConfig.activeMediaId, "tableUpdateItemsLen->", tableInsertItemsLen); | 339 | + loger.log('添加媒体文件->_seekTime:'+_seekTime, "activeMediaId->", GlobalConfig.activeMediaId, "tableUpdateItemsLen->", tableInsertItemsLen); |
| 335 | for (let i = 0; i < tableInsertItemsLen; ++i) { | 340 | for (let i = 0; i < tableInsertItemsLen; ++i) { |
| 336 | let insertItem = tableInsertItems[i]; | 341 | let insertItem = tableInsertItems[i]; |
| 337 | //this.tableInsertHandler(insertItem.owner, insertItem.itemIdx, insertItem.itemData); | 342 | //this.tableInsertHandler(insertItem.owner, insertItem.itemIdx, insertItem.itemData); |
| 338 | let itemDataInfo = this.unPackPdu(insertItem.owner, insertItem.itemIdx, insertItem.itemData); | 343 | let itemDataInfo = this.unPackPdu(insertItem.owner, insertItem.itemIdx, insertItem.itemData); |
| 339 | if(itemDataInfo){ | 344 | if(itemDataInfo){ |
| 345 | + itemDataInfo.seek=itemDataInfo.seek+parseInt(_seekTime);//seek是媒体文件自己的,_seekTime是录制回放时进度条换算的 | ||
| 340 | this.mediaSharedList[insertItem.itemIdx] = itemDataInfo; | 346 | this.mediaSharedList[insertItem.itemIdx] = itemDataInfo; |
| 341 | if (itemDataInfo.status == 1) { | 347 | if (itemDataInfo.status == 1) { |
| 342 | GlobalConfig.activeMediaId = itemDataInfo.itemIdx;//当前激活的媒体文件ID | 348 | GlobalConfig.activeMediaId = itemDataInfo.itemIdx;//当前激活的媒体文件ID |
| 343 | - GlobalConfig.activeMediaSeek = itemDataInfo.seek;//当前激活的媒体文件的当前页 | 349 | + GlobalConfig.activeMediaSeek = itemDataInfo.seek; |
| 344 | loger.log('添加媒体文件->设置当前激活的媒体文件id'); | 350 | loger.log('添加媒体文件->设置当前激活的媒体文件id'); |
| 345 | } | 351 | } |
| 346 | let getMediaPackFullInfo= this._mediaSharedPackFullInfo(itemDataInfo); | 352 | let getMediaPackFullInfo= this._mediaSharedPackFullInfo(itemDataInfo); |
| @@ -376,15 +382,16 @@ class MediaSharedApe extends Ape { | @@ -376,15 +382,16 @@ class MediaSharedApe extends Ape { | ||
| 376 | } | 382 | } |
| 377 | tableUpdateApeHandler(_tableUpdateItems, _seekTime) { | 383 | tableUpdateApeHandler(_tableUpdateItems, _seekTime) { |
| 378 | let tableUpdateItemsLen = _tableUpdateItems.length; | 384 | let tableUpdateItemsLen = _tableUpdateItems.length; |
| 379 | - loger.log('更新媒体文件->', "activeDocId->", GlobalConfig.activeMediaId, "更新的数量->", tableUpdateItemsLen); | 385 | + loger.log('更新媒体文件->_seekTime:'+_seekTime, "activeDocId->", GlobalConfig.activeMediaId, "更新的数量->", tableUpdateItemsLen); |
| 380 | for (let i = 0; i < tableUpdateItemsLen; ++i) { | 386 | for (let i = 0; i < tableUpdateItemsLen; ++i) { |
| 381 | let tableItem = _tableUpdateItems[i]; | 387 | let tableItem = _tableUpdateItems[i]; |
| 382 | let itemDataInfo = this.unPackPdu(tableItem.owner, tableItem.itemIdx, tableItem.itemData); | 388 | let itemDataInfo = this.unPackPdu(tableItem.owner, tableItem.itemIdx, tableItem.itemData); |
| 383 | if (itemDataInfo != null) { | 389 | if (itemDataInfo != null) { |
| 390 | + itemDataInfo.seek=itemDataInfo.seek+parseInt(_seekTime); | ||
| 384 | this.mediaSharedList[tableItem.itemIdx] = itemDataInfo; | 391 | this.mediaSharedList[tableItem.itemIdx] = itemDataInfo; |
| 385 | if (itemDataInfo && itemDataInfo.status ==1) { | 392 | if (itemDataInfo && itemDataInfo.status ==1) { |
| 386 | GlobalConfig.activeMediaId = itemDataInfo.itemIdx;//当前激活的媒体文件ID | 393 | GlobalConfig.activeMediaId = itemDataInfo.itemIdx;//当前激活的媒体文件ID |
| 387 | - GlobalConfig.activeMediaSeek = itemDataInfo.seek;//当前激活的媒体文件的当前页 | 394 | + GlobalConfig.activeMediaSeek = itemDataInfo.seek; |
| 388 | loger.log('更新媒体文件->设置当前激活的媒体文件id->', GlobalConfig.activeMediaId, "curPageNum->", GlobalConfig.activeMediaSeek); | 395 | loger.log('更新媒体文件->设置当前激活的媒体文件id->', GlobalConfig.activeMediaId, "curPageNum->", GlobalConfig.activeMediaSeek); |
| 389 | } | 396 | } |
| 390 | let getMediaPackFullInfo= this._mediaSharedPackFullInfo(itemDataInfo); | 397 | let getMediaPackFullInfo= this._mediaSharedPackFullInfo(itemDataInfo); |
| @@ -352,11 +352,9 @@ class VideoApe extends Ape { | @@ -352,11 +352,9 @@ class VideoApe extends Ape { | ||
| 352 | 352 | ||
| 353 | if (!videoSendPdu.isPublic && 0 != videoSendPdu.toNodeId) { | 353 | if (!videoSendPdu.isPublic && 0 != videoSendPdu.toNodeId) { |
| 354 | //发送给制定的人 | 354 | //发送给制定的人 |
| 355 | - //loger.log('发送私聊Video消息.'); | ||
| 356 | this.send(videoSendPdu); | 355 | this.send(videoSendPdu); |
| 357 | } else { | 356 | } else { |
| 358 | //发送给所有人 | 357 | //发送给所有人 |
| 359 | - //loger.log('发送公聊Video消息.'); | ||
| 360 | this.sendChatUniform(videoSendPdu); | 358 | this.sendChatUniform(videoSendPdu); |
| 361 | } | 359 | } |
| 362 | return {"code": ApeConsts.RETURN_SUCCESS, "data": ""}; | 360 | return {"code": ApeConsts.RETURN_SUCCESS, "data": ""}; |
| @@ -538,6 +536,21 @@ class VideoApe extends Ape { | @@ -538,6 +536,21 @@ class VideoApe extends Ape { | ||
| 538 | } | 536 | } |
| 539 | 537 | ||
| 540 | } | 538 | } |
| 539 | + //更新媒体文件模块的录制信息,每次开启录制的时候需要把当前媒体文件的信息更新一次 | ||
| 540 | + updaterRecordApeStatus(_param){ | ||
| 541 | + console.warn("录制状态发送改变->更新当前的状态->",this.mediaModule.mediaChannels); | ||
| 542 | + for (let i in this.mediaModule.mediaChannels){ | ||
| 543 | + let channelInfo=this.mediaModule.mediaChannels[i]; | ||
| 544 | + if(channelInfo){ | ||
| 545 | + if(channelInfo.status==ApeConsts.CHANNEL_STATUS_RELEASED){ | ||
| 546 | + channelInfo.owner=0; | ||
| 547 | + }else { | ||
| 548 | + channelInfo.owner=channelInfo.fromNodeId; | ||
| 549 | + } | ||
| 550 | + this.sendTableUpdateHandler(channelInfo); | ||
| 551 | + } | ||
| 552 | + } | ||
| 553 | + } | ||
| 541 | 554 | ||
| 542 | //清除当前模块的数据 | 555 | //清除当前模块的数据 |
| 543 | clearData(){ | 556 | clearData(){ |
| @@ -547,7 +560,6 @@ class VideoApe extends Ape { | @@ -547,7 +560,6 @@ class VideoApe extends Ape { | ||
| 547 | 560 | ||
| 548 | ///////数据的封包和解包///////////////////////////////////////// | 561 | ///////数据的封包和解包///////////////////////////////////////// |
| 549 | packPdu(_param, _itemIdx) { | 562 | packPdu(_param, _itemIdx) { |
| 550 | - loger.log("packPdu "); | ||
| 551 | //验证坐标点集合数组是否合法 | 563 | //验证坐标点集合数组是否合法 |
| 552 | if (_param == null || _itemIdx == null) { | 564 | if (_param == null || _itemIdx == null) { |
| 553 | this._emit(MessageTypes.MCU_ERROR, MessageTypes.ERR_APE_INTERFACE_PARAM_WRONG); | 565 | this._emit(MessageTypes.MCU_ERROR, MessageTypes.ERR_APE_INTERFACE_PARAM_WRONG); |
| @@ -564,13 +576,13 @@ class VideoApe extends Ape { | @@ -564,13 +576,13 @@ class VideoApe extends Ape { | ||
| 564 | packPduModel.userId =_param.userId||"0"; | 576 | packPduModel.userId =_param.userId||"0"; |
| 565 | packPduModel.mediaType =_param.mediaType|| ApeConsts.MEDIA_TYPE_VIDEO; | 577 | packPduModel.mediaType =_param.mediaType|| ApeConsts.MEDIA_TYPE_VIDEO; |
| 566 | packPduModel.timestamp =_param.timestamp||0; | 578 | packPduModel.timestamp =_param.timestamp||0; |
| 567 | - packPduModel.fromNodeId = GlobalConfig.nodeId; | ||
| 568 | - packPduModel.userName=GlobalConfig.userName||""; | 579 | + packPduModel.fromNodeId = _param.nodeId||GlobalConfig.nodeId; |
| 580 | + packPduModel.userName=_param.userName||GlobalConfig.userName; | ||
| 569 | packPduModel.toNodeId = 0; | 581 | packPduModel.toNodeId = 0; |
| 570 | - packPduModel.userRole=GlobalConfig.userRole||ApeConsts.normal; | 582 | + packPduModel.userRole=_param.userRole||GlobalConfig.userRole; |
| 571 | packPduModel.screenWidth=_param.screenWidth||GlobalConfig.screenWidth; | 583 | packPduModel.screenWidth=_param.screenWidth||GlobalConfig.screenWidth; |
| 572 | packPduModel.screenHeight=_param.screenHeight||GlobalConfig.screenHeight; | 584 | packPduModel.screenHeight=_param.screenHeight||GlobalConfig.screenHeight; |
| 573 | - loger.log(packPduModel); | 585 | + loger.log('packPdu->',packPduModel); |
| 574 | return packPduModel; | 586 | return packPduModel; |
| 575 | } | 587 | } |
| 576 | 588 |
| @@ -65,8 +65,8 @@ class WhiteBoardApe extends Ape { | @@ -65,8 +65,8 @@ class WhiteBoardApe extends Ape { | ||
| 65 | this.insertHistory = [];//添加的白板记录,用于撤回操作 | 65 | this.insertHistory = [];//添加的白板记录,用于撤回操作 |
| 66 | } | 66 | } |
| 67 | //更新文档模块的录制信息,每次开启录制的时候需要把当前文档的信息更新一次 | 67 | //更新文档模块的录制信息,每次开启录制的时候需要把当前文档的信息更新一次 |
| 68 | - updaterRecordStatus(_param){ | ||
| 69 | - if(GlobalConfig.isHost&&!GlobalConfig.isRecordPlayBack){ | 68 | + updaterRecordApeStatus(_param){ |
| 69 | + /* if(GlobalConfig.isHost&&!GlobalConfig.isRecordPlayBack){ | ||
| 70 | let curPageAnnos={}; | 70 | let curPageAnnos={}; |
| 71 | for (let key in this.annoInfos) { | 71 | for (let key in this.annoInfos) { |
| 72 | let item = this.annoInfos[key]; | 72 | let item = this.annoInfos[key]; |
| @@ -80,6 +80,19 @@ class WhiteBoardApe extends Ape { | @@ -80,6 +80,19 @@ class WhiteBoardApe extends Ape { | ||
| 80 | }else { | 80 | }else { |
| 81 | loger.log("开启录制成功->当前没有标注数据需要更新->docId:", GlobalConfig.activeDocId, 'page:',GlobalConfig.activeDocCurPage); | 81 | loger.log("开启录制成功->当前没有标注数据需要更新->docId:", GlobalConfig.activeDocId, 'page:',GlobalConfig.activeDocCurPage); |
| 82 | } | 82 | } |
| 83 | + }*/ | ||
| 84 | + let curPageAnnos={}; | ||
| 85 | + for (let key in this.annoInfos) { | ||
| 86 | + let item = this.annoInfos[key]; | ||
| 87 | + if (item && item.parentId == GlobalConfig.activeDocId && item.curPageNo == GlobalConfig.activeDocCurPage) { | ||
| 88 | + curPageAnnos[key]=item; | ||
| 89 | + } | ||
| 90 | + } | ||
| 91 | + if(Object.keys(curPageAnnos).length>0){ | ||
| 92 | + loger.warn("录制状态发送改变->更新当前的标注数据->docId:", GlobalConfig.activeDocId, 'page:',GlobalConfig.activeDocCurPage); | ||
| 93 | + this.sendUpdaterAnnotaion({"itemIdxArr":curPageAnnos}); | ||
| 94 | + }else { | ||
| 95 | + loger.warn("录制状态发送改变->当前没有标注数据需要更新->docId:", GlobalConfig.activeDocId, 'page:',GlobalConfig.activeDocCurPage); | ||
| 83 | } | 96 | } |
| 84 | } | 97 | } |
| 85 | 98 |
-
请 注册 或 登录 后发表评论