From 9361943e47a09ea46f76adf06fa0d24a07ac711d Mon Sep 17 00:00:00 2001
From: 648540858 <648540858@qq.com>
Date: 星期一, 26 十月 2020 11:40:46 +0800
Subject: [PATCH] 修复ui录象播放 优化录象查询接口

---
 web_src/src/components/gb28181/devicePlayer.vue |  332 +++++++++++++++++++++++++++++++++++++------------------
 1 files changed, 224 insertions(+), 108 deletions(-)

diff --git a/web_src/src/components/gb28181/devicePlayer.vue b/web_src/src/components/gb28181/devicePlayer.vue
index 9e497e4..8502ee1 100644
--- a/web_src/src/components/gb28181/devicePlayer.vue
+++ b/web_src/src/components/gb28181/devicePlayer.vue
@@ -1,14 +1,14 @@
 <template>
 	<div id="devicePlayer">
-		<el-dialog title="瑙嗛鎾斁" top="0" :visible.sync="showVideoDialog" :destroy-on-close="true" @close="stop()">
+		<el-dialog title="瑙嗛鎾斁" top="0" :close-on-click-modal="false" :visible.sync="showVideoDialog" :destroy-on-close="true" @close="close()">
       <LivePlayer v-if="showVideoDialog" ref="videoPlayer" :videoUrl="videoUrl" :error="videoError" :hasaudio="hasaudio" fluent autoplay live ></LivePlayer>
 			<div id="shared" style="text-align: right; margin-top: 1rem;">
 				<el-tabs v-model="tabActiveName">
-					<el-tab-pane label="濯掍綋娴佷俊鎭�" name="media">
+					<el-tab-pane label="瀹炴椂瑙嗛" name="media">
 						<div style="margin-bottom: 0.5rem;">
-							<el-button type="primary" size="small" @click="playRecord(true, '')">鎾斁</el-button>
-							 <el-button type="primary" size="small" @click="startRecord()">褰曞埗</el-button>
-							 <el-button type="primary" size="small" @click="stopRecord()">鍋滄褰曞埗</el-button>
+<!--							<el-button type="primary" size="small" @click="playRecord(true, '')">鎾斁</el-button>-->
+<!--							 <el-button type="primary" size="small" @click="startRecord()">褰曞埗</el-button>-->
+<!--							 <el-button type="primary" size="small" @click="stopRecord()">鍋滄褰曞埗</el-button>-->
 						</div>
 						<div style="display: flex; margin-bottom: 0.5rem; height: 2.5rem;">
 							<span style="width: 5rem; line-height: 2.5rem; text-align: right;">鎾斁鍦板潃锛�</span>
@@ -24,26 +24,38 @@
 						</div>
 					</el-tab-pane>
 					<!--{"code":0,"data":{"paths":["22-29-30.mp4"],"rootPath":"/home/kkkkk/Documents/ZLMediaKit/release/linux/Debug/www/record/hls/kkkkk/2020-05-11/"}}-->
-					<el-tab-pane label="褰曞儚鏌ヨ" name="second">
-						<el-date-picker v-model="videoHistory.startTime" type="datetime" value-format="yyyy-MM-dd HH:mm:ss" placeholder="寮�濮嬫椂闂�"
-						 @change="recordList()"></el-date-picker>
-						<el-date-picker v-model="videoHistory.endTime" type="datetime" value-format="yyyy-MM-dd HH:mm:ss" placeholder="缁撴潫鏃堕棿"
-						 @change="recordList()"></el-date-picker>
-						<el-table :data="videoHistory.searchHistoryResult" style="width: 100%">
-							<el-table-column label="鍚嶇О" prop="name" width="150"></el-table-column>
-							<el-table-column label="鏂囦欢" prop="filePath" width="300"></el-table-column>
-							<el-table-column label="寮�濮嬫椂闂�" prop="startTime" width="160"></el-table-column>
-							<el-table-column label="缁撴潫鏃堕棿" prop="endTime" width="160"></el-table-column>
+					<el-tab-pane label="褰曞儚鏌ヨ" name="record">
+						<el-date-picker size="mini" v-model="videoHistory.date" type="date" value-format="yyyy-MM-dd" placeholder="鏃ユ湡"
+						 @change="queryRecords()"></el-date-picker>
+<!--            <el-slider style="margin: 0 1rem 1rem 1rem;"-->
+<!--                       v-model="timeVal"-->
+<!--                       :min="timeMin"-->
+<!--                       :max="timeMax"-->
+<!--                       :step="5"-->
+<!--                       :marks="getTimeMakrs()"-->
+<!--                       :format-tooltip="formatTooltip">-->
+<!--            </el-slider>-->
+<!--            <range-slider :min="timeMin"-->
+<!--                          :max="timeMax"-->
+<!--                          :step="5"></range-slider>-->
 
-							<el-table-column label="鎿嶄綔">
+<!--						<el-date-picker v-model="videoHistory.endTime" type="datetime" value-format="yyyy-MM-dd HH:mm:ss" placeholder="缁撴潫鏃堕棿"-->
+<!--						 @change="recordList()"></el-date-picker>-->
+						<el-table :data="videoHistory.searchHistoryResult" height="150" v-load="recordsLoading">
+							<el-table-column label="鍚嶇О" prop="name"></el-table-column>
+							<el-table-column label="鏂囦欢" prop="filePath"></el-table-column>
+							<el-table-column label="寮�濮嬫椂闂�" prop="startTime" :formatter="timeFormatter"></el-table-column>
+							<el-table-column label="缁撴潫鏃堕棿" prop="endTime" :formatter="timeFormatter"></el-table-column>
+
+							<el-table-column label="鎿嶄綔" >
 								<template slot-scope="scope">
-									<el-button type="primary" size="mini" @click="playRecord(false, scope.row)">鎾斁</el-button>
+									<el-button icon="el-icon-video-play" size="mini" @click="playRecord(scope.row)">鎾斁</el-button>
 								</template>
 							</el-table-column>
 						</el-table>
 					</el-tab-pane>
 					<!--閬ユ帶鐣岄潰-->
-					<el-tab-pane label="浜戝彴鎺у埗" name="third">
+					<el-tab-pane label="浜戝彴鎺у埗" name="control">
 						<div style="display: flex; justify-content: center;">
 							<div class="control-wrapper">
 								<div class="control-btn control-top" @mousedown="ptzCamera(0, 1, 0)" @mouseup="ptzCamera(0, 0, 0)">
@@ -65,7 +77,6 @@
 								<div class="control-round">
 									<div class="control-round-inner"><i class="fa fa-pause-circle"></i></div>
 								</div>
-
 								<div style="position: absolute; left: 7.25rem; top: 1.25rem" @mousedown="ptzCamera(0, 0, 2)" @mouseup="ptzCamera(0, 0, 0)"><i
 									 class="el-icon-zoom-in" style="font-size: 1.875rem;"></i></div>
 								<div style="position: absolute; left: 7.25rem; top: 3.25rem; font-size: 1.875rem;" @mousedown="ptzCamera(0, 0, 1)"
@@ -98,126 +109,185 @@
 			}
 		},
 		created() {
-			// this.videoHistory.searchHistoryResult = falsificationData.recordData.recordList;
 		},
 		data() {
 			return {
 				video:'http://lndxyj.iqilu.com/public/upload/2019/10/14/8c001ea0c09cdc59a57829dabc8010fa.mp4',
 				videoUrl: '',
 				videoHistory: {
-					startTime: '',
-					endTime: '',
+					date: '',
 					searchHistoryResult: [] //濯掍綋娴佸巻鍙茶褰曟悳绱㈢粨鏋�
 				},
+        timeMakrs:{
+          // 0	: "0:00",
+          // // 60	: "1:00",
+          // 120	: "2:00",
+          // // 180	: "3:00",
+          // 240	: "4:00",
+          // // 300 : "5:00",
+          // 360	: "6:00",
+          // // 420	: "7:00",
+          // 480	: "8:00",
+          // 540	: "9:00",
+          600: "10:00",
+          // 660	: "11:00",
+          720	: "12:00",
+          // 780	: "13:00",
+          840	: "14:00",
+          // 900 : "15:00",
+          960	: "16:00",
+          // 1020	: "17:00",
+          1080	: "18:00",
+          // 1140	: "19:00",
+          // 1200  : "20:00",
+          // // 1260	: "21:00",
+          // 1320	: "22:00",
+          // // 1380	: "23:00",
+          // 1440	: "24:00"
+        },
 				showVideoDialog: false,
-				normalssrc: '',
 				ssrc: '',
 				deviceId: '',
 				channelId: '',
 				tabActiveName: 'media',
-        hasaudio: false
+        hasaudio: false,
+        loadingRecords: false,
+        recordsLoading: false,
+        timeVal: 0,
+        timeMin: 0,
+        timeMax: 1440,
 
 			};
 		},
 		methods: {
-
-			play: function(streamInfo, deviceId, channelId, hasAudio) {
-        console.log(hasAudio);
-        this.hasaudio = hasAudio;
-        // 鏍规嵁濯掍綋娴佷俊鎭簩娆″垽鏂�
-        if( this.hasaudio && !!streamInfo.tracks && streamInfo.tracks.length > 0) {
-          var realHasAudio = false;
-          for (let i = 0; i < streamInfo.tracks; i++) {
-            if (streamInfo.tracks[i].codec_type == 1) { // 鍒ゆ柇涓洪煶棰�
-              realHasAudio = true;
-            }
-          }
-          this.hasaudio = realHasAudio && this.hasaudio;
+		  openDialog: function (tab, deviceId, channelId, param) {
+		    this.tabActiveName = tab;
+		    this.channelId = channelId;
+		    this.deviceId = deviceId;
+		    this.ssrc = "";
+		    this.videoUrl = ""
+        if (!!this.$refs.videoPlayer) {
+          this.$refs.videoPlayer.pause();
         }
-        console.log("111")
-        console.log(this.hasaudio)
-        this.ssrc = streamInfo.ssrc;
-				this.deviceId = deviceId;
-				this.channelId = channelId;
-        // this.$refs.videoPlayer.hasaudio = hasAudio;
-				// this.videoUrl = streamInfo.flv + "?" + new Date().getTime();
-				this.videoUrl = streamInfo.ws_flv;
-				this.showVideoDialog = true;
-				console.log(this.ssrc);
-			},
-			stop: function() {
-				console.log('鍏抽棴瑙嗛');
-				this.$refs.videoPlayer.pause();
-				this.videoUrl = '';
-				this.showVideoDialog = false;
-				this.$axios({
-					method: 'post',
-					url: '/api/play/' + this.ssrc + '/stop'
-				}).then(function(res) {
-					console.log(JSON.stringify(res));
-				});
 
-				this.$axios({
-					method: 'post',
-					url: '/api/playback/' + this.ssrc + '/stop'
-				}).then(function(res) {
-					console.log(JSON.stringify(res));
-				});
-			},
-			copySharedInfo: function(data) {
-				console.log('澶嶅埗鍐呭锛�' + data);
-				let _this = this;
-				this.$copyText(data).then(
-					function(e) {
-						_this.$message({
-							showClose: true,
-							message: '澶嶅埗鎴愬姛',
-							type: 'success'
-						});
-					},
-					function(e) {
-						_this.$message({
-							showClose: true,
-							message: '澶嶅埗澶辫触锛岃鎵嬪姩澶嶅埗',
-							type: 'error'
-						});
-					}
-				);
-			},
+		    switch(tab) {
+		      case "media":
+		        this.play(param.streamInfo, param.hasAudio)
+		        break;
+		      case "record":
+            this.showVideoDialog = true;
 
-			recordList: function() {
-				if (!this.videoHistory.startTime || !this.videoHistory.endTime) {
+            this.videoHistory.date = param.date;
+            this.queryRecords()
+		        break;
+		      case "control":
+		        break;
+        }
+      },
+      timeAxisSelTime:function (val) {
+        console.log(val)
+      },
+      getTimeMakrs(){
+        return this.timeMakrs;
+      },
+        play: function (streamInfo, hasAudio) {
+            this.hasaudio = hasAudio;
+            // 鏍规嵁濯掍綋娴佷俊鎭簩娆″垽鏂�
+            if (!!streamInfo.tracks && streamInfo.tracks.length > 0) {
+                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闊抽
+                        realHasAudio = true;
+                    }
+                }
+                this.hasaudio = realHasAudio && this.hasaudio;
+            }
+            this.ssrc = streamInfo.ssrc;
+            // this.$refs.videoPlayer.hasaudio = hasAudio;
+            // this.videoUrl = streamInfo.flv + "?" + new Date().getTime();
+            this.videoUrl = streamInfo.ws_flv;
+            this.showVideoDialog = true;
+            console.log(this.ssrc);
+        },
+        close: function () {
+            console.log('鍏抽棴瑙嗛');
+            this.$refs.videoPlayer.pause();
+            this.videoUrl = '';
+            this.showVideoDialog = false;
+        },
+        copySharedInfo: function (data) {
+            console.log('澶嶅埗鍐呭锛�' + data);
+            let _this = this;
+            this.$copyText(data).then(
+                function (e) {
+                    _this.$message({
+                        showClose: true,
+                        message: '澶嶅埗鎴愬姛',
+                        type: 'success'
+                    });
+                },
+                function (e) {
+                    _this.$message({
+                        showClose: true,
+                        message: '澶嶅埗澶辫触锛岃鎵嬪姩澶嶅埗',
+                        type: 'error'
+                    });
+                }
+            );
+        },
+
+      queryRecords: function() {
+				if (!this.videoHistory.date) {
 					return;
 				}
+				this.recordsLoading = true;
 				let that = this;
+				var startTime = this.videoHistory.date + " 00:00:00";
+				var endTime = this.videoHistory.date + " 23:59:59";
 				this.$axios({
 					method: 'get',
-					url: '/api/record/' + this.deviceId + '/' + this.channelId + '?startTime=' + this.videoHistory
-						.startTime + '&endTime=' + this.videoHistory.endTime
-				}).then(function(res) {
-					console.log(JSON.stringify(res));
+					url: '/api/record/' + this.deviceId + '/' + this.channelId + '?startTime=' + startTime + '&endTime=' + endTime
+        }).then(function(res) {
+					// 澶勭悊鏃堕棿淇℃伅
+          that.videoHistory.searchHistoryResult = res.data.recordList;
+          that.recordsLoading = false;
 				}).catch(function(e) {
 					// that.videoHistory.searchHistoryResult = falsificationData.recordData;
 				});
 
 			},
-			playRecord: function(isBackLive, rowData) {
+      onTimeChange: function (video) {
+        // this.queryRecords()
+      },
+			playRecord: function(row) {
 				let that = this;
-				if(isBackLive){
-					this.videoUrl=this.getVideoUrlBySsrc(this.normalssrc);
-					return;
-				}
-				this.$axios({
-					method: 'get',
-					url: '/api/playback/' + this.deviceId + '/' + this.channelId + '?startTime=' + rowData.startTime + '&endTime=' +
-						rowData.endTime
-				}).then(function(res) {
-					let ssrc = res.data.ssrc;
-					 that.videoUrl = that.getVideoUrlBySsrc(ssrc);
-					//that.videoUrl='http://hls.cntv.kcdnvip.com/asp/hls/main/0303000a/3/default/f466089412c04a759c5515dbfcc3ac3d/main.m3u8?maxbr=2048';
-				});
-
+				if (that.ssrc  != "") {
+          that.stopPlayRecord(function (){
+            that.ssrc = "",
+            that.playRecord(row);
+          })
+        }else {
+          this.$axios({
+            method: 'get',
+            url: '/api/playback/' + this.deviceId + '/' + this.channelId + '?startTime=' + row.startTime + '&endTime=' +
+              row.endTime
+          }).then(function(res) {
+            var streamInfo = res.data;
+            that.ssrc = streamInfo.ssrc;
+            that.videoUrl = streamInfo.ws_flv;
+          });
+        }
 			},
+      stopPlayRecord: function (callback) {
+        this.$refs.videoPlayer.pause();
+        this.videoUrl = '';
+        this.$axios({
+          method: 'get',
+          url: '/api/playback/' + this.ssrc + '/stop'
+        }).then(function(res) {
+          if (callback) callback()
+        });
+      },
 			ptzCamera: function(leftRight, upDown, zoom) {
 				console.log('浜戝彴鎺у埗锛�' + leftRight + ' : ' + upDown + " : " + zoom);
 				let that = this;
@@ -230,7 +300,53 @@
 			//////////////////////鎾斁鍣ㄤ簨浠跺鐞�//////////////////////////
 			videoError:function(e){
 				console.log("鎾斁鍣ㄩ敊璇細"+JSON.stringify(e));
-			}
+			},
+      formatTooltip:function(val) {
+			  var h = parseInt(val/60);
+			  var hStr = h< 10 ? ("0" + h):h;
+			  var s = val%60;
+        var sStr = s< 10 ? ("0" + s):s;
+        return h + ":" + sStr;
+      },
+      timeFormatter: function (row, column, cellValue, index) {
+        return cellValue.split( " ")[1];
+      },
+      mergeTime: function (timeArray) {
+        var resultArray = [];
+        for (let i = 0; i < timeArray.length; i++) {
+          var startTime = new Date(timeArray[i].startTime);
+          var endTime = new Date(timeArray[i].endTime);
+          if (i ==0) {
+            resultArray[0] = {
+              startTime: startTime,
+              endTime: endTime
+            }
+          }
+          for (let j = 0; j < resultArray.length; j++) {
+            if (startTime > resultArray[j].endTime  ) { // 鍚堝苟
+              if (startTime - resultArray[j].endTime <= 1000){
+                resultArray[j].endTime = endTime;
+              }else {
+                resultArray[resultArray.length] = {
+                  startTime: startTime,
+                  endTime: endTime
+                }
+              }
+            }else if(resultArray[j].startTime > endTime ) { // 鍚堝苟
+              if (resultArray[j].startTime - endTime <= 1000) {
+                resultArray[j].startTime = startTime;
+              }else {
+                resultArray[resultArray.length] = {
+                  startTime: startTime,
+                  endTime: endTime
+                }
+              }
+            }
+          }
+        }
+        console.log(resultArray)
+        return resultArray;
+      }
 		}
 	};
 </script>

--
Gitblit v1.8.0