Commit f82dd1bdf831288c769f54796e5cf8130edb993b
1 parent
fd94cb80
优化
Showing
13 changed files
with
301 additions
and
120 deletions
src/main/java/com/genersoft/iot/vmp/conf/StreamProxyTask.java
src/main/java/com/genersoft/iot/vmp/service/impl/StreamProxyServiceImpl.java
| ... | ... | @@ -423,6 +423,9 @@ public class StreamProxyServiceImpl implements IStreamProxyService { |
| 423 | 423 | updateStreamProxy(streamProxy); |
| 424 | 424 | } else if (jsonObject.getInteger("code") == -1) { |
| 425 | 425 | redisTemplate.opsForValue().set("stream:status:" + stream, "1", 30, TimeUnit.SECONDS); |
| 426 | + if(StringUtils.equals(jsonObject.getString("msg"),"This stream already exists" )){ | |
| 427 | + redisTemplate.opsForValue().set("stream:status:" + stream, "2", 30, TimeUnit.SECONDS); | |
| 428 | + } | |
| 426 | 429 | } else { |
| 427 | 430 | logger.info("启用代理失败: {}/{}->{}({})", app, stream, jsonObject.getString("msg"), |
| 428 | 431 | streamProxy.getSrcUrl() == null ? streamProxy.getUrl() : streamProxy.getSrcUrl()); | ... | ... |
src/main/java/com/genersoft/iot/vmp/service/impl/StremProxyService1078Impl.java
| ... | ... | @@ -58,14 +58,13 @@ public class StremProxyService1078Impl implements StremProxyService1078 { |
| 58 | 58 | |
| 59 | 59 | String url = null; |
| 60 | 60 | try { |
| 61 | - url = StringUtils.replace(this.jt1078ConfigBean.getJt1078Url(), "{0}", this.jt1078ConfigBean.getJt1078SendPort()); | |
| 61 | + url = StringUtils.replace(this.jt1078ConfigBean.getJt1078Url(), "{0}", this.jt1078ConfigBean.getStopSendPort()); | |
| 62 | 62 | HttpClientPostEntity entity = httpClientUtil.doPost(url, msg, null); |
| 63 | 63 | |
| 64 | 64 | url = jt1078ConfigBean.formatStopPushURL(stream, port, httpPort); |
| 65 | 65 | httpClientUtil.doGet(url, null); |
| 66 | 66 | |
| 67 | 67 | |
| 68 | - | |
| 69 | 68 | if (Objects.isNull(entity)) { |
| 70 | 69 | log.info("HttpClientPostEntity is null"); |
| 71 | 70 | } else { | ... | ... |
src/main/java/com/genersoft/iot/vmp/vmanager/jt1078/platform/Jt1078OfCarController.java
| ... | ... | @@ -12,8 +12,10 @@ import com.alibaba.fastjson2.JSONObject; |
| 12 | 12 | import com.genersoft.iot.vmp.conf.MediaConfig; |
| 13 | 13 | import com.genersoft.iot.vmp.conf.StreamProxyTask; |
| 14 | 14 | import com.genersoft.iot.vmp.conf.exception.ControllerException; |
| 15 | +import com.genersoft.iot.vmp.media.zlm.ZLMRESTfulUtils; | |
| 15 | 16 | import com.genersoft.iot.vmp.media.zlm.dto.StreamProxyItem; |
| 16 | 17 | import com.genersoft.iot.vmp.media.zlm.dto.StreamPushItem; |
| 18 | +import com.genersoft.iot.vmp.service.IStreamProxyService; | |
| 17 | 19 | import com.genersoft.iot.vmp.service.IStreamPushService; |
| 18 | 20 | import com.genersoft.iot.vmp.service.StremProxyService1078; |
| 19 | 21 | import com.genersoft.iot.vmp.vmanager.bean.StreamContent; |
| ... | ... | @@ -91,6 +93,8 @@ public class Jt1078OfCarController { |
| 91 | 93 | private StremProxyService1078 stremProxyService1078; |
| 92 | 94 | private static final long TIME_COUNT = 300000L; |
| 93 | 95 | private Date tokenDate; |
| 96 | + @Autowired | |
| 97 | + private IStreamProxyService streamProxyService; | |
| 94 | 98 | |
| 95 | 99 | @Value("${spring.profiles.active}") |
| 96 | 100 | private String profilesActive; |
| ... | ... | @@ -198,30 +202,27 @@ public class Jt1078OfCarController { |
| 198 | 202 | this.redisTemplate.opsForValue().set("tag:history:httpPort:" + stream, entity.getHttpPort(), 2L, TimeUnit.DAYS); |
| 199 | 203 | this.redisTemplate.opsForValue().set("tag:history:httpPort:time:" + stream, (new Date()).getTime(), StreamProxyTask.TIME_OUT, TimeUnit.SECONDS); |
| 200 | 204 | msg = this.jt1078ConfigBean.formatMessageId(sim, channel, this.rtspConfigBean, entity.getPort()); |
| 201 | - entity = this.httpClientUtil.doPost(url, msg, (String) null); | |
| 205 | + HttpClientPostEntity entity1 = this.httpClientUtil.doPost(url, msg, (String) null); | |
| 202 | 206 | Map<String, Object> resultMap1 = this.chooseEntity(entity, url, false); |
| 203 | 207 | if (Objects.nonNull(resultMap1)) { |
| 204 | 208 | return resultMap1; |
| 205 | 209 | } |
| 206 | 210 | |
| 207 | - log.info(entity.getResultStr()); | |
| 208 | - Thread.sleep(2000L); | |
| 209 | - this.createStreamProxy(sim + "-" + channel); | |
| 210 | - Map<String, Object> resultMap2 = this.getStreamContent(stream); | |
| 211 | + log.info(entity1.getResultStr()); | |
| 212 | + this.createStreamProxy(sim + "-" + channel, entity.getHttpPort()); | |
| 213 | + Map<String, Object> resultMap2 = this.getStreamContent(stream, entity.getHttpPort()); | |
| 211 | 214 | if (Objects.nonNull(resultMap2) && Objects.nonNull(resultMap2.get("code")) && !StringUtils.equals(resultMap2.get("code").toString(), "1")) { |
| 212 | 215 | return resultMap2; |
| 213 | 216 | } |
| 214 | 217 | |
| 215 | 218 | streamContent = (StreamContent) resultMap2.get("streamContent"); |
| 216 | - }else{ | |
| 217 | - resultMap.put("port", redisTemplate.opsForValue().get("tag:history:port:"+stream)); | |
| 218 | - resultMap.put("httpPort", redisTemplate.opsForValue().get("tag:history:httpPort:"+stream)); | |
| 219 | + } else { | |
| 220 | + resultMap.put("port", redisTemplate.opsForValue().get("tag:history:port:" + stream)); | |
| 221 | + resultMap.put("httpPort", redisTemplate.opsForValue().get("tag:history:httpPort:" + stream)); | |
| 219 | 222 | resultMap.put("stream", stream); |
| 220 | 223 | } |
| 221 | 224 | |
| 222 | 225 | |
| 223 | - | |
| 224 | - | |
| 225 | 226 | resultMap.put("code", "1"); |
| 226 | 227 | resultMap.put("message", "OK"); |
| 227 | 228 | resultMap.put("data", streamContent); |
| ... | ... | @@ -253,7 +254,7 @@ public class Jt1078OfCarController { |
| 253 | 254 | return resultMap1; |
| 254 | 255 | } else { |
| 255 | 256 | try { |
| 256 | - this.streamProxyController.del(stream, stream); | |
| 257 | + this.streamProxyController.del("schedule", stream); | |
| 257 | 258 | List<StreamPushItem> streamPushItems = this.streamPushService.getPushList(stream); |
| 258 | 259 | int count = CollectionUtils.size(streamPushItems); |
| 259 | 260 | |
| ... | ... | @@ -261,6 +262,60 @@ public class Jt1078OfCarController { |
| 261 | 262 | StreamPushItem item = streamPushItems.get(i); |
| 262 | 263 | |
| 263 | 264 | try { |
| 265 | + this.streamProxyController.del(item.getApp(), item.getStream()); | |
| 266 | + this.streamPushService.stop(item.getApp(), item.getStream()); | |
| 267 | + } catch (Exception var13) { | |
| 268 | + Exception e = var13; | |
| 269 | + log.error("推流停止失败,[{}]", item, e); | |
| 270 | + } | |
| 271 | + } | |
| 272 | + | |
| 273 | + resultMap.put("code", "1"); | |
| 274 | + resultMap.put("message", "OK"); | |
| 275 | + return resultMap; | |
| 276 | + } catch (Exception var14) { | |
| 277 | + resultMap.put("code", "-20"); | |
| 278 | + resultMap.put("msg", "发送停止推流指令异常"); | |
| 279 | + return resultMap; | |
| 280 | + } | |
| 281 | + } | |
| 282 | + } | |
| 283 | + } | |
| 284 | + | |
| 285 | + @GetMapping({"/send/stop/io/{sim}/{channel}"}) | |
| 286 | + public Map<String, Object> sendIORequestStop(@PathVariable String sim, @PathVariable String channel) { | |
| 287 | + Map<String, Object> resultMap = new HashMap(); | |
| 288 | + if (StringUtils.isBlank(sim)) { | |
| 289 | + resultMap.put("code", "-100"); | |
| 290 | + resultMap.put("msg", "sim 不能为空"); | |
| 291 | + return resultMap; | |
| 292 | + } else if (StringUtils.isBlank(channel)) { | |
| 293 | + resultMap.put("code", "-100"); | |
| 294 | + resultMap.put("msg", "channel 不能为空"); | |
| 295 | + return resultMap; | |
| 296 | + } else { | |
| 297 | + String stream = StringUtils.join(new String[]{sim, "-", channel}); | |
| 298 | + Integer port = (Integer) redisTemplate.opsForValue().get("tag:history:port:" + stream); | |
| 299 | + Integer httpPort = (Integer) redisTemplate.opsForValue().get("tag:history:httpPort:" + stream); | |
| 300 | + if (Objects.isNull(port) || Objects.isNull(httpPort)) { | |
| 301 | + resultMap.put("code", "1"); | |
| 302 | + resultMap.put("message", "OK"); | |
| 303 | + return resultMap; | |
| 304 | + } | |
| 305 | + Map<String, Object> resultMap1 = this.stremProxyService1078.sendIORequestStop(sim, channel, stream, port, httpPort); | |
| 306 | + if (Objects.nonNull(resultMap1) && Objects.nonNull(resultMap1.get("code")) && !StringUtils.equals(resultMap1.get("code").toString(), "1")) { | |
| 307 | + return resultMap1; | |
| 308 | + } else { | |
| 309 | + try { | |
| 310 | + this.streamProxyController.del("schedule", stream); | |
| 311 | + List<StreamPushItem> streamPushItems = this.streamPushService.getPushList(stream); | |
| 312 | + int count = CollectionUtils.size(streamPushItems); | |
| 313 | + | |
| 314 | + for (int i = 0; i < count; ++i) { | |
| 315 | + StreamPushItem item = streamPushItems.get(i); | |
| 316 | + | |
| 317 | + try { | |
| 318 | + this.streamProxyController.del(item.getApp(), item.getStream()); | |
| 264 | 319 | this.streamPushService.stop(item.getApp(), item.getStream()); |
| 265 | 320 | } catch (Exception var13) { |
| 266 | 321 | Exception e = var13; |
| ... | ... | @@ -324,12 +379,12 @@ public class Jt1078OfCarController { |
| 324 | 379 | for (Object o : jsonArray) { |
| 325 | 380 | JSONObject jo = (JSONObject) o; |
| 326 | 381 | String startTimeStr = jo.getString("startTime"); |
| 327 | - if(StringUtils.isEmpty(startTimeStr)){ | |
| 382 | + if (StringUtils.isEmpty(startTimeStr)) { | |
| 328 | 383 | startTimeStr = StringUtils.join(String.valueOf(System.currentTimeMillis()), "-", String.valueOf(RandomUtils.nextInt(1, 1000))); |
| 329 | - }else{ | |
| 330 | - startTimeStr = StringUtils.replace(startTimeStr,"-",""); | |
| 331 | - startTimeStr = StringUtils.replace(startTimeStr,":",""); | |
| 332 | - startTimeStr = StringUtils.replace(startTimeStr," ",""); | |
| 384 | + } else { | |
| 385 | + startTimeStr = StringUtils.replace(startTimeStr, "-", ""); | |
| 386 | + startTimeStr = StringUtils.replace(startTimeStr, ":", ""); | |
| 387 | + startTimeStr = StringUtils.replace(startTimeStr, " ", ""); | |
| 333 | 388 | } |
| 334 | 389 | String channelMapping = StringUtils.join(new String[]{sim, "-", startTimeStr, "-", channel}); |
| 335 | 390 | jo.put("channelMapping", channelMapping); |
| ... | ... | @@ -379,13 +434,13 @@ public class Jt1078OfCarController { |
| 379 | 434 | return resultMap; |
| 380 | 435 | } else { |
| 381 | 436 | StreamContent streamContent = this.getStreamContentPlayURL(StringUtils.join(new String[]{channelMapping})); |
| 382 | - if(Objects.nonNull(streamContent) && StringUtils.isNotEmpty(streamContent.getWs_flv())){ | |
| 437 | + if (Objects.nonNull(streamContent) && StringUtils.isNotEmpty(streamContent.getWs_flv())) { | |
| 383 | 438 | resultMap.put("code", "1"); |
| 384 | 439 | log.info("StreamContent:[{}]", streamContent); |
| 385 | 440 | resultMap.put("data", streamContent); |
| 386 | 441 | |
| 387 | - resultMap.put("port", redisTemplate.opsForValue().get("tag:history:port:"+channelMapping)); | |
| 388 | - resultMap.put("httpPort", redisTemplate.opsForValue().get("tag:history:httpPort:"+channelMapping)); | |
| 442 | + resultMap.put("port", redisTemplate.opsForValue().get("tag:history:port:" + channelMapping)); | |
| 443 | + resultMap.put("httpPort", redisTemplate.opsForValue().get("tag:history:httpPort:" + channelMapping)); | |
| 389 | 444 | resultMap.put("stream", channelMapping); |
| 390 | 445 | return resultMap; |
| 391 | 446 | } |
| ... | ... | @@ -415,21 +470,20 @@ public class Jt1078OfCarController { |
| 415 | 470 | msg = this.jt1078ConfigBean.formatMessageHistoryPlayRTSP(sim, channel, startTime, endTime, this.rtspConfigBean, entity.getPort()); |
| 416 | 471 | |
| 417 | 472 | log.info("获取推流"); |
| 418 | - this.createStreamProxy(sim + "-" + channel); | |
| 473 | + this.createStreamProxy(sim + "-" + channel, entity.getHttpPort()); | |
| 419 | 474 | entity = this.httpClientUtil.doPost(url, msg, (String) null); |
| 420 | 475 | Map<String, Object> resultMap2 = this.chooseEntity(entity, url, true); |
| 421 | 476 | if (Objects.nonNull(resultMap2)) { |
| 422 | 477 | return resultMap2; |
| 423 | 478 | } else { |
| 424 | 479 | log.info(entity.getResultStr()); |
| 425 | - this.createStreamProxy(channelMapping); | |
| 480 | + this.createStreamProxy(channelMapping, entity.getHttpPort()); | |
| 426 | 481 | resultMap.put("code", "1"); |
| 427 | - Thread.sleep(2000L); | |
| 428 | - Map<String, Object> resultMap3 = this.getStreamContent(channelMapping); | |
| 482 | + Map<String, Object> resultMap3 = this.getStreamContent(channelMapping, entity.getHttpPort()); | |
| 429 | 483 | if (Objects.nonNull(resultMap3) && Objects.nonNull(resultMap3.get("code")) && !StringUtils.equals(resultMap3.get("code").toString(), "1")) { |
| 430 | 484 | return resultMap3; |
| 431 | 485 | } else { |
| 432 | - streamContent = (StreamContent) resultMap3.get("streamContent"); | |
| 486 | + streamContent = (StreamContent) resultMap3.get("streamContent"); | |
| 433 | 487 | if (Objects.isNull(streamContent)) { |
| 434 | 488 | resultMap.put("code", "-20"); |
| 435 | 489 | resultMap.put("msg", "新建链接错误,请稍后再试"); |
| ... | ... | @@ -468,70 +522,85 @@ public class Jt1078OfCarController { |
| 468 | 522 | } |
| 469 | 523 | |
| 470 | 524 | @Nullable |
| 471 | - private Map<String, Object> getStreamContent(String stream) throws InterruptedException { | |
| 472 | - StreamContent streamContent = null; | |
| 525 | + private Map<String, Object> getStreamContent(String stream, int httpPort) throws InterruptedException { | |
| 526 | + | |
| 473 | 527 | Map<String, Object> datas = new HashMap(); |
| 474 | - int index = 0; | |
| 528 | + StreamContent streamContent = requestStreamContent(1, stream, httpPort); | |
| 475 | 529 | |
| 476 | - Integer countTimeOut = 0; | |
| 530 | + if (Objects.isNull(streamContent) || StringUtils.isEmpty(streamContent.getWs_flv())) { | |
| 531 | + streamContent = new StreamContent(); | |
| 532 | + streamContent.setWs_flv(StringUtils.replace(this.jt1078ConfigBean.getWs(), "{stream}", stream)); | |
| 533 | + streamContent.setWss_flv(StringUtils.replace(this.jt1078ConfigBean.getWss(), "{stream}", stream)); | |
| 477 | 534 | |
| 478 | - do { | |
| 479 | - ++index; | |
| 480 | - streamContent = this.getStreamContentPlayURL(stream); | |
| 481 | - if (Objects.nonNull(streamContent) && StringUtils.isNotEmpty(streamContent.getWs_flv())) { | |
| 482 | - break; | |
| 483 | - } | |
| 484 | 535 | |
| 485 | - Object valObj = redisTemplate.opsForValue().get("stream:status:" + stream); | |
| 486 | - if (Objects.nonNull(valObj) && StringUtils.equals(valObj.toString(), "1")) { | |
| 487 | - StreamProxyItem streamProxyItem = streamProxyController.one("schedule",stream); | |
| 488 | - if(Objects.nonNull(streamProxyItem) && StringUtils.isNotEmpty(streamProxyItem.getApp())){ | |
| 489 | - try { | |
| 490 | - streamProxyController.start("schedule", stream); | |
| 491 | - } catch (Exception e) { | |
| 492 | - log.error(e.getMessage()); | |
| 493 | - } | |
| 494 | - }else{ | |
| 495 | - createStreamProxy(stream); | |
| 536 | + new Thread(new Runnable() { | |
| 537 | + @Override | |
| 538 | + public void run() { | |
| 539 | + requestStreamContent(100, stream, httpPort); | |
| 496 | 540 | } |
| 541 | + }).start(); | |
| 542 | + } | |
| 497 | 543 | |
| 544 | + log.info("StreamContent:[{}]", streamContent); | |
| 545 | + datas.put("code", "1"); | |
| 546 | + datas.put("streamContent", streamContent); | |
| 547 | + return datas; | |
| 548 | + } | |
| 498 | 549 | |
| 499 | - }else{ | |
| 500 | - Object val = this.redisTemplate.opsForValue().get("timeout:" + stream); | |
| 501 | - if (Objects.nonNull(val) && StringUtils.equals(val.toString(), "1")) { | |
| 502 | - | |
| 503 | - countTimeOut++; | |
| 504 | - try { | |
| 505 | - streamProxyController.start("schedule", stream); | |
| 506 | - } catch (Exception e) { | |
| 507 | - log.error(e.getMessage()); | |
| 508 | - } | |
| 550 | + private StreamContent requestStreamContent(int count, String stream, int httpPort) { | |
| 551 | + int index = 0; | |
| 552 | + StreamContent streamContent = null; | |
| 553 | + try { | |
| 554 | + do { | |
| 555 | + ++index; | |
| 556 | + streamContent = this.getStreamContentPlayURL(stream); | |
| 557 | + if (Objects.nonNull(streamContent) && StringUtils.isNotEmpty(streamContent.getWs_flv())) { | |
| 558 | + break; | |
| 509 | 559 | } |
| 510 | - } | |
| 511 | 560 | |
| 561 | + Object valObj = redisTemplate.opsForValue().get("stream:status:" + stream); | |
| 562 | + if (Objects.nonNull(valObj) && StringUtils.equals(valObj.toString(), "1")) { | |
| 563 | + StreamProxyItem streamProxyItem = streamProxyController.one("schedule", stream); | |
| 564 | + if (Objects.nonNull(streamProxyItem) && StringUtils.isNotEmpty(streamProxyItem.getApp())) { | |
| 565 | + try { | |
| 566 | + streamProxyController.start("schedule", stream); | |
| 567 | + } catch (Exception e) { | |
| 568 | + log.error(e.getMessage()); | |
| 569 | + } | |
| 570 | + } else { | |
| 571 | + createStreamProxy(stream, httpPort); | |
| 572 | + } | |
| 512 | 573 | |
| 513 | 574 | |
| 514 | - Thread.sleep(1000L); | |
| 515 | - log.info("===============>" + index); | |
| 516 | - } while (index < 20); | |
| 575 | + } else if (Objects.nonNull(valObj) && StringUtils.equals(valObj.toString(), "2")) { | |
| 576 | +// streamProxyService.del("schedule", stream); | |
| 577 | +// redisTemplate.delete("stream:status:" + stream); | |
| 578 | +// createStreamProxy(stream,httpPort); | |
| 579 | + } else { | |
| 580 | + Object val = this.redisTemplate.opsForValue().get("timeout:" + stream); | |
| 581 | + if (Objects.nonNull(val) && StringUtils.equals(val.toString(), "1")) { | |
| 582 | + try { | |
| 583 | + streamProxyController.start("schedule", stream); | |
| 584 | + } catch (Exception e) { | |
| 585 | + log.error(e.getMessage()); | |
| 586 | + } | |
| 587 | + } | |
| 588 | + } | |
| 589 | + if (index >= count) { | |
| 590 | + break; | |
| 591 | + } | |
| 517 | 592 | |
| 518 | - if (countTimeOut > 0) { | |
| 519 | - datas.put("code", "301"); | |
| 520 | - datas.put("msg", "获取摄像头视频数据失败,请稍后再试"); | |
| 521 | - return datas; | |
| 522 | - } | |
| 593 | + try { | |
| 594 | + Thread.sleep(1000L); | |
| 595 | + } catch (InterruptedException e) { | |
| 596 | + log.info(e.getMessage()); | |
| 597 | + } | |
| 598 | + } while (index < count); | |
| 523 | 599 | |
| 524 | - log.info("===============>" + index); | |
| 525 | - if (Objects.isNull(streamContent)) { | |
| 526 | - streamContent = new StreamContent(); | |
| 527 | - streamContent.setWs_flv(StringUtils.replace(this.jt1078ConfigBean.getWs(), "{stream}", stream)); | |
| 528 | - streamContent.setWss_flv(StringUtils.replace(this.jt1078ConfigBean.getWss(), "{stream}", stream)); | |
| 600 | + } catch (Exception e) { | |
| 601 | + log.error(e.getMessage()); | |
| 529 | 602 | } |
| 530 | - | |
| 531 | - log.info("StreamContent:[{}]", streamContent); | |
| 532 | - datas.put("code", "1"); | |
| 533 | - datas.put("streamContent", streamContent); | |
| 534 | - return datas; | |
| 603 | + return streamContent; | |
| 535 | 604 | } |
| 536 | 605 | |
| 537 | 606 | private StreamContent getStreamContentPlayURL(String stream) { |
| ... | ... | @@ -632,8 +701,13 @@ public class Jt1078OfCarController { |
| 632 | 701 | } |
| 633 | 702 | |
| 634 | 703 | private HttpClientPostEntity createServerLister(String channelMapping) throws URISyntaxException, IOException { |
| 704 | + | |
| 635 | 705 | Integer port = RandomUtils.nextInt(this.jt1078ConfigBean.getStart1078Port(), this.jt1078ConfigBean.getEnd1078Port()); |
| 636 | - Integer httPort = RandomUtils.nextInt(this.jt1078ConfigBean.getStart1078Port(), this.jt1078ConfigBean.getEnd1078Port()); | |
| 706 | + while (port % 2 == 1 || port == jt1078ConfigBean.getStart1078Port()) { | |
| 707 | + port = RandomUtils.nextInt(this.jt1078ConfigBean.getStart1078Port(), this.jt1078ConfigBean.getEnd1078Port()); | |
| 708 | + } | |
| 709 | + Integer httPort = 3333; | |
| 710 | + | |
| 637 | 711 | String url; |
| 638 | 712 | if (!Objects.equals(port, httPort) && Objects.nonNull(port)) { |
| 639 | 713 | url = "jt1078:server:port:" + port; |
| ... | ... | @@ -710,23 +784,46 @@ public class Jt1078OfCarController { |
| 710 | 784 | } |
| 711 | 785 | } |
| 712 | 786 | |
| 713 | - private void createStreamProxy(String stream) { | |
| 714 | - String url = StringUtils.replace(this.jt1078ConfigBean.getGetURL(), "{stream}", stream); | |
| 715 | - StreamProxyItem item = new StreamProxyItem(); | |
| 716 | - item.setApp("schedule"); | |
| 717 | - item.setEnable(true); | |
| 718 | - item.setEnableAudio(true); | |
| 719 | - item.setRtpType("default"); | |
| 720 | - item.setStream(stream); | |
| 721 | - item.setMediaServerId(this.mediaConfig.getId()); | |
| 722 | - item.setUrl(url); | |
| 723 | - item.setFfmpegCmdKey("ffmpeg.cmd"); | |
| 724 | - item.setEnable(true); | |
| 725 | - item.setEnableAudio(true); | |
| 726 | - item.setEnableMp4(false); | |
| 727 | - item.setEnableRemoveNoneReader(false); | |
| 728 | - item.setEnableDisableNoneReader(false); | |
| 729 | - item.setName(stream); | |
| 730 | - this.streamProxyController.save(item); | |
| 787 | + private void createStreamProxy(String stream, Integer port) throws URISyntaxException, IOException { | |
| 788 | + new Thread(new Runnable() { | |
| 789 | + @Override | |
| 790 | + public void run() { | |
| 791 | + int index = 0; | |
| 792 | + while (index < 100) { | |
| 793 | + index++; | |
| 794 | + try { | |
| 795 | + boolean flag = httpClientUtil.doGetNoResult(jt1078ConfigBean.formatVideoURL(stream)); | |
| 796 | + if (flag) { | |
| 797 | + String url = StringUtils.replace(jt1078ConfigBean.getGetURL(), "{stream}", stream); | |
| 798 | + url = StringUtils.replace(url, "{port}", port + ""); | |
| 799 | + StreamProxyItem item = new StreamProxyItem(); | |
| 800 | + item.setApp("schedule"); | |
| 801 | + item.setEnable(true); | |
| 802 | + item.setEnableAudio(true); | |
| 803 | + item.setRtpType("default"); | |
| 804 | + item.setStream(stream); | |
| 805 | + item.setMediaServerId(mediaConfig.getId()); | |
| 806 | + item.setUrl(url); | |
| 807 | + item.setFfmpegCmdKey("ffmpeg.cmd"); | |
| 808 | + item.setEnable(true); | |
| 809 | + item.setEnableAudio(true); | |
| 810 | + item.setEnableMp4(false); | |
| 811 | + item.setEnableRemoveNoneReader(false); | |
| 812 | + item.setEnableDisableNoneReader(false); | |
| 813 | + item.setName(stream); | |
| 814 | + streamProxyController.save(item); | |
| 815 | + break; | |
| 816 | + } | |
| 817 | + } catch (URISyntaxException e) { | |
| 818 | + log.info(e.getMessage()); | |
| 819 | + } catch (IOException e) { | |
| 820 | + log.info(e.getMessage()); | |
| 821 | + } | |
| 822 | + | |
| 823 | + } | |
| 824 | + } | |
| 825 | + }).start(); | |
| 826 | + | |
| 827 | + | |
| 731 | 828 | } |
| 732 | 829 | } | ... | ... |
src/main/java/com/genersoft/iot/vmp/vmanager/jt1078/platform/config/Jt1078ConfigBean.java
| 1 | -package com.genersoft.iot.vmp.vmanager.jt1078.platform.config; import com.genersoft.iot.vmp.vmanager.jt1078.platform.config.RtspConfigBean; import java.util.Objects; import org.apache.commons.lang3.StringUtils; import org.springframework.beans.factory.annotation.Value; import org.springframework.stereotype.Component; @Component public class Jt1078ConfigBean { @Value("${tuohua.bsth.jt1078.url}") private String jt1078Url; @Value("${tuohua.bsth.jt1078.sendPort}") private String jt1078SendPort; @Value("${tuohua.bsth.jt1078.stopSendPort}") private String stopSendPort; @Value("${tuohua.bsth.jt1078.historyListPort}") private String historyListPort; @Value("${tuohua.bsth.jt1078.playHistoryPort}") private String playHistoryPort; @Value("${tuohua.bsth.jt1078.ports}") private String portsOf1078; @Value("${tuohua.bsth.jt1078.pushURL}") private String pushURL; @Value("${tuohua.bsth.jt1078.stopPushURL}") private String stopPUshURL; private Integer start1078Port; private Integer end1078Port; @Value("${tuohua.bsth.jt1078.get.url}") private String getURL; @Value("${tuohua.bsth.jt1078.addPortVal}") private Integer addPort; @Value("${tuohua.bsth.jt1078.ws}") private String ws; @Value("${tuohua.bsth.jt1078.wss}") private String wss; private static final String SEND_IO_MESSAGE_RTSP = "{ \"messageId\": 37121, \"properties\": 0, \"clientId\": \"{clientId}\", \"serialNo\": \"1\", \"ip\": \"{ip}\", \"tcpPort\": \"{tcpPort}\", \"udpPort\": \"{udpPort}\", \"channelNo\": \"{channelNo}\", \"mediaType\": \"1\", \"streamType\": \"1\"}"; private static final String SEND_IO_MESSAGE_RTSP_STOP = "{\"messageId\": 37122,\"properties\": 0,\"clientId\": \"{clientId}\",\"serialNo\": \"1\",\"channelNo\": \"{channelNo}\",\"command\": \"0\",\"closeType\": \"0\",\"streamType\": \"1\"}"; private static final String SEND_IO_HISTORY_RTSP = "{\"msgid\":37381,\"clientId\":\"{clientId}\",\"startTime\":\"{startTime}\",\"endTime\":\"{endTime}\",\"mediaType\":0,\"streamType\":0,\"storageType\":0,\"channelId\":{channelNo}}"; private static final String SEND_IO_PLAY_RTSP = "{\"ip\":\"{ip}\",\"tcpPort\":{tcpPort},\"udpPort\":{udpPort},\"channelNo\":\"{channelNo}\",\"mediaType\":0,\"streamType\":0,\"storageType\":0,\"playbackType\":0,\"playbackSpeed\":1,\"startTime\":\"{startTime}\",\"endTime\":\"{endTime}\",\"clientId\":\"{sim}\",\"messageId\":37377}"; public String formatMessageId(String sim, String channel, RtspConfigBean configBean, Integer port) { String msg = StringUtils.replace("{ \"messageId\": 37121, \"properties\": 0, \"clientId\": \"{clientId}\", \"serialNo\": \"1\", \"ip\": \"{ip}\", \"tcpPort\": \"{tcpPort}\", \"udpPort\": \"{udpPort}\", \"channelNo\": \"{channelNo}\", \"mediaType\": \"1\", \"streamType\": \"1\"}", "{clientId}", sim); msg = StringUtils.replace(msg, "{tcpPort}", (port.intValue() + getAddPort().intValue()) + ""); msg = StringUtils.replace(msg, "{udpPort}", (port.intValue() + getAddPort().intValue()) + ""); msg = StringUtils.replace(msg, "{channelNo}", channel); return StringUtils.replace(msg, "{ip}", configBean.getRtspIp()); } public String formatMessageStop(String sim, String channel) { String msg = StringUtils.replace("{\"messageId\": 37122,\"properties\": 0,\"clientId\": \"{clientId}\",\"serialNo\": \"1\",\"channelNo\": \"{channelNo}\",\"command\": \"0\",\"closeType\": \"0\",\"streamType\": \"1\"}", "{clientId}", sim); return StringUtils.replace(msg, "{channelNo}", channel); } public String formatMessageHistoryListRTSP(String sim, String channel, String startTime, String endTime) { String msg = StringUtils.replace("{\"msgid\":37381,\"clientId\":\"{clientId}\",\"startTime\":\"{startTime}\",\"endTime\":\"{endTime}\",\"mediaType\":0,\"streamType\":0,\"storageType\":0,\"channelId\":{channelNo}}", "{clientId}", sim); msg = StringUtils.replace(msg, "{startTime}", startTime); msg = StringUtils.replace(msg, "{endTime}", endTime); return StringUtils.replace(msg, "{channelNo}", channel); } public String formatMessageHistoryPlayRTSP(String sim, String channel, String startTime, String endTime, RtspConfigBean configBean, Integer port) { String msg = StringUtils.replace("{\"ip\":\"{ip}\",\"tcpPort\":{tcpPort},\"udpPort\":{udpPort},\"channelNo\":\"{channelNo}\",\"mediaType\":0,\"streamType\":0,\"storageType\":0,\"playbackType\":0,\"playbackSpeed\":1,\"startTime\":\"{startTime}\",\"endTime\":\"{endTime}\",\"clientId\":\"{sim}\",\"messageId\":37377}", "{clientId}", sim); msg = StringUtils.replace(msg, "{startTime}", startTime); msg = StringUtils.replace(msg, "{endTime}", endTime); msg = StringUtils.replace(msg, "{channelNo}", channel); msg = StringUtils.replace(msg, "{tcpPort}", (port.intValue() + getAddPort().intValue()) + ""); msg = StringUtils.replace(msg, "{udpPort}", (port.intValue() + getAddPort().intValue()) + ""); msg = StringUtils.replace(msg, "{sim}", sim); return StringUtils.replace(msg, "{ip}", configBean.getRtspIp()); } public String formatPushURL(String pushKey, int port, int httpPort) { String msg = StringUtils.replace(this.pushURL, "{pushKey}", pushKey); msg = StringUtils.replace(msg, "{port}", String.valueOf(port)); return StringUtils.replace(msg, "{httpPort}", String.valueOf(httpPort)); } public String formatStopPushURL(String pushKey, int port, int httpPort) { String msg = StringUtils.replace(this.stopPUshURL, "{pushKey}", pushKey); msg = StringUtils.replace(msg, "{port}", String.valueOf(port)); return StringUtils.replace(msg, "{httpPort}", String.valueOf(httpPort)); } public String getJt1078Url() { return this.jt1078Url; } public String getJt1078SendPort() { return this.jt1078SendPort; } public String getStopSendPort() { return this.stopSendPort; } public String getHistoryListPort() { return this.historyListPort; } public String getPlayHistoryPort() { return this.playHistoryPort; } public String getPushURL() { return this.pushURL; } public Integer getStart1078Port() { if (Objects.isNull(this.start1078Port)) this.start1078Port = Integer.valueOf(Integer.parseInt(StringUtils.substringBefore(this.portsOf1078, ","))); return this.start1078Port; } public Integer getEnd1078Port() { if (Objects.isNull(this.end1078Port)) this.end1078Port = Integer.valueOf(Integer.parseInt(StringUtils.substringAfter(this.portsOf1078, ","))); return this.end1078Port; } public String getStopPUshURL() { return this.stopPUshURL; } public String getGetURL() { return this.getURL; } public Integer getAddPort() { return this.addPort; } public String getWs() { return this.ws; } public String getWss() { return this.wss; } } | |
| 2 | 1 | \ No newline at end of file |
| 2 | +package com.genersoft.iot.vmp.vmanager.jt1078.platform.config; import com.genersoft.iot.vmp.vmanager.jt1078.platform.config.RtspConfigBean; import java.util.Objects; import org.apache.commons.lang3.StringUtils; import org.springframework.beans.factory.annotation.Value; import org.springframework.stereotype.Component; @Component public class Jt1078ConfigBean { @Value("${tuohua.bsth.jt1078.url}") private String jt1078Url; @Value("${tuohua.bsth.jt1078.sendPort}") private String jt1078SendPort; @Value("${tuohua.bsth.jt1078.stopSendPort}") private String stopSendPort; @Value("${tuohua.bsth.jt1078.historyListPort}") private String historyListPort; @Value("${tuohua.bsth.jt1078.playHistoryPort}") private String playHistoryPort; @Value("${tuohua.bsth.jt1078.ports}") private String portsOf1078; @Value("${tuohua.bsth.jt1078.pushURL}") private String pushURL; @Value("${tuohua.bsth.jt1078.stopPushURL}") private String stopPUshURL; private Integer start1078Port; private Integer end1078Port; @Value("${tuohua.bsth.jt1078.get.url}") private String getURL; @Value("${tuohua.bsth.jt1078.addPortVal}") private Integer addPort; @Value("${tuohua.bsth.jt1078.ws}") private String ws; @Value("${tuohua.bsth.jt1078.wss}") private String wss; @Value("${tuohua.bsth.jt1078.videoURL}") private String videoURL; private static final String SEND_IO_MESSAGE_RTSP = "{ \"messageId\": 37121, \"properties\": 0, \"clientId\": \"{clientId}\", \"serialNo\": \"1\", \"ip\": \"{ip}\", \"tcpPort\": \"{tcpPort}\", \"udpPort\": \"{udpPort}\", \"channelNo\": \"{channelNo}\", \"mediaType\": \"1\", \"streamType\": \"1\"}"; private static final String SEND_IO_MESSAGE_RTSP_STOP = "{\"messageId\": 37122,\"properties\": 0,\"clientId\": \"{clientId}\",\"serialNo\": \"1\",\"channelNo\": \"{channelNo}\",\"command\": \"0\",\"closeType\": \"0\",\"streamType\": \"1\"}"; private static final String SEND_IO_HISTORY_RTSP = "{\"msgid\":37381,\"clientId\":\"{clientId}\",\"startTime\":\"{startTime}\",\"endTime\":\"{endTime}\",\"mediaType\":0,\"streamType\":0,\"storageType\":0,\"channelId\":{channelNo}}"; private static final String SEND_IO_PLAY_RTSP = "{\"ip\":\"{ip}\",\"tcpPort\":{tcpPort},\"udpPort\":{udpPort},\"channelNo\":\"{channelNo}\",\"mediaType\":0,\"streamType\":0,\"storageType\":0,\"playbackType\":0,\"playbackSpeed\":1,\"startTime\":\"{startTime}\",\"endTime\":\"{endTime}\",\"clientId\":\"{sim}\",\"messageId\":37377}"; public String formatMessageId(String sim, String channel, RtspConfigBean configBean, Integer port) { String msg = StringUtils.replace("{ \"messageId\": 37121, \"properties\": 0, \"clientId\": \"{clientId}\", \"serialNo\": \"1\", \"ip\": \"{ip}\", \"tcpPort\": \"{tcpPort}\", \"udpPort\": \"{udpPort}\", \"channelNo\": \"{channelNo}\", \"mediaType\": \"1\", \"streamType\": \"1\"}", "{clientId}", sim); msg = StringUtils.replace(msg, "{tcpPort}", (port.intValue() +getAddPort()) + ""); msg = StringUtils.replace(msg, "{udpPort}", (port.intValue() +getAddPort()) + ""); msg = StringUtils.replace(msg, "{channelNo}", channel); return StringUtils.replace(msg, "{ip}", configBean.getRtspIp()); } public String formatMessageStop(String sim, String channel) { String msg = StringUtils.replace("{\"messageId\": 37122,\"properties\": 0,\"clientId\": \"{clientId}\",\"serialNo\": \"1\",\"channelNo\": \"{channelNo}\",\"command\": \"0\",\"closeType\": \"0\",\"streamType\": \"1\"}", "{clientId}", sim); return StringUtils.replace(msg, "{channelNo}", channel); } public String formatMessageHistoryListRTSP(String sim, String channel, String startTime, String endTime) { String msg = StringUtils.replace("{\"msgid\":37381,\"clientId\":\"{clientId}\",\"startTime\":\"{startTime}\",\"endTime\":\"{endTime}\",\"mediaType\":0,\"streamType\":0,\"storageType\":0,\"channelId\":{channelNo}}", "{clientId}", sim); msg = StringUtils.replace(msg, "{startTime}", startTime); msg = StringUtils.replace(msg, "{endTime}", endTime); return StringUtils.replace(msg, "{channelNo}", channel); } public String formatMessageHistoryPlayRTSP(String sim, String channel, String startTime, String endTime, RtspConfigBean configBean, Integer port) { String msg = StringUtils.replace("{\"ip\":\"{ip}\",\"tcpPort\":{tcpPort},\"udpPort\":{udpPort},\"channelNo\":\"{channelNo}\",\"mediaType\":0,\"streamType\":0,\"storageType\":0,\"playbackType\":0,\"playbackSpeed\":1,\"startTime\":\"{startTime}\",\"endTime\":\"{endTime}\",\"clientId\":\"{sim}\",\"messageId\":37377}", "{clientId}", sim); msg = StringUtils.replace(msg, "{startTime}", startTime); msg = StringUtils.replace(msg, "{endTime}", endTime); msg = StringUtils.replace(msg, "{channelNo}", channel); msg = StringUtils.replace(msg, "{tcpPort}", (port.intValue() +getAddPort()) + ""); msg = StringUtils.replace(msg, "{udpPort}", (port.intValue() +getAddPort()) + ""); msg = StringUtils.replace(msg, "{sim}", sim); return StringUtils.replace(msg, "{ip}", configBean.getRtspIp()); } public String formatPushURL(String pushKey, int port, int httpPort) { String msg = StringUtils.replace(this.pushURL, "{pushKey}", pushKey); msg = StringUtils.replace(msg, "{port}", String.valueOf(port)); return StringUtils.replace(msg, "{httpPort}", String.valueOf(httpPort)); } public String formatStopPushURL(String pushKey, int port, int httpPort) { String msg = StringUtils.replace(this.stopPUshURL, "{pushKey}", pushKey); msg = StringUtils.replace(msg, "{port}", String.valueOf(port)); return StringUtils.replace(msg, "{httpPort}", String.valueOf(httpPort)); } public String formatVideoURL(String stream){ return StringUtils.replace(videoURL,"{stream}",stream); } public String getJt1078Url() { return this.jt1078Url; } public String getJt1078SendPort() { return this.jt1078SendPort; } public String getStopSendPort() { return this.stopSendPort; } public String getHistoryListPort() { return this.historyListPort; } public String getPlayHistoryPort() { return this.playHistoryPort; } public String getPushURL() { return this.pushURL; } public Integer getStart1078Port() { if (Objects.isNull(this.start1078Port)) this.start1078Port = Integer.valueOf(Integer.parseInt(StringUtils.substringBefore(this.portsOf1078, ","))); return this.start1078Port; } public Integer getEnd1078Port() { if (Objects.isNull(this.end1078Port)) this.end1078Port = Integer.valueOf(Integer.parseInt(StringUtils.substringAfter(this.portsOf1078, ","))); return this.end1078Port; } public String getStopPUshURL() { return this.stopPUshURL; } public String getGetURL() { return this.getURL; } public Integer getAddPort() { return this.addPort; } public String getWs() { return this.ws; } public String getWss() { return this.wss; } public String getPortsOf1078() { return portsOf1078; } } | |
| 3 | 3 | \ No newline at end of file | ... | ... |
src/main/java/com/genersoft/iot/vmp/vmanager/jt1078/platform/config/TuohuaConfigBean.java
| ... | ... | @@ -256,7 +256,7 @@ public class TuohuaConfigBean { |
| 256 | 256 | if (StringUtils.isEmpty(sim) || !optional.isPresent()) { |
| 257 | 257 | name = "<view style='color:red'>" + name + "</view>"; |
| 258 | 258 | abnormalStatus = 10; |
| 259 | - }else if(Objects.isNull(optional.get().get("timestamp")) || now- Convert.toLong(optional.get().get("timestamp"))<=120000){ | |
| 259 | + }else if(Objects.isNull(optional.get().get("timestamp")) || now- Convert.toLong(optional.get().get("timestamp"))>120000){ | |
| 260 | 260 | name = "<view style='color:#ccc'>" + name + "</view>"; |
| 261 | 261 | abnormalStatus =20; |
| 262 | 262 | }else{ | ... | ... |
src/main/java/com/genersoft/iot/vmp/vmanager/jt1078/platform/handler/HttpClientUtil.java
| ... | ... | @@ -162,6 +162,37 @@ public class HttpClientUtil { |
| 162 | 162 | return null; |
| 163 | 163 | } |
| 164 | 164 | |
| 165 | + public boolean doGetNoResult(String url) throws URISyntaxException, IOException { | |
| 166 | + // 创建Httpclient对象 | |
| 167 | + DefaultHttpClient httpclient = getHttpClient(); | |
| 168 | + // 定义请求的参数 | |
| 169 | +// | |
| 170 | +// httpclient.setCookieStore(cookieStore1); | |
| 171 | + | |
| 172 | + URIBuilder uriBuilder = new URIBuilder(url); | |
| 173 | + URI uri = uriBuilder.build(); | |
| 174 | + | |
| 175 | + // 创建http GET请求 | |
| 176 | + HttpGet httpGet = new HttpGet(uri); | |
| 177 | + | |
| 178 | + //response 对象 | |
| 179 | + CloseableHttpResponse response = null; | |
| 180 | + try { | |
| 181 | + // 执行http get请求 | |
| 182 | + response = httpclient.execute(httpGet); | |
| 183 | + // 判断返回状态是否为200 | |
| 184 | + if (response.getStatusLine().getStatusCode() == 200) { | |
| 185 | + return true; | |
| 186 | + } | |
| 187 | + } finally { | |
| 188 | + if (response != null) { | |
| 189 | + response.close(); | |
| 190 | + } | |
| 191 | + httpclient.close(); | |
| 192 | + } | |
| 193 | + return false; | |
| 194 | + } | |
| 195 | + | |
| 165 | 196 | |
| 166 | 197 | @NotNull |
| 167 | 198 | private static HttpClientPostEntity combationReturnObj(CloseableHttpResponse response, DefaultHttpClient httpclient,String url,String requestBody) throws IOException { | ... | ... |
src/main/resources/application-local.yml
| ... | ... | @@ -13,11 +13,11 @@ spring: |
| 13 | 13 | # REDIS数据库配置 |
| 14 | 14 | redis: |
| 15 | 15 | # [必须修改] Redis服务器IP, REDIS安装在本机的,使用127.0.0.1 |
| 16 | - host: 192.168.168.124 | |
| 16 | + host: 192.168.169.124 | |
| 17 | 17 | # [必须修改] 端口号 |
| 18 | 18 | port: 6379 |
| 19 | 19 | # [可选] 数据库 DB |
| 20 | - database: 10 | |
| 20 | + database: 8 | |
| 21 | 21 | # [可选] 访问密码,若你的redis服务器没有设置密码,就不需要用密码去连接 |
| 22 | 22 | # password: guzijian |
| 23 | 23 | # [可选] 超时时间 |
| ... | ... | @@ -152,7 +152,7 @@ tuohua: |
| 152 | 152 | historyUdpPort: 9999 |
| 153 | 153 | ip : 61.169.120.202 |
| 154 | 154 | jt1078: |
| 155 | - ports: 9100,9600 | |
| 155 | + ports: 9000,9500 | |
| 156 | 156 | addPortVal: 30000 |
| 157 | 157 | pushURL: http://192.169.1.92:3333/new/server/{pushKey}/{port}/{httpPort} |
| 158 | 158 | stopPushURL: http://192.169.1.92:3333/stop/channel/{pushKey}/{port}/{httpPort} |
| ... | ... | @@ -164,6 +164,7 @@ tuohua: |
| 164 | 164 | ws: ws://192.168.169.100:1091/schedule/{stream}.live.flv |
| 165 | 165 | wss: wss://192.168.169.100:443/schedule/{stream}.live.flv |
| 166 | 166 | get: |
| 167 | + #url: http://192.169.1.92:{port}/video/{stream}.flv | |
| 167 | 168 | url: http://192.169.1.92:3333/video/{stream}.flv |
| 168 | 169 | playURL: /play/wasm/ws%3A%2F%2F{ip}%3A{port}%2Fschedule%2F{sim}-{channel}.live.flv%3FcallId%{publickey} |
| 169 | 170 | ... | ... |
src/main/resources/application-localDev.yml
web_src/config/index.js
web_src/src/components/DeviceList1078.vue
| ... | ... | @@ -24,6 +24,8 @@ |
| 24 | 24 | |
| 25 | 25 | <button style="margin-left: 15px;" @click="openViewDIalog()">历史数据</button> |
| 26 | 26 | <button style="margin-left: 15px;" @click="OneClickPlayback()">一键播放车辆视频</button> |
| 27 | + <button style="margin-left: 15px;" @click="closeSelectItem()">关闭选中画面流</button> | |
| 28 | + <button style="margin-left: 15px;" @click="closeSelectCarItem()">一键关闭选中车辆流</button> | |
| 27 | 29 | </el-header> |
| 28 | 30 | |
| 29 | 31 | |
| ... | ... | @@ -248,7 +250,6 @@ export default { |
| 248 | 250 | console.log("通知设备推流1:" + deviceId + " : " + channelId); |
| 249 | 251 | let idxTmp = this.playerIdx |
| 250 | 252 | let that = this; |
| 251 | - this.loading = true | |
| 252 | 253 | |
| 253 | 254 | this.$axios({ |
| 254 | 255 | method: 'get', |
| ... | ... | @@ -402,9 +403,6 @@ export default { |
| 402 | 403 | sim = ""; |
| 403 | 404 | } |
| 404 | 405 | |
| 405 | - console.log("abnormalStatus=====================>"+abnormalStatus); | |
| 406 | - | |
| 407 | - | |
| 408 | 406 | if(abnormalStatus >= 10 && abnormalStatus < 20){ |
| 409 | 407 | name = "<view style='color:red'>" + name + "</view>"; |
| 410 | 408 | }else if(abnormalStatus >= 20 && abnormalStatus < 30){ |
| ... | ... | @@ -446,8 +444,8 @@ export default { |
| 446 | 444 | return; |
| 447 | 445 | } |
| 448 | 446 | |
| 449 | - | |
| 450 | - this.showLoading(); | |
| 447 | + this.showLoading(); | |
| 448 | + | |
| 451 | 449 | if(treeNo.type == 401 || treeNo.type == '401'){ |
| 452 | 450 | let device = new Object(); |
| 453 | 451 | if(this.isEmpty(treeNo.online)){ |
| ... | ... | @@ -459,6 +457,8 @@ export default { |
| 459 | 457 | this.videoUrl=[] |
| 460 | 458 | } |
| 461 | 459 | |
| 460 | + this.closeLoading(); | |
| 461 | + | |
| 462 | 462 | let pageObj = this; |
| 463 | 463 | |
| 464 | 464 | if(!this.isEmpty(this.sim) && !this.channel && this.sim != treeNo.sim && this.channel != treeNo.id){ |
| ... | ... | @@ -633,12 +633,31 @@ export default { |
| 633 | 633 | return; |
| 634 | 634 | } |
| 635 | 635 | |
| 636 | - | |
| 636 | + this.videoUrl=['']; | |
| 637 | + this.$axios({ | |
| 638 | + method: 'get', | |
| 639 | + url:`/api/jt1078/query/send/stop/io/`+sim+"/"+channel+"/"+this.stream+"/"+this.port+"/"+this.httpPort, | |
| 640 | + }).then((res) => { | |
| 641 | + console.log(res); | |
| 642 | + if(fun){ | |
| 643 | + fun(); | |
| 644 | + } | |
| 645 | + }); | |
| 646 | + }, | |
| 647 | + | |
| 648 | + sendIORequestStop1(sim,channel,fun){ | |
| 649 | + if(this.isEmpty(sim) || this.isEmpty(channel)){ | |
| 650 | + console.log("sim:"+sim+";channel:"+channel); | |
| 651 | + if(fun){ | |
| 652 | + fun(); | |
| 653 | + } | |
| 654 | + return; | |
| 655 | + } | |
| 637 | 656 | |
| 638 | 657 | this.videoUrl=['']; |
| 639 | 658 | this.$axios({ |
| 640 | 659 | method: 'get', |
| 641 | - url:`/api/jt1078/query/send/stop/io/`+sim+"/"+channel+"/"+this.stream+"/"+this.port+"/"+this.httpPort+"/", | |
| 660 | + url:`/api/jt1078/query/send/stop/io/`+sim+"/"+channel, | |
| 642 | 661 | }).then((res) => { |
| 643 | 662 | console.log(res); |
| 644 | 663 | if(fun){ |
| ... | ... | @@ -646,6 +665,7 @@ export default { |
| 646 | 665 | } |
| 647 | 666 | }); |
| 648 | 667 | }, |
| 668 | + | |
| 649 | 669 | isEmpty(val){ |
| 650 | 670 | return null == val || undefined == val || "" == val; |
| 651 | 671 | }, |
| ... | ... | @@ -771,7 +791,7 @@ export default { |
| 771 | 791 | } |
| 772 | 792 | |
| 773 | 793 | let pageObj = this; |
| 774 | - this.showLoading(); | |
| 794 | + | |
| 775 | 795 | |
| 776 | 796 | this.videoUrl =[]; |
| 777 | 797 | |
| ... | ... | @@ -780,7 +800,7 @@ export default { |
| 780 | 800 | method: 'get', |
| 781 | 801 | url: '/api/jt1078/query/send/request/io/history/' + pageObj.sim + '/' + pageObj.channel+"/"+e.target.getAttribute('startTime')+"/"+e.target.getAttribute('endTime')+"/"+e.target.getAttribute('channelMapping') |
| 782 | 802 | }).then(function (res) { |
| 783 | - console.log(res); | |
| 803 | + | |
| 784 | 804 | |
| 785 | 805 | if (res.data && res.data.data && res.data.data.data) { |
| 786 | 806 | let videoUrl1; |
| ... | ... | @@ -845,6 +865,17 @@ export default { |
| 845 | 865 | this.$message.error('请选择车辆'); |
| 846 | 866 | return; |
| 847 | 867 | } |
| 868 | + | |
| 869 | + if(this.isEmpty(this.carTreeNode.abnormalStatus)){ | |
| 870 | + this.$message.error('请检查车辆状态'); | |
| 871 | + return; | |
| 872 | + } | |
| 873 | + | |
| 874 | + | |
| 875 | + if(this.carTreeNode.abnormalStatus!=1){ | |
| 876 | + this.$message.error('车辆设备离线,请检查设备'); | |
| 877 | + return; | |
| 878 | + } | |
| 848 | 879 | if(this.isEmpty(this.sim)){ |
| 849 | 880 | this.$message.error('无法获取SIM卡信息,请检查设备'); |
| 850 | 881 | return; |
| ... | ... | @@ -876,6 +907,23 @@ export default { |
| 876 | 907 | } |
| 877 | 908 | |
| 878 | 909 | window.open(this.downloadURL,"_download"); |
| 910 | + }, | |
| 911 | + closeSelectItem(){ | |
| 912 | + console.log("============================>"+this.playerIdx); | |
| 913 | + this.setPlayUrl(null,this.playerIdx) | |
| 914 | + // this.videoUrl[this.playerIdx]=null; | |
| 915 | + // this.sendIORequestStop1(this.sim,this.playerIdx+1); | |
| 916 | + | |
| 917 | + }, | |
| 918 | + closeSelectCarItem(){ | |
| 919 | + for (let index = 0; index < 9; index++) { | |
| 920 | + this.setPlayUrl(null,index) | |
| 921 | + // this.videoUrl[this.playerIdx]=null; | |
| 922 | + this.sendIORequestStop1(this.sim,index+1); | |
| 923 | + | |
| 924 | + } | |
| 925 | + | |
| 926 | + | |
| 879 | 927 | } |
| 880 | 928 | } |
| 881 | 929 | }; | ... | ... |
web_src/src/components/common/jessibuca.vue
| ... | ... | @@ -105,6 +105,7 @@ export default { |
| 105 | 105 | } |
| 106 | 106 | }, |
| 107 | 107 | create() { |
| 108 | + this.loaded = true; | |
| 108 | 109 | let options = { |
| 109 | 110 | container: this.$refs.container, |
| 110 | 111 | autoWasm: true, |
| ... | ... | @@ -114,9 +115,9 @@ export default { |
| 114 | 115 | decoder: "static/js/jessibuca/decoder.js", |
| 115 | 116 | forceNoOffscreen: false, |
| 116 | 117 | hasAudio: typeof (this.hasAudio) == "undefined" ? true : this.hasAudio, |
| 117 | - heartTimeout: 5, | |
| 118 | + heartTimeout: 1500000, | |
| 118 | 119 | heartTimeoutReplay: true, |
| 119 | - heartTimeoutReplayTimes: 3, | |
| 120 | + heartTimeoutReplayTimes: -1, | |
| 120 | 121 | hiddenAutoPause: false, |
| 121 | 122 | hotKey: true, |
| 122 | 123 | isFlv: false, |
| ... | ... | @@ -125,9 +126,9 @@ export default { |
| 125 | 126 | isResize: false, |
| 126 | 127 | keepScreenOn: true, |
| 127 | 128 | loadingText: "请稍等, 视频加载中......", |
| 128 | - loadingTimeout: 10, | |
| 129 | + loadingTimeout: 100000, | |
| 129 | 130 | loadingTimeoutReplay: true, |
| 130 | - loadingTimeoutReplayTimes: 3, | |
| 131 | + loadingTimeoutReplayTimes: -1, | |
| 131 | 132 | openWebglAlignment: false, |
| 132 | 133 | operateBtns: { |
| 133 | 134 | fullscreen: false, |
| ... | ... | @@ -140,7 +141,7 @@ export default { |
| 140 | 141 | rotate: 0, |
| 141 | 142 | showBandwidth: false, |
| 142 | 143 | supportDblclickFullscreen: false, |
| 143 | - timeout: 10, | |
| 144 | + timeout: 1000000, | |
| 144 | 145 | useMSE: true, |
| 145 | 146 | useWCS: location.hostname === "localhost" || location.protocol === "https:", |
| 146 | 147 | useWebFullScreen: true, |
| ... | ... | @@ -155,12 +156,13 @@ export default { |
| 155 | 156 | let _this = this; |
| 156 | 157 | jessibuca.on("pause", function () { |
| 157 | 158 | _this.playing = false; |
| 159 | + | |
| 158 | 160 | }); |
| 159 | 161 | jessibuca.on("play", function () { |
| 160 | 162 | _this.playing = true; |
| 161 | 163 | }); |
| 162 | 164 | jessibuca.on("fullscreen", function (msg) { |
| 163 | - _this.fullscreen = msg | |
| 165 | + _this.fullscreen = msg; | |
| 164 | 166 | }); |
| 165 | 167 | jessibuca.on("mute", function (msg) { |
| 166 | 168 | _this.isNotMute = !msg; |
| ... | ... | @@ -181,10 +183,10 @@ export default { |
| 181 | 183 | console.log("Jessibuca -> videoInfo: ", msg); |
| 182 | 184 | }); |
| 183 | 185 | jessibuca.on("audioInfo", function (msg) { |
| 184 | - console.log("Jessibuca -> audioInfo: ", msg); | |
| 185 | 186 | }); |
| 186 | 187 | jessibuca.on("error", function (msg) { |
| 187 | 188 | console.log("Jessibuca -> error: ", msg); |
| 189 | + _this.play(_this.videoUrl); | |
| 188 | 190 | }); |
| 189 | 191 | jessibuca.on("timeout", function (msg) { |
| 190 | 192 | console.log("Jessibuca -> timeout: ", msg); | ... | ... |