李勇

1.优化白板标注模块发送的数据,对坐标点数组进行压缩优化,减少字节数;解压收到的坐标点数据还原成数组;目前这个版本能显示以前的数据,这个版本发送的标注,老版本的sdk将无法显示

@@ -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) {