1.优化白板标注模块发送的数据,对坐标点数组进行压缩优化,减少字节数;解压收到的坐标点数据还原成数组;目前这个版本能显示以前的数据,这个版本发送的标注,老版本的sdk将无法显示
正在显示
5 个修改的文件
包含
117 行增加
和
15 行删除
| @@ -58,7 +58,7 @@ export default class MessageEntrance extends Emiter { | @@ -58,7 +58,7 @@ export default class MessageEntrance extends Emiter { | ||
| 58 | constructor() { | 58 | constructor() { |
| 59 | super(); | 59 | super(); |
| 60 | //sdk 信息 | 60 | //sdk 信息 |
| 61 | - GlobalConfig.sdkVersion = "v1.78.4.20170820"; | 61 | + GlobalConfig.sdkVersion = "v1.79.3.20170821"; |
| 62 | loger.warn("sdkVersion:" + GlobalConfig.sdkVersion); | 62 | loger.warn("sdkVersion:" + GlobalConfig.sdkVersion); |
| 63 | 63 | ||
| 64 | //设置 | 64 | //设置 |
| @@ -15,17 +15,17 @@ class EngineUtils{ | @@ -15,17 +15,17 @@ class EngineUtils{ | ||
| 15 | try{ | 15 | try{ |
| 16 | return JSON.stringify(_param); | 16 | return JSON.stringify(_param); |
| 17 | }catch (err){ | 17 | }catch (err){ |
| 18 | - console.log("arrayToJsonString error:"+err.message); | 18 | + console.warn("数组转JSON失败->ERROR:"+err.message); |
| 19 | } | 19 | } |
| 20 | - return null; | 20 | + return ""; |
| 21 | } | 21 | } |
| 22 | static arrayFromJsonString(_param){ | 22 | static arrayFromJsonString(_param){ |
| 23 | try{ | 23 | try{ |
| 24 | return JSON.parse(_param); | 24 | return JSON.parse(_param); |
| 25 | }catch (err){ | 25 | }catch (err){ |
| 26 | - console.log("arrayFromJsonString error:"+err.message); | 26 | + console.warn("JSON转数组失败->ERROR:"+err.message); |
| 27 | } | 27 | } |
| 28 | - return null; | 28 | + return []; |
| 29 | } | 29 | } |
| 30 | 30 | ||
| 31 | //生成时间戳后9位 保证唯一 | 31 | //生成时间戳后9位 保证唯一 |
| @@ -91,7 +91,106 @@ class EngineUtils{ | @@ -91,7 +91,106 @@ class EngineUtils{ | ||
| 91 | console.log("objectFromBase64 err:"+err.message); | 91 | console.log("objectFromBase64 err:"+err.message); |
| 92 | return null; | 92 | return null; |
| 93 | } | 93 | } |
| 94 | - return null | 94 | + return null; |
| 95 | + } | ||
| 96 | + //优化压缩坐标点数组,去除一些连续重复坐标的点,返回一个数组 | ||
| 97 | + static compressPoint(_arr){ | ||
| 98 | + if(!_arr){ | ||
| 99 | + return []; | ||
| 100 | + } | ||
| 101 | + if(_arr.length<5){ | ||
| 102 | + //点,直线,矩形 坐标点小于5不需要处理 | ||
| 103 | + return _arr; | ||
| 104 | + } | ||
| 105 | + let tempPointArr=_arr; | ||
| 106 | + let newPointArr=[]; | ||
| 107 | + newPointArr.push(tempPointArr[0]); | ||
| 108 | + let lastW=tempPointArr[0].w; | ||
| 109 | + let continueNum=0;//坐标相同的连续次数 | ||
| 110 | + //先筛除水平方向的连续重复坐标点 | ||
| 111 | + let len=tempPointArr.length-1; | ||
| 112 | + for(let i=1;i<len;i++){ | ||
| 113 | + let item=tempPointArr[i]; | ||
| 114 | + if(item&&item.w!=lastW){ | ||
| 115 | + lastW=item.w; | ||
| 116 | + if(continueNum>0){ | ||
| 117 | + newPointArr.push(tempPointArr[i-1]); | ||
| 118 | + } | ||
| 119 | + newPointArr.push(item); | ||
| 120 | + continueNum=0; | ||
| 121 | + }else { | ||
| 122 | + continueNum++; | ||
| 123 | + } | ||
| 124 | + } | ||
| 125 | + //如果最终的坐标点数量小于2,需要把最后一个坐标点添加 | ||
| 126 | + if(tempPointArr[len]){ | ||
| 127 | + newPointArr.push(tempPointArr[len]); | ||
| 128 | + } | ||
| 129 | + //如果坐标点已经小于等于2不需要继续检测 | ||
| 130 | + if(newPointArr.length<=2){ | ||
| 131 | + return newPointArr; | ||
| 132 | + } | ||
| 133 | + | ||
| 134 | + //筛除水垂直向的连续重复坐标点 | ||
| 135 | + let finalPointArr=[]; | ||
| 136 | + finalPointArr.push(newPointArr[0]); | ||
| 137 | + let lastH=newPointArr[0].h; | ||
| 138 | + continueNum=0; | ||
| 139 | + len=newPointArr.length-1; | ||
| 140 | + for(let k=1;k<len;k++){ | ||
| 141 | + let item=newPointArr[k]; | ||
| 142 | + if(item&&item.h!=lastH){ | ||
| 143 | + lastH=item.h; | ||
| 144 | + if(continueNum>0){ | ||
| 145 | + finalPointArr.push(newPointArr[k-1]); | ||
| 146 | + } | ||
| 147 | + finalPointArr.push(item); | ||
| 148 | + continueNum=0; | ||
| 149 | + }else { | ||
| 150 | + continueNum++; | ||
| 151 | + } | ||
| 152 | + } | ||
| 153 | + if(newPointArr[len]){ | ||
| 154 | + finalPointArr.push(newPointArr[len]); | ||
| 155 | + } | ||
| 156 | + return finalPointArr; | ||
| 157 | + } | ||
| 158 | + //压缩数据,把坐标点数组转换为字符串,返回字符串 | ||
| 159 | + static optimizePoint(_pointGroup){ | ||
| 160 | + if(!_pointGroup){ | ||
| 161 | + return ""; | ||
| 162 | + } | ||
| 163 | + let tempStr=""; | ||
| 164 | + try { | ||
| 165 | + tempStr=JSON.stringify(_pointGroup); | ||
| 166 | + }catch (err){ | ||
| 167 | + return ""; | ||
| 168 | + } | ||
| 169 | + let regexp1=/},{"w":/g; | ||
| 170 | + let regexp2=/,"h":/g; | ||
| 171 | + tempStr=tempStr.replace(regexp1,"#"); | ||
| 172 | + tempStr=tempStr.replace(regexp2,"&"); | ||
| 173 | + //console.log("标注压缩后的字符长度->",tempStr.length); | ||
| 174 | + return tempStr; | ||
| 175 | + } | ||
| 176 | + //把字符串坐标点集合转换为数组,返回数组的JSON | ||
| 177 | + static unPackOptimizePoint(_str){ | ||
| 178 | + if(!_str){ | ||
| 179 | + return ""; | ||
| 180 | + } | ||
| 181 | + let tempStr=_str; | ||
| 182 | + let regexp1=/#/g; | ||
| 183 | + let regexp2=/&/g; | ||
| 184 | + tempStr=tempStr.replace(regexp1,'},{"w":'); | ||
| 185 | + tempStr=tempStr.replace(regexp2,',"h":'); | ||
| 186 | + | ||
| 187 | + let dataArr=[]; | ||
| 188 | + try { | ||
| 189 | + dataArr=JSON.parse(tempStr); | ||
| 190 | + }catch (err){ | ||
| 191 | + | ||
| 192 | + } | ||
| 193 | + return dataArr; | ||
| 95 | } | 194 | } |
| 96 | } | 195 | } |
| 97 | export default EngineUtils; | 196 | export default EngineUtils; |
| @@ -570,8 +570,8 @@ class RecordPlayBackParse extends Emiter { | @@ -570,8 +570,8 @@ class RecordPlayBackParse extends Emiter { | ||
| 570 | for (let i = 0; i < messageItem.length; i++) { | 570 | for (let i = 0; i < messageItem.length; i++) { |
| 571 | this._everSocketMsgReceivedHandler(messageItem[i].byteData, 0); | 571 | this._everSocketMsgReceivedHandler(messageItem[i].byteData, 0); |
| 572 | counter++; | 572 | counter++; |
| 573 | - if(counter>100){ | ||
| 574 | - loger.warn("SEEK->最多处理历史消息100条"); | 573 | + if(counter>40){ |
| 574 | + loger.warn("SEEK->最多处理历史消息40条"); | ||
| 575 | return; | 575 | return; |
| 576 | } | 576 | } |
| 577 | } | 577 | } |
| @@ -286,13 +286,12 @@ class VideoApe extends Ape { | @@ -286,13 +286,12 @@ class VideoApe extends Ape { | ||
| 286 | } | 286 | } |
| 287 | //释放nodeId占用的所有频道 | 287 | //释放nodeId占用的所有频道 |
| 288 | _releaseNodeIdAllChannel(nodeId){ | 288 | _releaseNodeIdAllChannel(nodeId){ |
| 289 | - loger.log(nodeId,"_releaseNodeIdAllChannel",this.mcu.connected); | ||
| 290 | if(!this.mcu.connected){ | 289 | if(!this.mcu.connected){ |
| 291 | clearTimeout(this.releaseTimeId); | 290 | clearTimeout(this.releaseTimeId); |
| 292 | loger.warn(GlobalConfig.getCurrentStatus()); | 291 | loger.warn(GlobalConfig.getCurrentStatus()); |
| 293 | return {"code": ApeConsts.RETURN_FAILED, "data": "已经断开连接"}; | 292 | return {"code": ApeConsts.RETURN_FAILED, "data": "已经断开连接"}; |
| 294 | } | 293 | } |
| 295 | - | 294 | + loger.log("释放nodeId占用的所有频道->",nodeId); |
| 296 | let openingChannelInfo = this.mediaModule.getOpeningMediaChannelForNodeId(nodeId); | 295 | let openingChannelInfo = this.mediaModule.getOpeningMediaChannelForNodeId(nodeId); |
| 297 | if (openingChannelInfo.channelId== 0) { | 296 | if (openingChannelInfo.channelId== 0) { |
| 298 | loger.warn(nodeId,"没有占用channel不需要处理"); | 297 | loger.warn(nodeId,"没有占用channel不需要处理"); |
| @@ -335,13 +334,13 @@ class VideoApe extends Ape { | @@ -335,13 +334,13 @@ class VideoApe extends Ape { | ||
| 335 | return {"code": ApeConsts.RETURN_FAILED, "data": "sendVideoCommandMsg失败,参数错误"}; | 334 | return {"code": ApeConsts.RETURN_FAILED, "data": "sendVideoCommandMsg失败,参数错误"}; |
| 336 | } | 335 | } |
| 337 | // to, message | 336 | // to, message |
| 338 | - loger.log('发送Video消息.', _param); | 337 | + loger.log('视频模块广播消息.', _param); |
| 339 | 338 | ||
| 340 | if (_param.actionType != null && _param.actionType == ApeConsts.MEDIA_ACTION_OPEN_CAMERA) { | 339 | if (_param.actionType != null && _param.actionType == ApeConsts.MEDIA_ACTION_OPEN_CAMERA) { |
| 341 | //判断当前开启的视频数量是否已经是最大值,如果已经是最大值,不能再开启 | 340 | //判断当前开启的视频数量是否已经是最大值,如果已经是最大值,不能再开启 |
| 342 | let freeChannel = this.mediaModule.getFreeMediaChannel(); | 341 | let freeChannel = this.mediaModule.getFreeMediaChannel(); |
| 343 | if (freeChannel == 0) { | 342 | if (freeChannel == 0) { |
| 344 | - loger.warn('sendVideoCommandMsg,不能再打开更多的设备', _param); | 343 | + loger.warn('视频模块广播消息->不能再打开更多的设备', _param); |
| 345 | return {"code": ApeConsts.RETURN_FAILED, "data": "不能再打开更多的设备","mediaChannels":this.mediaModule.mediaChannels}; | 344 | return {"code": ApeConsts.RETURN_FAILED, "data": "不能再打开更多的设备","mediaChannels":this.mediaModule.mediaChannels}; |
| 346 | } | 345 | } |
| 347 | } | 346 | } |
| @@ -458,7 +458,10 @@ class WhiteBoardApe extends Ape { | @@ -458,7 +458,10 @@ class WhiteBoardApe extends Ape { | ||
| 458 | whiteBoardModelPdu.parentId = GlobalConfig.activeDocId;//当前激活的文档id | 458 | whiteBoardModelPdu.parentId = GlobalConfig.activeDocId;//当前激活的文档id |
| 459 | whiteBoardModelPdu.curPageNo = GlobalConfig.activeDocCurPage;//当前激活的文档页码 | 459 | whiteBoardModelPdu.curPageNo = GlobalConfig.activeDocCurPage;//当前激活的文档页码 |
| 460 | 460 | ||
| 461 | - whiteBoardModelPdu.pointGroup = EngineUtils.arrayToJsonString(_param.pointGroup); | 461 | + let compressPointArr=EngineUtils.compressPoint(_param.pointGroup);//优化坐标点,去除一些连续重复的点 |
| 462 | + let pointGroupStr=EngineUtils.optimizePoint(compressPointArr);//数组转换为JSON字符串,压缩数据 | ||
| 463 | + //console.log("发送压缩后的标注->",pointGroupStr); | ||
| 464 | + whiteBoardModelPdu.pointGroup = pointGroupStr||''; | ||
| 462 | whiteBoardModelPdu.color = _param.color || "#000000"; | 465 | whiteBoardModelPdu.color = _param.color || "#000000"; |
| 463 | whiteBoardModelPdu.thickness = _param.thickness || 1; | 466 | whiteBoardModelPdu.thickness = _param.thickness || 1; |
| 464 | 467 | ||
| @@ -469,8 +472,9 @@ class WhiteBoardApe extends Ape { | @@ -469,8 +472,9 @@ class WhiteBoardApe extends Ape { | ||
| 469 | try { | 472 | try { |
| 470 | //loger.log("白板标注数据->unPackPdu"); | 473 | //loger.log("白板标注数据->unPackPdu"); |
| 471 | let whiteBoardModelPdu = pdu['RCWhiteBoardDataModelPdu'].decode(itemData); | 474 | let whiteBoardModelPdu = pdu['RCWhiteBoardDataModelPdu'].decode(itemData); |
| 472 | - let _pointGroup = EngineUtils.arrayFromJsonString(whiteBoardModelPdu.pointGroup); | ||
| 473 | - whiteBoardModelPdu.pointGroup = _pointGroup; | 475 | + //let _pointGroup = EngineUtils.arrayFromJsonString(whiteBoardModelPdu.pointGroup); |
| 476 | + let pointGroup=EngineUtils.unPackOptimizePoint(whiteBoardModelPdu.pointGroup);//还原压缩后的数据 | ||
| 477 | + whiteBoardModelPdu.pointGroup = pointGroup; | ||
| 474 | this.annoInfos[itemIdx] = whiteBoardModelPdu; | 478 | this.annoInfos[itemIdx] = whiteBoardModelPdu; |
| 475 | return whiteBoardModelPdu; | 479 | return whiteBoardModelPdu; |
| 476 | } catch (err) { | 480 | } catch (err) { |
-
请 注册 或 登录 后发表评论