From 366d57b2b39e894def409dd444fad265e39ff03b Mon Sep 17 00:00:00 2001 From: Lawrence <1934378145@qq.com> Date: Sat, 7 Nov 2020 16:53:49 +0800 Subject: [PATCH 1/4] =?UTF-8?q?=E4=BC=98=E5=8C=96=E6=89=93=E5=8C=85?= =?UTF-8?q?=E7=9A=84=E5=8F=82=E6=95=B0?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- pom.xml | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/pom.xml b/pom.xml index 3c4edf18..04631821 100644 --- a/pom.xml +++ b/pom.xml @@ -123,8 +123,8 @@ javax.sip jain-sip-ri 1.3.0-92 - + system + ${project.basedir}/libs/jain-sip-ri-1.3.0-92.jar org.dom4j @@ -177,7 +177,7 @@ 1.8 1.8 - + From f68cfd8de2cf6e516e220d1a706cecabb2b185aa Mon Sep 17 00:00:00 2001 From: Lawrence <1934378145@qq.com> Date: Sat, 7 Nov 2020 16:54:42 +0800 Subject: [PATCH 2/4] =?UTF-8?q?=E4=BC=98=E5=8C=96=E6=92=AD=E6=94=BE?= =?UTF-8?q?=E7=A8=8B=E5=BA=8F=EF=BC=8C=E7=BC=A9=E7=9F=AD=E6=92=AD=E6=94=BE?= =?UTF-8?q?=E5=8A=A0=E8=BD=BD=E6=97=B6=E9=97=B4?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../iot/vmp/vmanager/play/PlayController.java | 70 +++++++++++-------- web_src/src/components/channelList.vue | 23 +++--- .../src/components/gb28181/devicePlayer.vue | 2 +- 3 files changed, 53 insertions(+), 42 deletions(-) diff --git a/src/main/java/com/genersoft/iot/vmp/vmanager/play/PlayController.java b/src/main/java/com/genersoft/iot/vmp/vmanager/play/PlayController.java index 00f268c3..780e9502 100644 --- a/src/main/java/com/genersoft/iot/vmp/vmanager/play/PlayController.java +++ b/src/main/java/com/genersoft/iot/vmp/vmanager/play/PlayController.java @@ -39,7 +39,8 @@ public class PlayController { private ZLMRESTfulUtils zlmresTfulUtils; @GetMapping("/play/{deviceId}/{channelId}") - public ResponseEntity play(@PathVariable String deviceId, @PathVariable String channelId) { + public ResponseEntity play(@PathVariable String deviceId, @PathVariable String channelId, + Integer getEncoding) { Device device = storager.queryVideoDevice(deviceId); StreamInfo streamInfo = storager.queryPlayByDevice(deviceId, channelId); @@ -64,40 +65,49 @@ public class PlayController { long startTime = System.currentTimeMillis(); JSONObject rtpInfo = null; - while (lockFlag) { - try { - if (System.currentTimeMillis() - startTime > 60 * 1000) { - storager.stopPlay(streamInfo); - logger.info("播放等待超时"); - return new ResponseEntity("timeout", HttpStatus.OK); - } else { - streamInfo = storager.queryPlayByDevice(deviceId, channelId); - if (!rtpPushed) { - logger.info("查询RTP推流信息..."); - rtpInfo = zlmresTfulUtils.getRtpInfo(streamId); - } - if (rtpInfo != null && rtpInfo.getBoolean("exist") && streamInfo != null && streamInfo.getFlv() != null) { - logger.info("查询流编码信息:" + streamInfo.getFlv()); - rtpPushed = true; - Thread.sleep(2000); - JSONObject mediaInfo = zlmresTfulUtils.getMediaInfo("rtp", "rtmp", streamId); - if (mediaInfo.getInteger("code") == 0 && mediaInfo.getBoolean("online")) { - lockFlag = false; - logger.info("流编码信息已获取"); - JSONArray tracks = mediaInfo.getJSONArray("tracks"); - streamInfo.setTracks(tracks); - storager.startPlay(streamInfo); + if (getEncoding == 1) { + while (lockFlag) { + try { + if (System.currentTimeMillis() - startTime > 60 * 1000) { + storager.stopPlay(streamInfo); + logger.info("播放等待超时"); + return new ResponseEntity("timeout", HttpStatus.OK); + } else { + streamInfo = storager.queryPlayByDevice(deviceId, channelId); + if (!rtpPushed) { + logger.info("查询RTP推流信息..."); + rtpInfo = zlmresTfulUtils.getRtpInfo(streamId); + } + if (rtpInfo != null && rtpInfo.getBoolean("exist") && streamInfo != null + && streamInfo.getFlv() != null) { + logger.info("查询流编码信息:" + streamInfo.getFlv()); + rtpPushed = true; + Thread.sleep(2000); + JSONObject mediaInfo = zlmresTfulUtils.getMediaInfo("rtp", "rtmp", streamId); + if (mediaInfo.getInteger("code") == 0 && mediaInfo.getBoolean("online")) { + lockFlag = false; + logger.info("流编码信息已获取"); + JSONArray tracks = mediaInfo.getJSONArray("tracks"); + streamInfo.setTracks(tracks); + storager.startPlay(streamInfo); + } else { + logger.info("流编码信息未获取,2秒后重试..."); + } } else { - logger.info("流编码信息未获取,2秒后重试..."); + Thread.sleep(2000); + continue; } - } else { - Thread.sleep(2000); - continue; } + } catch (InterruptedException e) { + e.printStackTrace(); } - } catch (InterruptedException e) { - e.printStackTrace(); } + } else { + String flv = storager.getMediaInfo().getLocalIP() + ":" + storager.getMediaInfo().getHttpPort() + "/rtp/" + + streamId + ".flv"; + streamInfo.setFlv("http://" + flv); + streamInfo.setWs_flv("ws://" + flv); + storager.startPlay(streamInfo); } if (logger.isDebugEnabled()) { diff --git a/web_src/src/components/channelList.vue b/web_src/src/components/channelList.vue index 930da5ba..b539e8cb 100644 --- a/web_src/src/components/channelList.vue +++ b/web_src/src/components/channelList.vue @@ -58,8 +58,8 @@ 播放 停止 查看 - 设备录象 - + 设备录象 + @@ -197,20 +197,21 @@ export default { let deviceId = this.deviceId; this.isLoging = true; let channelId = itemData.channelId; - console.log("通知设备推流1:" + deviceId + " : " + channelId); + let getEncoding = itemData.hasAudio ? '1' : '0' + console.log("通知设备推流1:" + deviceId + " : " + channelId + ":" + getEncoding); let that = this; this.$axios({ method: 'get', - url: '/api/play/' + deviceId + '/' + channelId + url: '/api/play/' + deviceId + '/' + channelId + '?getEncoding=' + getEncoding }).then(function (res) { console.log(res.data) let ssrc = res.data.ssrc; that.isLoging = false; if (!!ssrc) { // that.$refs.devicePlayer.play(res.data, deviceId, channelId, itemData.hasAudio); - that.$refs.devicePlayer.openDialog("media", deviceId, channelId,{ - streamInfo: res.data, - hasAudio: itemData.hasAudio + that.$refs.devicePlayer.openDialog("media", deviceId, channelId, { + streamInfo: res.data, + hasAudio: itemData.hasAudio }); that.initData(); } else { @@ -219,10 +220,10 @@ export default { }).catch(function (e) {}); }, queryRecords: function (itemData) { - var format = moment().format("YYYY-M-D"); - let deviceId = this.deviceId; - let channelId = itemData.channelId; - this.$refs.devicePlayer.openDialog("record", deviceId, channelId, {date:format}) + var format = moment().format("YYYY-M-D"); + let deviceId = this.deviceId; + let channelId = itemData.channelId; + this.$refs.devicePlayer.openDialog("record", deviceId, channelId, {date: format}) }, stopDevicePush: function (itemData) { console.log(itemData) diff --git a/web_src/src/components/gb28181/devicePlayer.vue b/web_src/src/components/gb28181/devicePlayer.vue index 493f5d59..b8e45ba4 100644 --- a/web_src/src/components/gb28181/devicePlayer.vue +++ b/web_src/src/components/gb28181/devicePlayer.vue @@ -223,7 +223,7 @@ export default { play: function (streamInfo, hasAudio) { this.hasaudio = hasAudio; // 根据媒体流信息二次判断 - if (!!streamInfo.tracks && streamInfo.tracks.length > 0) { + if (!!streamInfo.tracks && streamInfo.tracks.length > 0 && hasAudio) { var realHasAudio = false; for (let i = 0; i < streamInfo.tracks.length; i++) { if (streamInfo.tracks[i].codec_type == 1 && streamInfo.tracks[i].codec_id_name == "CodecAAC") { // 判断为AAC音频 From b88f213e6ac201767158d8f50918193bd839fb0b Mon Sep 17 00:00:00 2001 From: Lawrence <1934378145@qq.com> Date: Sat, 7 Nov 2020 17:41:17 +0800 Subject: [PATCH 3/4] =?UTF-8?q?=E4=BC=98=E5=8C=96=E6=89=93=E5=8C=85?= =?UTF-8?q?=E5=8F=82=E6=95=B0?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- pom.xml | 7 ++++--- 1 file changed, 4 insertions(+), 3 deletions(-) diff --git a/pom.xml b/pom.xml index 0f6e9c92..b5e44c0b 100644 --- a/pom.xml +++ b/pom.xml @@ -163,6 +163,7 @@ + org.springframework.boot spring-boot-maven-plugin @@ -176,7 +177,7 @@ 1.8 1.8 -<<<<<<< HEAD + @@ -196,6 +196,7 @@ org.apache.maven.plugins maven-surefire-plugin + From 76d8aa5377d3f60500f97200be99f31c0c385203 Mon Sep 17 00:00:00 2001 From: Lawrence <1934378145@qq.com> Date: Sat, 7 Nov 2020 22:02:17 +0800 Subject: [PATCH 4/4] =?UTF-8?q?=E4=BF=AE=E6=AD=A3=E8=AE=BE=E5=A4=87?= =?UTF-8?q?=E5=9C=A8=E7=BA=BF=E7=A6=BB=E7=BA=BF=E5=88=A4=E6=96=AD=E7=9A=84?= =?UTF-8?q?=E9=94=99=E8=AF=AF?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../redis/VideoManagerRedisStoragerImpl.java | 28 ++++++++++++++++--- 1 file changed, 24 insertions(+), 4 deletions(-) diff --git a/src/main/java/com/genersoft/iot/vmp/storager/redis/VideoManagerRedisStoragerImpl.java b/src/main/java/com/genersoft/iot/vmp/storager/redis/VideoManagerRedisStoragerImpl.java index 7c3a2fc8..765dc82a 100644 --- a/src/main/java/com/genersoft/iot/vmp/storager/redis/VideoManagerRedisStoragerImpl.java +++ b/src/main/java/com/genersoft/iot/vmp/storager/redis/VideoManagerRedisStoragerImpl.java @@ -276,6 +276,7 @@ public class VideoManagerRedisStoragerImpl implements IVideoManagerStorager { PageResult pageResult = new PageResult(); pageResult.setPage(page); pageResult.setCount(count); + Device device = null; if (deviceIds == null || deviceIds.length == 0) { @@ -284,11 +285,21 @@ public class VideoManagerRedisStoragerImpl implements IVideoManagerStorager { pageResult.setTotal(deviceIdList.size()); int maxCount = (page + 1)* count; for (int i = page * count; i < (pageResult.getTotal() > maxCount ? maxCount : pageResult.getTotal() ); i++) { - devices.add((Device)redis.get((String)deviceIdList.get(i))); + // devices.add((Device)redis.get((String)deviceIdList.get(i))); + device =(Device)redis.get((String)deviceIdList.get(i)); + if (redis.scan(VideoManagerConstants.KEEPLIVEKEY_PREFIX+device.getDeviceId()).size() == 0){ + outline(device.getDeviceId()); + } + devices.add(device); } } else { for (int i = 0; i < deviceIds.length; i++) { - devices.add((Device)redis.get(VideoManagerConstants.DEVICE_PREFIX+deviceIds[i])); + // devices.add((Device)redis.get(VideoManagerConstants.DEVICE_PREFIX+deviceIds[i])); + device = (Device)redis.get(VideoManagerConstants.DEVICE_PREFIX+deviceIds[i]); + if (redis.scan(VideoManagerConstants.KEEPLIVEKEY_PREFIX+device.getDeviceId()).size() == 0){ + outline(device.getDeviceId()); + } + devices.add(device); } } pageResult.setData(devices); @@ -304,16 +315,25 @@ public class VideoManagerRedisStoragerImpl implements IVideoManagerStorager { @Override public List queryVideoDeviceList(String[] deviceIds) { List devices = new ArrayList<>(); + Device device = null; if (deviceIds == null || deviceIds.length == 0) { // List deviceIdList = redis.keys(VideoManagerConstants.DEVICE_PREFIX+"*"); List deviceIdList = redis.scan(VideoManagerConstants.DEVICE_PREFIX+"*"); for (int i = 0; i < deviceIdList.size(); i++) { - devices.add((Device)redis.get((String)deviceIdList.get(i))); + device =(Device)redis.get((String)deviceIdList.get(i)); + if (redis.scan(VideoManagerConstants.KEEPLIVEKEY_PREFIX+device.getDeviceId()).size() == 0){ + outline(device.getDeviceId()); + } + devices.add(device); } } else { for (int i = 0; i < deviceIds.length; i++) { - devices.add((Device)redis.get(VideoManagerConstants.DEVICE_PREFIX+deviceIds[i])); + device = (Device)redis.get(VideoManagerConstants.DEVICE_PREFIX+deviceIds[i]); + if (redis.scan(VideoManagerConstants.KEEPLIVEKEY_PREFIX+device.getDeviceId()).size() == 0){ + outline(device.getDeviceId()); + } + devices.add(device); } } return devices;