Browse Source

gb28181平台对接

Administrator 5 years ago
parent
commit
306b39d042

+ 24 - 7
global.js

@@ -1,16 +1,33 @@
+/**---------------GB28181服务器信息配置-------------------**/
 const serverip="218.59.173.214:8081"
+
 const host = 'http://' + serverip;
-const baseMediaUrl='ws://' + serverip + '/';
-function genApiUrl(method){
-	return host+method;
-}
+/**------------------------------------------------------**/
+
+
+/**---------------ZLMediaKit流媒体服务器配置---------------**/
+const ZLServerIp="218.59.173.214:801";
+const ZLSecret="035c73f7-bb6b-4889-a715-d9eb2d1925cc";
+
+const ZLHost='http://' + ZLServerIp+"/index/api";
+const baseMediaUrl='ws://' + ZLServerIp + '/';
+/**------------------------------------------------------**/
+
+//生成GB28181平台接口url
 function genGb28181Url(method){
 	return host+method;
 }
+
+//生成ZLMediaKit平台接口url
+function genApiUrl(method){
+	return ZLHost+method+"?secret="+ZLSecret;
+}
+
+
+
 export default{
-	serverip,
-    host,
 	genApiUrl,
 	genGb28181Url,
-	baseMediaUrl
+	baseMediaUrl,
+	ZLServerIp
 }

+ 1 - 0
src/components/control.vue

@@ -225,6 +225,7 @@ export default {
 		getAllSession: function() {
 			let that = this;
 			that.allSessionData = [];
+			console.log("地址:"+this.$global.genApiUrl('/getAllSession'));
 			this.$axios({
 				method: 'get',
 				url: this.$global.genApiUrl('/getAllSession')

+ 76 - 0
src/components/gb28181/deviceList.vue

@@ -0,0 +1,76 @@
+<template>
+	<div id="device">
+		<!--设备列表-->
+		<el-table :data="deviceList" border style="width: 100%">
+			<el-table-column prop="name" label="名称" width="180" align="center">
+			</el-table-column>
+			<el-table-column prop="deviceId" label="设备编号" width="240" align="center">
+			</el-table-column>
+			<el-table-column label="地址" width="180" align="center">
+				<template slot-scope="scope">
+					<div slot="reference" class="name-wrapper">
+						<el-tag size="medium">{{ scope.row.host.address }}</el-tag>
+					</div>
+				</template>
+			</el-table-column>
+			<el-table-column prop="manufacturer" label="厂家" align="center">
+			</el-table-column>
+			<el-table-column prop="model" label="固件版本" align="center">
+			</el-table-column>
+			<el-table-column prop="transport" label="通讯方式" align="center">
+			</el-table-column>
+			<el-table-column label="状态" width="180" align="center">
+				<template slot-scope="scope">
+					<div slot="reference" class="name-wrapper">
+						<el-tag size="medium">{{ scope.row.online==1?'在线' :'离线'}}</el-tag>
+					</div>
+				</template>
+			</el-table-column>
+
+			<el-table-column label="操作" width="240" align="center">
+				<template slot-scope="scope">
+					<el-button size="mini" @click="refDevice(scope.row)">刷新</el-button>
+					<el-button size="mini" @click="currentDevice=scope.row;showDevicePushConfirm=true">查看通道</el-button>
+				</template>
+			</el-table-column>
+		</el-table>
+		
+		<!--推流信息确认框-->
+		<el-dialog title="通道列表" :visible.sync="showDevicePushConfirm" width="40%">
+			<el-table :data="getcurrentDeviceChannels" style="width: 100%">
+				<el-table-column prop="channelId" label="通道编号" width="210">
+				</el-table-column>
+				<el-table-column prop="name" label="通道名称" width="180">
+				</el-table-column>
+				<el-table-column prop="address" label="地址">
+				</el-table-column>
+				<el-table-column label="操作" width="240" align="center">
+					<template slot-scope="scope">
+						<el-button size="mini" @click="sendDevicePush(scope.row)">预览视频</el-button>
+						<el-button size="mini" @click="sendDevicePush(scope.row)">录像查询</el-button>
+					</template>
+				</el-table-column>
+			</el-table>
+		</el-dialog>
+		
+	</div>
+
+</template>
+
+<script>
+	export default {
+		name: 'device',
+		props: {
+			deviceList: Array,
+		},
+		data() {
+
+		},
+		methods: {
+
+		}
+	}
+</script>
+
+<style>
+</style>

+ 300 - 0
src/components/gb28181/devicePlayer.vue

@@ -0,0 +1,300 @@
+<template>
+	<div id="devicePlayer">
+		<el-dialog title="视频播放" top="0" :visible.sync="showVideoDialog" :destroy-on-close="true" @close="stop()">
+			<iframe :src="videoUrl" ref="videoRender" style="width:100%; height:35rem;" frameborder="no" border="0" marginwidth="0"
+			 marginheight="0" scrolling="no" allowtransparency="yes"></iframe>
+			<div id="shared" style="text-align: right;">
+				<el-tabs>
+					<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>
+						</div>
+						<div style="display: flex; margin-bottom: 0.5rem; height: 2.5rem;">
+							<span style="width: 5rem; line-height: 2.5rem; text-align: right;">播放地址:</span>
+							<el-input v-model="getPlayerShared.sharedUrl" :disabled="true" v-on:click.native="copySharedInfo(getPlayerShared.sharedUrl)"></el-input>
+						</div>
+						<div style="display: flex; margin-bottom: 0.5rem; height: 2.5rem;">
+							<span style="width: 5rem; line-height: 2.5rem; text-align: right;">iframe:</span>
+							<el-input v-model="getPlayerShared.sharedIframe" :disabled="true" v-on:click.native="copySharedInfo(getPlayerShared.sharedIframe)"></el-input>
+						</div>
+						<div style="display: flex; margin-bottom: 0.5rem; height: 2.5rem;">
+							<span style="width: 5rem; line-height: 2.5rem; text-align: right;">资源地址:</span>
+							<el-input v-model="getPlayerShared.sharedRtmp" :disabled="true" v-on:click.native="copySharedInfo(getPlayerShared.sharedRtmp)"></el-input>
+						</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-table :data="videoHistory.searchHistoryResult" style="width: 100%">
+							<el-table-column label="文件" prop="path" width="500">
+							</el-table-column>
+							<el-table-column align="right" width="300">
+								<template slot="header" slot-scope="scope">
+									<el-date-picker v-model="videoHistory.searchHistoryParam" type="date" placeholder="选择日期" @change="recordList()">
+									</el-date-picker>
+								</template>
+							</el-table-column>
+							<el-table-column label="">
+								<template slot-scope="scope">
+									<el-button type="primary" size="mini" @click="playRecord(false,scope.row)">播放</el-button>
+								</template>
+							</el-table-column>
+						</el-table>
+					</el-tab-pane>
+					<!--遥控界面-->
+					<el-tab-pane label="视频遥控" name="third">
+						<div class="control-wrapper">
+						    <div class="control-btn control-top">
+						        <i class="fa fa-chevron-up"></i>
+						        <div class="control-inner-btn control-inner"></div>
+						    </div>
+						    <div class="control-btn control-left">
+						        <i class="fa fa-chevron-left"></i>
+						        <div class="control-inner-btn control-inner"></div>
+						    </div>
+						    <div class="control-btn control-bottom">
+						        <i class="fa fa-chevron-down"></i>
+						        <div class="control-inner-btn control-inner"></div>
+						    </div>
+						    <div class="control-btn control-right">
+						        <i class="fa fa-chevron-right"></i>
+						        <div class="control-inner-btn control-inner"></div>
+						    </div>
+						    <div class="control-round">
+						        <div class="control-round-inner">
+						            <i class="fa fa-pause-circle"></i>
+						        </div>
+						    </div>
+						</div>
+					</el-tab-pane>
+				</el-tabs>
+			</div>
+		</el-dialog>
+	</div>
+
+</template>
+
+<script>
+	export default {
+		name: 'devicePlayer',
+		props: {
+
+		},
+		computed: {
+			getPlayerShared: function() {
+				let info = {
+					sharedUrl: window.location.host + '/' + this.videoUrl,
+					sharedIframe: '<iframe src="' + window.location.host + '/' + this.videoUrl + '"></iframe>',
+					sharedRtmp: this.videoUrl
+				};
+				return info;
+			},
+		},
+		data() {
+			return {
+				videoUrl: '',
+				videoHistory: {
+					searchHistoryParam: "",
+					searchHistoryResult: [], //媒体流历史记录搜索结果
+				},
+				showVideoDialog: false,
+				normalssrc:'',
+				ssrc: '',
+			}
+		},
+		methods: {
+			play: function(normalssrc) {
+				this.normalssrc=normalssrc;
+				let hex_ssrc = parseInt(normalssrc).toString(16);
+				let hex_ssrc_size = 8 - hex_ssrc.length;
+				for (var i = 0; i < hex_ssrc_size; i++) {
+					hex_ssrc = "0" + hex_ssrc;
+				}
+				console.log("hex_ssrc:"+hex_ssrc);
+				this.ssrc = hex_ssrc.toLocaleUpperCase();
+				console.log("转换完成:"+this.ssrc);
+				this.videoUrl = '/video/video.html?url=' + this.$global.baseMediaUrl + 'rtp/' + this.ssrc + ".flv?st=" + new Date().getTime();
+				this.showVideoDialog = true;
+				console.log(this.ssrc);
+			},
+			stop: function() {
+				console.log("关闭视频");
+				this.videoUrl = '';
+				this.showVideoDialog = false;
+				let that = this;
+				this.$axios({
+					method: 'get',
+					url: this.$global.genGb28181Url('/api/play/' + this.normalssrc + '/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'
+						});
+					}
+				);
+			},
+			startRecord: function() {
+				let that = this;
+				let startURL = this.$global.genApiUrl('/startRecord') + '&type=1&vhost=__defaultVhost__&app=rtp&stream=' + this.ssrc;
+				console.log(startURL);
+				this.$axios({
+					method: 'get',
+					url: startURL
+				}).then(function(res) {
+					console.log(JSON.stringify(res.data));
+					if (res.data.code == 0 && res.data.result) {
+						that.$message({
+							showClose: true,
+							message: '开始录制',
+							type: 'success'
+						});
+					} else {
+						that.$message({
+							showClose: true,
+							message: res.data.msg,
+							type: 'error'
+						});
+					}
+				});
+			},
+			stopRecord: function() {
+				let that = this;
+				let streamInfo = this.currentPlayerInfo;
+				let stopURL = this.$global.genApiUrl('/stopRecord') + '&type=1&vhost=__defaultVhost__&app=rtp&stream=' + this.ssrc;
+				console.log(stopURL);
+				this.$axios({
+					method: 'get',
+					url: stopURL
+				}).then(function(res) {
+					console.log(JSON.stringify(res.data));
+					if (res.data.code == 0 && res.data.result) {
+						that.$message({
+							showClose: true,
+							message: '结束录制',
+							type: 'success'
+						});
+					} else {
+						that.$message({
+							showClose: true,
+							message: res.data.msg,
+							type: 'error'
+						});
+					}
+				});
+			},
+			recordList: function() {
+				let that = this;
+				console.log("当前ssrc:"+this.ssrc);
+				var date = this.videoHistory.searchHistoryParam;
+				var year = date.getFullYear();
+				var month = date.getMonth() + 1;
+				var day = date.getDate();
+				if (month < 10) {
+					month = "0" + month;
+				}
+				if (day < 10) {
+					day = "0" + day;
+				}
+				let nowDate = year + "-" + month + "-" + day;
+				let stopURL = this.$global.genApiUrl('/getMp4RecordFile') + '&vhost=__defaultVhost__&app=rtp&stream=' + this.ssrc +
+					'&period=' + nowDate;
+
+				console.log(stopURL);
+				this.$axios({
+					method: 'get',
+					url: stopURL
+				}).then(function(res) {
+					console.log(JSON.stringify(res.data));
+					if (res.data.code == 0 && res.data) {
+						let mp4files = res.data.data.paths;
+						let rootPath = res.data.data.rootPath;
+						let weburltemp = rootPath.substr(rootPath.indexOf("record"));
+						let weburl = "http://" + that.$global.ZLServerIp + "/" + weburltemp;
+						for (let i in mp4files) {
+							let fullMp4file = weburl + mp4files[i]
+							console.log(fullMp4file);
+							that.videoHistory.searchHistoryResult.push({
+								"path": fullMp4file
+							});
+						};
+						that.$message({
+							showClose: true,
+							message: '列表获取成功',
+							type: 'success'
+						});
+					} else {
+						that.$message({
+							showClose: true,
+							message: res.data.msg,
+							type: 'error'
+						});
+					}
+				});
+			},
+			playRecord: function(isBackLive, rowData) {
+				console.log(JSON.stringify(rowData));
+				this.$refs.videoRender.contentWindow.postMessage({
+					cmd: 'switchUrl',
+					params: isBackLive ? {
+						"path": this.videoUrl.replace("/video/video.html?url=","")
+					} : rowData
+				}, '*')
+			},
+		}
+	}
+</script>
+
+<style>
+	.control-wrapper {position: relative;width: 30vw;height: 30vw;max-width: 100px;max-height: 100px;margin: 0 auto;border-radius: 100%;}
+	 
+	.control-btn {display: flex;justify-content: center;position: absolute; width: 44%; height: 44%; border-radius: 5px; border: 1px solid #78aee4; box-sizing: border-box;  transition: all .3s linear;  }
+	 
+	.control-btn i {font-size: 20px; color: #78aee4;  display: flex; justify-content: center; align-items: center;}
+	 
+	.control-round {position: absolute; top: 21%; left: 21%; width: 58%; height: 58%; background: #fff; border-radius: 100%;}
+	 
+	.control-round-inner {  position: absolute;  left: 15%;  top: 15%;  display: flex; justify-content: center; align-items: center;  width: 70%; height: 70%; font-size: 40px; color: #78aee4; border: 1px solid #78aee4; border-radius: 100%;  transition: all .3s linear; }
+	 
+	.control-inner-btn {position: absolute; width: 60%; height: 60%; background: #fafafa;}
+	 
+	.control-top {top: -8%; left: 27%; transform: rotate(-45deg); border-radius: 5px 100% 5px 0;}
+	 
+	.control-top .control-inner {left: -1px;  bottom: 0;  border-top: 1px solid #78aee4;  border-right: 1px solid #78aee4;  border-radius: 0 100% 0 0;  }
+	 
+	.control-top .fa {transform: rotate(45deg) translateY(-7px); }
+	 
+	.control-left {top: 27%;  left: -8%;  transform: rotate(45deg);  border-radius: 5px 0 5px 100%;}
+	 
+	.control-left .control-inner {right: -1px;  top: -1px;  border-bottom: 1px solid #78aee4;  border-left: 1px solid #78aee4;  border-radius: 0 0 0 100%;}
+	 
+	.control-left .fa {transform: rotate(-45deg) translateX(-7px);}
+	 
+	.control-right {top: 27%;  right: -8%;  transform: rotate(45deg);  border-radius: 5px 100% 5px 0; }
+	 
+	.control-right .control-inner {left: -1px;  bottom: -1px;  border-top: 1px solid #78aee4;  border-right: 1px solid #78aee4;  border-radius: 0 100% 0 0 ;}
+	 
+	.control-right .fa {transform: rotate(-45deg) translateX(7px);}
+	 
+	.control-bottom {left: 27%;  bottom: -8%;  transform: rotate(45deg);  border-radius: 0 5px 100% 5px;  }
+	 
+	.control-bottom .control-inner {top: -1px;  left: -1px;  border-bottom: 1px solid #78aee4;  border-right: 1px solid #78aee4;  border-radius: 0 0 100% 0 ;}
+	 
+	.control-bottom .fa {  transform: rotate(-45deg) translateY(7px);  }
+</style>

+ 31 - 247
src/components/videoList.vue

@@ -6,17 +6,7 @@
 				<el-button icon="el-icon-refresh-right" circle size="mini" @click="getDeviceList()"></el-button>
 			</div>
 		</div>
-
-		<!-- <div class="videoList">
-			<div class="video-item" v-for="(item, index) in videoList">
-				<img class="video-item-img" :src="getSnap(item)" @click="showVideo(item)" />
-				<div class="video-item-title">
-					{{ item.stream }}
-					<el-button icon="el-icon-search" circle size="mini" style="float: right;" @click="showVideoInfo(item)"></el-button>
-				</div>
-			</div>
-		</div> -->
-
+		<devicePlayer :showVideoDialog="showVideoDialog" ref="devicePlayer"></devicePlayer>
 		<!--设备列表-->
 		<el-table :data="deviceList" border style="width: 100%">
 			<el-table-column prop="name" label="名称" width="180" align="center">
@@ -64,67 +54,25 @@
 				<el-table-column label="操作" width="240" align="center">
 					<template slot-scope="scope">
 						<el-button size="mini" @click="sendDevicePush(scope.row)">预览视频</el-button>
-						<el-button size="mini" @click="sendDevicePush(scope.row)">录像查询</el-button>
+						<!-- <el-button size="mini" @click="sendDevicePush(scope.row)">录像查询</el-button> -->
 					</template>
 				</el-table-column>
 			</el-table>
 		</el-dialog>
 
 
-		<el-dialog title="视频播放" :visible.sync="showVideoDialog" :destroy-on-close="true">
-			<iframe :src="getPlayerPath" ref="videoRender" style="width:100%; height:35rem;" frameborder="no" border="0"
-			 marginwidth="0" marginheight="0" scrolling="no" allowtransparency="yes"></iframe>
-			<div id="shared" style="text-align: right;">
-				<el-tabs>
-					<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>
-						</div>
-						<div style="display: flex; margin-bottom: 0.5rem; height: 2.5rem;">
-							<span style="width: 5rem; line-height: 2.5rem; text-align: right;">播放地址:</span>
-							<el-input v-model="getPlayerShared.sharedUrl" :disabled="true" v-on:click.native="copySharedInfo(getPlayerShared.sharedUrl)"></el-input>
-						</div>
-						<div style="display: flex; margin-bottom: 0.5rem; height: 2.5rem;">
-							<span style="width: 5rem; line-height: 2.5rem; text-align: right;">iframe:</span>
-							<el-input v-model="getPlayerShared.sharedIframe" :disabled="true" v-on:click.native="copySharedInfo(getPlayerShared.sharedIframe)"></el-input>
-						</div>
-						<div style="display: flex; margin-bottom: 0.5rem; height: 2.5rem;">
-							<span style="width: 5rem; line-height: 2.5rem; text-align: right;">资源地址:</span>
-							<el-input v-model="getPlayerShared.sharedRtmp" :disabled="true" v-on:click.native="copySharedInfo(getPlayerShared.sharedRtmp)"></el-input>
-						</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-table :data="videoHistory.searchHistoryResult" style="width: 100%">
-							<el-table-column label="文件" prop="path" width="500">
-							</el-table-column>
-							<el-table-column align="right" width="300">
-								<template slot="header" slot-scope="scope">
-									<el-date-picker v-model="videoHistory.searchHistoryParam" type="date" placeholder="选择日期" @change="recordList()">
-									</el-date-picker>
-								</template>
-							</el-table-column>
-							<el-table-column label="">
-								<template slot-scope="scope">
-									<el-button type="primary" size="mini" @click="playRecord(false,scope.row)">播放</el-button>
-								</template>
-							</el-table-column>
-						</el-table>
-					</el-tab-pane>
-				</el-tabs>
-
-			</div>
-		</el-dialog>
+		
 
 	</div>
 </template>
 
 <script>
+	 import devicePlayer from './gb28181/devicePlayer.vue'
 	export default {
 		name: 'app',
-		components: {},
+		components: {
+			devicePlayer,
+		},
 		data() {
 			return {
 				deviceList: [], //设备列表
@@ -133,42 +81,22 @@
 
 
 
-				videoUrl: '',
 				showVideoDialog: false, //控制在线监控实时流窗口的开关
 				videoComponentList: [],
 				currentPlayerInfo: {}, //当前播放对象
 				updateLooper: 0, //数据刷新轮训标志
-				videoHistory: {
-					searchHistoryParam: "",
-					searchHistoryResult: [], //媒体流历史记录搜索结果
-				}
 			};
 		},
 		computed: {
-			getPlayerPath: function() {
-				if (!this.showVideoDialog) { //防止出现流断开不彻底的问题
-					return '';
-				} else {
-					return '/video/video.html?url=' + this.videoUrl;
-				}
-			},
-			getPlayerShared: function() {
-				let info = {
-					sharedUrl: window.location.host + '/video/video.html?url=' + this.videoUrl,
-					sharedIframe: '<iframe src="' + window.location.host + '/video/video.html?url=' + this.videoUrl + '"></iframe>',
-					sharedRtmp: this.videoUrl
-				};
-				return info;
-			},
 			getcurrentDeviceChannels: function() {
-				let data=this.currentDevice['channelMap'];
-				let channels=null;
-				if(data){
+				let data = this.currentDevice['channelMap'];
+				let channels = null;
+				if (data) {
 					channels = Object.keys(data).map(key => {
-						return data[key]; 
+						return data[key];
 					});
 				}
-				console.log("数据:"+JSON.stringify(channels));
+				console.log("数据:" + JSON.stringify(channels));
 				return channels;
 			}
 		},
@@ -188,168 +116,14 @@
 				let that = this;
 				this.$axios({
 					method: 'get',
-					url: this.$global.genApiUrl('/api/devices')
+					url: this.$global.genGb28181Url('/api/devices')
 				}).then(function(res) {
 					that.deviceList = res.data;
 				}).catch(function(error) {
 					console.log("请求失败,使用假数据");
 				});
 			},
-			showVideoInfo: function(videoData) {
-				let msg = '所属应用:' + videoData.app + ' 数据流类型:' + videoData.schema + ' 流名称:' + videoData.stream + ' 观看人数:' +
-					videoData.readerCount;
-				this.$alert(msg, '视频信息', {
-					confirmButtonText: '确定'
-				});
-			},
-			showVideo: function(streamInfo) {
-				this.showVideoDialog = true;
-				this.videoUrl = this.$global.baseMediaUrl + streamInfo.app + '/' + streamInfo.stream + ".flv?st=" + new Date().getTime();
-				this.currentPlayerInfo = streamInfo;
-			},
-			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'
-						});
-					}
-				);
-			},
-			startRecord: function() {
-				let that = this;
-				let streamInfo = this.currentPlayerInfo;
-				let startURL = this.$global.genApiUrl('/startRecord') + '&type=1&vhost=' + streamInfo.vhost + "&app=" + streamInfo
-					.app + "&stream=" + streamInfo.stream;
-				console.log(startURL);
-				this.$axios({
-					method: 'get',
-					url: startURL
-				}).then(function(res) {
-					console.log(JSON.stringify(res.data));
-					if (res.data.code == 0 && res.data.result) {
-						that.$message({
-							showClose: true,
-							message: '开始录制',
-							type: 'success'
-						});
-					} else {
-						that.$message({
-							showClose: true,
-							message: res.data.msg,
-							type: 'error'
-						});
-					}
-				});
-			},
-			stopRecord: function() {
-				let that = this;
-				let streamInfo = this.currentPlayerInfo;
-				let stopURL = this.$global.genApiUrl('/stopRecord') + '&type=1&vhost=' + streamInfo.vhost + "&app=" + streamInfo.app +
-					"&stream=" + streamInfo.stream;
-				console.log(stopURL);
-				this.$axios({
-					method: 'get',
-					url: stopURL
-				}).then(function(res) {
-					console.log(JSON.stringify(res.data));
-					if (res.data.code == 0 && res.data.result) {
-						that.$message({
-							showClose: true,
-							message: '结束录制',
-							type: 'success'
-						});
-					} else {
-						that.$message({
-							showClose: true,
-							message: res.data.msg,
-							type: 'error'
-						});
-					}
-				});
-			},
-			recordList: function() {
-				let that = this;
-				let streamInfo = this.currentPlayerInfo;
-
-				var date = this.videoHistory.searchHistoryParam;
-				var year = date.getFullYear();
-				var month = date.getMonth() + 1;
-				var day = date.getDate();
-				if (month < 10) {
-					month = "0" + month;
-				}
-				if (day < 10) {
-					day = "0" + day;
-				}
-				let nowDate = year + "-" + month + "-" + day;
-
-				let stopURL = this.$global.genApiUrl('/getMp4RecordFile') + '&vhost=' + streamInfo.vhost + "&app=" + streamInfo.app +
-					"&stream=" + streamInfo.stream + '&period=' + nowDate;
-
-
-				console.log(stopURL);
-				this.$axios({
-					method: 'get',
-					url: stopURL
-				}).then(function(res) {
-					console.log(JSON.stringify(res.data));
-					if (res.data.code == 0 && res.data) {
-						let mp4files = res.data.data.paths;
-						let rootPath = res.data.data.rootPath;
-						let weburltemp = rootPath.substr(rootPath.indexOf("record"));
-						let weburl = "http://" + that.$global.serverip + "/" + weburltemp;
-						for (let i in mp4files) {
-							let fullMp4file = weburl + mp4files[i]
-							console.log(fullMp4file);
-							that.videoHistory.searchHistoryResult.push({
-								"path": fullMp4file
-							});
-						};
-						that.$message({
-							showClose: true,
-							message: '列表获取成功',
-							type: 'success'
-						});
-					} else {
-						that.$message({
-							showClose: true,
-							message: res.data.msg,
-							type: 'error'
-						});
-					}
-				});
-			},
-			getSnap: function(streamInfo) {
-				let videoUrl = this.$global.baseMediaUrl + streamInfo.app + '/' + streamInfo.stream + ".flv";
-				// console.log("videoUrl:\t" + videoUrl);
-				let snapUrl = videoUrl.replace(/^ws/, "http");
-				// console.log('snapUrl:\t' + snapUrl);
-				let fullSnapRequest = this.$global.genApiUrl('/getSnap') + '&timeout_sec=10&expire_sec=30&url=' + snapUrl + "&st=" +
-					new Date().getTime();
-				console.log('fullSnapRequest:\t' + fullSnapRequest);
-
-				return fullSnapRequest;
-			},
-			playRecord: function(isBackLive, rowData) {
-				this.$refs.videoRender.contentWindow.postMessage({
-					cmd: 'switchUrl',
-					params: isBackLive ? {
-						"path": this.videoUrl
-					} : rowData
-				}, '*')
-			},
+			
 
 			//gb28181平台对接
 			//刷新设备信息
@@ -361,18 +135,28 @@
 					url: this.$global.genGb28181Url('/api/devices/' + itemData.deviceId + '/sync')
 				}).then(function(res) {
 					// console.log("刷新设备结果:"+JSON.stringify(res));
-				});
+				}).catch(function(e) {
+					that.$message({
+						showClose: true,
+						message: '请求成功',
+						type: 'success'
+					});
+				});;
 			},
 			//通知设备上传媒体流
-			sendDevicePush:function(itemData){
-				///api/play/{deviceId}/{channelId}
-				let deviceId=this.currentDevice.deviceId;
-				let channelId=itemData.channelId;
-				console.log("通知设备推流1:"+deviceId+" : "+channelId);
+			sendDevicePush: function(itemData) {
+				let deviceId = this.currentDevice.deviceId;
+				let channelId = itemData.channelId;
+				console.log("通知设备推流1:" + deviceId + " : " + channelId);
+				let that = this;
 				this.$axios({
 					method: 'get',
-					url: this.$global.genGb28181Url('/api/play/'+deviceId+'/'+channelId)
+					url: this.$global.genGb28181Url('/api/play/' + deviceId + '/' + channelId)
 				}).then(function(res) {
+					let ssrc = res.data.ssrc;
+					that.$refs.devicePlayer.play(ssrc);
+				}).catch(function(e) {
+
 				});
 			}