From f68cfd8de2cf6e516e220d1a706cecabb2b185aa Mon Sep 17 00:00:00 2001 From: Lawrence <1934378145@qq.com> Date: 星期六, 07 十一月 2020 16:54:42 +0800 Subject: [PATCH] 优化播放程序,缩短播放加载时间 --- src/main/java/com/genersoft/iot/vmp/vmanager/play/PlayController.java | 72 ++++++++++++++++++++--------------- web_src/src/components/channelList.vue | 23 ++++++----- web_src/src/components/gb28181/devicePlayer.vue | 2 3 files changed, 54 insertions(+), 43 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 00f268c..780e950 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 @@ private ZLMRESTfulUtils zlmresTfulUtils; @GetMapping("/play/{deviceId}/{channelId}") - public ResponseEntity<String> play(@PathVariable String deviceId, @PathVariable String channelId) { + public ResponseEntity<String> play(@PathVariable String deviceId, @PathVariable String channelId, + Integer getEncoding) { Device device = storager.queryVideoDevice(deviceId); StreamInfo streamInfo = storager.queryPlayByDevice(deviceId, channelId); @@ -64,40 +65,49 @@ long startTime = System.currentTimeMillis(); JSONObject rtpInfo = null; - while (lockFlag) { - try { - if (System.currentTimeMillis() - startTime > 60 * 1000) { - storager.stopPlay(streamInfo); - logger.info("鎾斁绛夊緟瓒呮椂"); - return new ResponseEntity<String>("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绉掑悗閲嶈瘯..."); - } + if (getEncoding == 1) { + while (lockFlag) { + try { + if (System.currentTimeMillis() - startTime > 60 * 1000) { + storager.stopPlay(streamInfo); + logger.info("鎾斁绛夊緟瓒呮椂"); + return new ResponseEntity<String>("timeout", HttpStatus.OK); } else { - Thread.sleep(2000); - continue; + 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 { + 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 930da5b..b539e8c 100644 --- a/web_src/src/components/channelList.vue +++ b/web_src/src/components/channelList.vue @@ -58,8 +58,8 @@ <el-button size="mini" icon="el-icon-video-play" @click="sendDevicePush(scope.row)">鎾斁</el-button> <el-button size="mini" icon="el-icon-switch-button" type="danger" v-if="scope.row.play" @click="stopDevicePush(scope.row)">鍋滄</el-button> <el-button size="mini" icon="el-icon-s-open" type="primary" v-if="scope.row.parental == 1" @click="changeSubchannel(scope.row)">鏌ョ湅</el-button> - <el-button size="mini" icon="el-icon-video-camera" type="primary" @click="queryRecords(scope.row)">璁惧褰曡薄</el-button> -<!-- <el-button size="mini" @click="sendDevicePush(scope.row)">褰曞儚鏌ヨ</el-button> --> + <el-button size="mini" icon="el-icon-video-camera" type="primary" @click="queryRecords(scope.row)">璁惧褰曡薄</el-button> + <!-- <el-button size="mini" @click="sendDevicePush(scope.row)">褰曞儚鏌ヨ</el-button> --> </el-button-group> </template> </el-table-column> @@ -197,20 +197,21 @@ 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 @@ }).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 493f5d5..b8e45ba 100644 --- a/web_src/src/components/gb28181/devicePlayer.vue +++ b/web_src/src/components/gb28181/devicePlayer.vue @@ -223,7 +223,7 @@ 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") { // 鍒ゆ柇涓篈AC闊抽 -- Gitblit v1.8.0