Commit f24b6fa13f5eed916ab09d7807a11c92b186e992

Authored by 648540858
1 parent 042b28b2

优化国标录像的异常判断

src/main/java/com/genersoft/iot/vmp/service/IPlayService.java
... ... @@ -11,6 +11,7 @@ import com.genersoft.iot.vmp.media.zlm.dto.MediaServerItem;
11 11 import com.genersoft.iot.vmp.service.bean.InviteTimeOutCallback;
12 12 import com.genersoft.iot.vmp.service.bean.PlayBackCallback;
13 13 import com.genersoft.iot.vmp.service.bean.SSRCInfo;
  14 +import com.genersoft.iot.vmp.vmanager.bean.WVPResult;
14 15 import com.genersoft.iot.vmp.vmanager.gb28181.play.bean.PlayResult;
15 16 import org.springframework.http.ResponseEntity;
16 17 import org.springframework.web.context.request.async.DeferredResult;
... ... @@ -31,13 +32,13 @@ public interface IPlayService {
31 32  
32 33 void onPublishHandlerForDownload(InviteStreamInfo inviteStreamInfo, String deviceId, String channelId, String toString);
33 34  
34   - DeferredResult<String> playBack(String deviceId, String channelId, String startTime, String endTime, InviteStreamCallback infoCallBack, PlayBackCallback hookCallBack);
35   - DeferredResult<String> playBack(MediaServerItem mediaServerItem, SSRCInfo ssrcInfo,String deviceId, String channelId, String startTime, String endTime, InviteStreamCallback infoCallBack, PlayBackCallback hookCallBack);
  35 + DeferredResult<WVPResult<StreamInfo>> playBack(String deviceId, String channelId, String startTime, String endTime, InviteStreamCallback infoCallBack, PlayBackCallback hookCallBack);
  36 + DeferredResult<WVPResult<StreamInfo>> playBack(MediaServerItem mediaServerItem, SSRCInfo ssrcInfo,String deviceId, String channelId, String startTime, String endTime, InviteStreamCallback infoCallBack, PlayBackCallback hookCallBack);
36 37  
37 38 void zlmServerOffline(String mediaServerId);
38 39  
39   - DeferredResult<String> download(String deviceId, String channelId, String startTime, String endTime, int downloadSpeed, InviteStreamCallback infoCallBack, PlayBackCallback hookCallBack);
40   - DeferredResult<String> download(MediaServerItem mediaServerItem, SSRCInfo ssrcInfo,String deviceId, String channelId, String startTime, String endTime, int downloadSpeed, InviteStreamCallback infoCallBack, PlayBackCallback hookCallBack);
  40 + DeferredResult<WVPResult<StreamInfo>> download(String deviceId, String channelId, String startTime, String endTime, int downloadSpeed, InviteStreamCallback infoCallBack, PlayBackCallback hookCallBack);
  41 + DeferredResult<WVPResult<StreamInfo>> download(MediaServerItem mediaServerItem, SSRCInfo ssrcInfo,String deviceId, String channelId, String startTime, String endTime, int downloadSpeed, InviteStreamCallback infoCallBack, PlayBackCallback hookCallBack);
41 42  
42 43 StreamInfo getDownLoadInfo(String deviceId, String channelId, String stream);
43 44  
... ...
src/main/java/com/genersoft/iot/vmp/service/bean/PlayBackResult.java
... ... @@ -12,6 +12,8 @@ import java.util.EventObject;
12 12 */
13 13 public class PlayBackResult<T> {
14 14 private int code;
  15 +
  16 + private String msg;
15 17 private T data;
16 18 private MediaServerItem mediaServerItem;
17 19 private JSONObject response;
... ... @@ -56,4 +58,12 @@ public class PlayBackResult&lt;T&gt; {
56 58 public void setEvent(SipSubscribe.EventResult<EventObject> event) {
57 59 this.event = event;
58 60 }
  61 +
  62 + public String getMsg() {
  63 + return msg;
  64 + }
  65 +
  66 + public void setMsg(String msg) {
  67 + this.msg = msg;
  68 + }
59 69 }
... ...
src/main/java/com/genersoft/iot/vmp/service/impl/PlayServiceImpl.java
... ... @@ -384,7 +384,7 @@ public class PlayServiceImpl implements IPlayService {
384 384 }
385 385  
386 386 @Override
387   - public DeferredResult<String> playBack(String deviceId, String channelId, String startTime,
  387 + public DeferredResult<WVPResult<StreamInfo>> playBack(String deviceId, String channelId, String startTime,
388 388 String endTime,InviteStreamCallback inviteStreamCallback,
389 389 PlayBackCallback callback) {
390 390 Device device = storager.queryVideoDevice(deviceId);
... ... @@ -398,7 +398,7 @@ public class PlayServiceImpl implements IPlayService {
398 398 }
399 399  
400 400 @Override
401   - public DeferredResult<String> playBack(MediaServerItem mediaServerItem, SSRCInfo ssrcInfo,
  401 + public DeferredResult<WVPResult<StreamInfo>> playBack(MediaServerItem mediaServerItem, SSRCInfo ssrcInfo,
402 402 String deviceId, String channelId, String startTime,
403 403 String endTime, InviteStreamCallback infoCallBack,
404 404 PlayBackCallback playBackCallback) {
... ... @@ -411,7 +411,7 @@ public class PlayServiceImpl implements IPlayService {
411 411 if (device == null) {
412 412 throw new ControllerException(ErrorCode.ERROR100.getCode(), "设备: " + deviceId + "不存在");
413 413 }
414   - DeferredResult<String> result = new DeferredResult<>(30000L);
  414 + DeferredResult<WVPResult<StreamInfo>> result = new DeferredResult<>(30000L);
415 415 resultHolder.put(DeferredResultHolder.CALLBACK_CMD_PLAYBACK + deviceId + channelId, uuid, result);
416 416 RequestMessage requestMessage = new RequestMessage();
417 417 requestMessage.setId(uuid);
... ... @@ -420,7 +420,8 @@ public class PlayServiceImpl implements IPlayService {
420 420 String playBackTimeOutTaskKey = UUID.randomUUID().toString();
421 421 dynamicTask.startDelay(playBackTimeOutTaskKey, ()->{
422 422 logger.warn(String.format("设备回放超时,deviceId:%s ,channelId:%s", deviceId, channelId));
423   - playBackResult.setCode(-1);
  423 + playBackResult.setCode(ErrorCode.ERROR100.getCode());
  424 + playBackResult.setMsg("回放超时");
424 425 playBackResult.setData(requestMessage);
425 426 SIPDialog dialog = streamSession.getDialogByStream(deviceId, channelId, ssrcInfo.getStream());
426 427 // 点播超时回复BYE 同时释放ssrc以及此次点播的资源
... ... @@ -435,6 +436,8 @@ public class PlayServiceImpl implements IPlayService {
435 436 cmder.streamByeCmd(device.getDeviceId(), channelId, ssrcInfo.getStream(), null);
436 437 // 回复之前所有的点播请求
437 438 playBackCallback.call(playBackResult);
  439 + result.setResult(WVPResult.fail(ErrorCode.ERROR100.getCode(), "回放超时"));
  440 + resultHolder.exist(DeferredResultHolder.CALLBACK_CMD_PLAYBACK + deviceId + channelId, uuid);
438 441 }, userSetting.getPlayTimeout());
439 442  
440 443 cmder.playbackStreamCmd(mediaServerItem, ssrcInfo, device, channelId, startTime, endTime, infoCallBack,
... ... @@ -444,14 +447,16 @@ public class PlayServiceImpl implements IPlayService {
444 447 StreamInfo streamInfo = onPublishHandler(inviteStreamInfo.getMediaServerItem(), inviteStreamInfo.getResponse(), deviceId, channelId);
445 448 if (streamInfo == null) {
446 449 logger.warn("设备回放API调用失败!");
447   - playBackResult.setCode(-1);
  450 + playBackResult.setCode(ErrorCode.ERROR100.getCode());
  451 + playBackResult.setMsg("设备回放API调用失败!");
448 452 playBackCallback.call(playBackResult);
449 453 return;
450 454 }
451 455 redisCatchStorage.startPlayback(streamInfo, inviteStreamInfo.getCallId());
452 456 WVPResult<StreamInfo> success = WVPResult.success(streamInfo);
453 457 requestMessage.setData(success);
454   - playBackResult.setCode(0);
  458 + playBackResult.setCode(ErrorCode.SUCCESS.getCode());
  459 + playBackResult.setMsg(ErrorCode.SUCCESS.getMsg());
455 460 playBackResult.setData(requestMessage);
456 461 playBackResult.setMediaServerItem(inviteStreamInfo.getMediaServerItem());
457 462 playBackResult.setResponse(inviteStreamInfo.getResponse());
... ... @@ -459,7 +464,8 @@ public class PlayServiceImpl implements IPlayService {
459 464 }, event -> {
460 465 dynamicTask.stop(playBackTimeOutTaskKey);
461 466 requestMessage.setData(WVPResult.fail(ErrorCode.ERROR100.getCode(), String.format("回放失败, 错误码: %s, %s", event.statusCode, event.msg)));
462   - playBackResult.setCode(-1);
  467 + playBackResult.setCode(ErrorCode.ERROR100.getCode());
  468 + playBackResult.setMsg(String.format("回放失败, 错误码: %s, %s", event.statusCode, event.msg));
463 469 playBackResult.setData(requestMessage);
464 470 playBackResult.setEvent(event);
465 471 playBackCallback.call(playBackResult);
... ... @@ -469,7 +475,7 @@ public class PlayServiceImpl implements IPlayService {
469 475 }
470 476  
471 477 @Override
472   - public DeferredResult<String> download(String deviceId, String channelId, String startTime, String endTime, int downloadSpeed, InviteStreamCallback infoCallBack, PlayBackCallback hookCallBack) {
  478 + public DeferredResult<WVPResult<StreamInfo>> download(String deviceId, String channelId, String startTime, String endTime, int downloadSpeed, InviteStreamCallback infoCallBack, PlayBackCallback hookCallBack) {
473 479 Device device = storager.queryVideoDevice(deviceId);
474 480 if (device == null) {
475 481 return null;
... ... @@ -481,13 +487,13 @@ public class PlayServiceImpl implements IPlayService {
481 487 }
482 488  
483 489 @Override
484   - public DeferredResult<String> download(MediaServerItem mediaServerItem, SSRCInfo ssrcInfo, String deviceId, String channelId, String startTime, String endTime, int downloadSpeed, InviteStreamCallback infoCallBack, PlayBackCallback hookCallBack) {
  490 + public DeferredResult<WVPResult<StreamInfo>> download(MediaServerItem mediaServerItem, SSRCInfo ssrcInfo, String deviceId, String channelId, String startTime, String endTime, int downloadSpeed, InviteStreamCallback infoCallBack, PlayBackCallback hookCallBack) {
485 491 if (mediaServerItem == null || ssrcInfo == null) {
486 492 return null;
487 493 }
488 494 String uuid = UUID.randomUUID().toString();
489 495 String key = DeferredResultHolder.CALLBACK_CMD_DOWNLOAD + deviceId + channelId;
490   - DeferredResult<String> result = new DeferredResult<>(30000L);
  496 + DeferredResult<WVPResult<StreamInfo>> result = new DeferredResult<>(30000L);
491 497 Device device = storager.queryVideoDevice(deviceId);
492 498 if (device == null) {
493 499 throw new ControllerException(ErrorCode.ERROR400.getCode(), "设备:" + deviceId + "不存在");
... ... @@ -507,7 +513,8 @@ public class PlayServiceImpl implements IPlayService {
507 513 logger.warn(String.format("录像下载请求超时,deviceId:%s ,channelId:%s", deviceId, channelId));
508 514 wvpResult.setCode(ErrorCode.ERROR100.getCode());
509 515 wvpResult.setMsg("录像下载请求超时");
510   - downloadResult.setCode(-1);
  516 + downloadResult.setCode(ErrorCode.ERROR100.getCode());
  517 + downloadResult.setMsg("录像下载请求超时");
511 518 hookCallBack.call(downloadResult);
512 519 SIPDialog dialog = streamSession.getDialogByStream(deviceId, channelId, ssrcInfo.getStream());
513 520 // 点播超时回复BYE 同时释放ssrc以及此次点播的资源
... ... @@ -534,13 +541,15 @@ public class PlayServiceImpl implements IPlayService {
534 541 wvpResult.setCode(ErrorCode.SUCCESS.getCode());
535 542 wvpResult.setMsg(ErrorCode.SUCCESS.getMsg());
536 543 wvpResult.setData(streamInfo);
537   - downloadResult.setCode(0);
  544 + downloadResult.setCode(ErrorCode.SUCCESS.getCode());
  545 + downloadResult.setMsg(ErrorCode.SUCCESS.getMsg());
538 546 downloadResult.setMediaServerItem(inviteStreamInfo.getMediaServerItem());
539 547 downloadResult.setResponse(inviteStreamInfo.getResponse());
540 548 hookCallBack.call(downloadResult);
541 549 }, event -> {
542 550 dynamicTask.stop(downLoadTimeOutTaskKey);
543   - downloadResult.setCode(-1);
  551 + downloadResult.setCode(ErrorCode.ERROR100.getCode());
  552 + downloadResult.setMsg(String.format("录像下载失败, 错误码: %s, %s", event.statusCode, event.msg));
544 553 wvpResult.setCode(ErrorCode.ERROR100.getCode());
545 554 wvpResult.setMsg(String.format("录像下载失败, 错误码: %s, %s", event.statusCode, event.msg));
546 555 downloadResult.setEvent(event);
... ...
src/main/java/com/genersoft/iot/vmp/vmanager/gb28181/playback/PlaybackController.java
... ... @@ -3,9 +3,11 @@ package com.genersoft.iot.vmp.vmanager.gb28181.playback;
3 3 import com.genersoft.iot.vmp.common.StreamInfo;
4 4 import com.genersoft.iot.vmp.conf.exception.ControllerException;
5 5 import com.genersoft.iot.vmp.gb28181.transmit.callback.DeferredResultHolder;
  6 +import com.genersoft.iot.vmp.gb28181.transmit.callback.RequestMessage;
6 7 import com.genersoft.iot.vmp.storager.IRedisCatchStorage;
7 8 import com.genersoft.iot.vmp.service.IPlayService;
8 9 import com.genersoft.iot.vmp.vmanager.bean.ErrorCode;
  10 +import com.genersoft.iot.vmp.vmanager.bean.WVPResult;
9 11 import io.swagger.v3.oas.annotations.Operation;
10 12 import io.swagger.v3.oas.annotations.Parameter;
11 13 import io.swagger.v3.oas.annotations.tags.Tag;
... ... @@ -57,8 +59,8 @@ public class PlaybackController {
57 59 @Parameter(name = "startTime", description = "开始时间", required = true)
58 60 @Parameter(name = "endTime", description = "结束时间", required = true)
59 61 @GetMapping("/start/{deviceId}/{channelId}")
60   - public DeferredResult<String> play(@PathVariable String deviceId, @PathVariable String channelId,
61   - String startTime,String endTime) {
  62 + public DeferredResult<WVPResult<StreamInfo>> play(@PathVariable String deviceId, @PathVariable String channelId,
  63 + String startTime, String endTime) {
62 64  
63 65 if (logger.isDebugEnabled()) {
64 66 logger.debug(String.format("设备回放 API调用,deviceId:%s ,channelId:%s", deviceId, channelId));
... ... @@ -66,7 +68,15 @@ public class PlaybackController {
66 68  
67 69  
68 70 return playService.playBack(deviceId, channelId, startTime, endTime, null,
69   - playBackResult->resultHolder.invokeResult(playBackResult.getData()));
  71 + playBackResult->{
  72 + if (playBackResult.getCode() != ErrorCode.SUCCESS.getCode()) {
  73 + RequestMessage data = playBackResult.getData();
  74 + data.setData(WVPResult.fail(playBackResult.getCode(), playBackResult.getMsg()));
  75 + resultHolder.invokeResult(data);
  76 + }else {
  77 + resultHolder.invokeResult(playBackResult.getData());
  78 + }
  79 + });
70 80 }
71 81  
72 82  
... ...
src/main/java/com/genersoft/iot/vmp/vmanager/gb28181/record/GBRecordController.java
... ... @@ -110,14 +110,14 @@ public class GBRecordController {
110 110 @Parameter(name = "endTime", description = "结束时间", required = true)
111 111 @Parameter(name = "downloadSpeed", description = "下载倍速", required = true)
112 112 @GetMapping("/download/start/{deviceId}/{channelId}")
113   - public DeferredResult<String> download(@PathVariable String deviceId, @PathVariable String channelId,
  113 + public DeferredResult<WVPResult<StreamInfo>> download(@PathVariable String deviceId, @PathVariable String channelId,
114 114 String startTime, String endTime, String downloadSpeed) {
115 115  
116 116 if (logger.isDebugEnabled()) {
117 117 logger.debug(String.format("历史媒体下载 API调用,deviceId:%s,channelId:%s,downloadSpeed:%s", deviceId, channelId, downloadSpeed));
118 118 }
119 119  
120   - DeferredResult<String> result = playService.download(deviceId, channelId, startTime, endTime, Integer.parseInt(downloadSpeed), null, hookCallBack->{
  120 + DeferredResult<WVPResult<StreamInfo>> result = playService.download(deviceId, channelId, startTime, endTime, Integer.parseInt(downloadSpeed), null, hookCallBack->{
121 121 resultHolder.invokeResult(hookCallBack.getData());
122 122 });
123 123  
... ...
web_src/src/components/dialog/devicePlayer.vue
... ... @@ -564,10 +564,10 @@ export default {
564 564 url: '/api/gb_record/query/' + this.deviceId + '/' + this.channelId + '?startTime=' + startTime + '&endTime=' + endTime
565 565 }).then(function (res) {
566 566 console.log(res)
  567 + that.recordsLoading = false;
567 568 if(res.data.code === 0) {
568 569 // 处理时间信息
569 570 that.videoHistory.searchHistoryResult = res.data.data.recordList;
570   - that.recordsLoading = false;
571 571 }else {
572 572 this.$message({
573 573 showClose: true,
... ... @@ -613,6 +613,12 @@ export default {
613 613 that.mediaServerId = that.streamInfo.mediaServerId;
614 614 that.ssrc = that.streamInfo.ssrc;
615 615 that.videoUrl = that.getUrlByStreamInfo();
  616 + }else {
  617 + that.$message({
  618 + showClose: true,
  619 + message: res.data.msg,
  620 + type: "error",
  621 + });
616 622 }
617 623 that.recordPlay = true;
618 624 });
... ...