优化拉流代理表单以及逻辑

pull/685/head
648540858 2022-11-22 17:17:35 +08:00
parent 1469971102
commit 8ea6e192d9
10 changed files with 108 additions and 141 deletions

View File

@ -446,7 +446,7 @@ CREATE TABLE `stream_proxy` (
`ffmpeg_cmd_key` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci DEFAULT NULL, `ffmpeg_cmd_key` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci DEFAULT NULL,
`rtp_type` varchar(50) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci DEFAULT NULL, `rtp_type` varchar(50) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci DEFAULT NULL,
`mediaServerId` varchar(50) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci DEFAULT NULL, `mediaServerId` varchar(50) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci DEFAULT NULL,
`enable_hls` bit(1) DEFAULT NULL, `enable_audio` bit(1) DEFAULT NULL,
`enable_mp4` bit(1) DEFAULT NULL, `enable_mp4` bit(1) DEFAULT NULL,
`enable` bit(1) NOT NULL, `enable` bit(1) NOT NULL,
`status` bit(1) NOT NULL, `status` bit(1) NOT NULL,

View File

@ -36,3 +36,8 @@ alter table device
alter table device alter table device
modify hostAddress varchar(50) null; modify hostAddress varchar(50) null;
alter table stream_proxy
change enable_hls enable_audio bit null;

View File

@ -1,12 +1,12 @@
package com.genersoft.iot.vmp.conf; package com.genersoft.iot.vmp.conf;
import com.genersoft.iot.vmp.conf.exception.ControllerException; import com.genersoft.iot.vmp.conf.exception.ControllerException;
import com.genersoft.iot.vmp.gb28181.event.alarm.AlarmEventListener;
import com.genersoft.iot.vmp.vmanager.bean.ErrorCode; import com.genersoft.iot.vmp.vmanager.bean.ErrorCode;
import com.genersoft.iot.vmp.vmanager.bean.WVPResult; import com.genersoft.iot.vmp.vmanager.bean.WVPResult;
import org.slf4j.Logger; import org.slf4j.Logger;
import org.slf4j.LoggerFactory; import org.slf4j.LoggerFactory;
import org.springframework.http.HttpStatus; import org.springframework.http.HttpStatus;
import org.springframework.http.ResponseEntity;
import org.springframework.security.authentication.BadCredentialsException; import org.springframework.security.authentication.BadCredentialsException;
import org.springframework.web.bind.annotation.ExceptionHandler; import org.springframework.web.bind.annotation.ExceptionHandler;
import org.springframework.web.bind.annotation.ResponseStatus; import org.springframework.web.bind.annotation.ResponseStatus;
@ -40,8 +40,8 @@ public class GlobalExceptionHandler {
*/ */
@ExceptionHandler(ControllerException.class) @ExceptionHandler(ControllerException.class)
@ResponseStatus(HttpStatus.INTERNAL_SERVER_ERROR) @ResponseStatus(HttpStatus.INTERNAL_SERVER_ERROR)
public WVPResult<String> exceptionHandler(ControllerException e) { public ResponseEntity<WVPResult<String>> exceptionHandler(ControllerException e) {
return WVPResult.fail(e.getCode(), e.getMsg()); return new ResponseEntity<>(WVPResult.fail(e.getCode(), e.getMsg()), HttpStatus.OK);
} }
/** /**
@ -51,7 +51,7 @@ public class GlobalExceptionHandler {
*/ */
@ExceptionHandler(BadCredentialsException.class) @ExceptionHandler(BadCredentialsException.class)
@ResponseStatus(HttpStatus.INTERNAL_SERVER_ERROR) @ResponseStatus(HttpStatus.INTERNAL_SERVER_ERROR)
public WVPResult<String> exceptionHandler(BadCredentialsException e) { public ResponseEntity<WVPResult<String>> exceptionHandler(BadCredentialsException e) {
return WVPResult.fail(ErrorCode.ERROR100.getCode(), e.getMessage()); return new ResponseEntity<>(WVPResult.fail(ErrorCode.ERROR100.getCode(), e.getMessage()), HttpStatus.OK);
} }
} }

View File

@ -505,6 +505,7 @@ public class ZLMHttpHookListener {
// 修改数据 // 修改数据
streamProxyService.stop(param.getApp(), param.getStream()); streamProxyService.stop(param.getApp(), param.getStream());
}else { }else {
// 无人观看不做处理
ret.put("close", false); ret.put("close", false);
} }
return ret; return ret;

View File

@ -236,14 +236,13 @@ public class ZLMRESTfulUtils {
} }
public JSONObject addFFmpegSource(MediaServerItem mediaServerItem, String src_url, String dst_url, String timeout_ms, public JSONObject addFFmpegSource(MediaServerItem mediaServerItem, String src_url, String dst_url, String timeout_ms,
boolean enable_hls, boolean enable_mp4, String ffmpeg_cmd_key){ boolean enable_audio, boolean enable_mp4, String ffmpeg_cmd_key){
logger.info(src_url); logger.info(src_url);
logger.info(dst_url); logger.info(dst_url);
Map<String, Object> param = new HashMap<>(); Map<String, Object> param = new HashMap<>();
param.put("src_url", src_url); param.put("src_url", src_url);
param.put("dst_url", dst_url); param.put("dst_url", dst_url);
param.put("timeout_ms", timeout_ms); param.put("timeout_ms", timeout_ms);
param.put("enable_hls", enable_hls);
param.put("enable_mp4", enable_mp4); param.put("enable_mp4", enable_mp4);
param.put("ffmpeg_cmd_key", ffmpeg_cmd_key); param.put("ffmpeg_cmd_key", ffmpeg_cmd_key);
return sendPost(mediaServerItem, "addFFmpegSource",param, null); return sendPost(mediaServerItem, "addFFmpegSource",param, null);
@ -287,19 +286,14 @@ public class ZLMRESTfulUtils {
return sendPost(mediaServerItem, "restartServer",null, null); return sendPost(mediaServerItem, "restartServer",null, null);
} }
public JSONObject addStreamProxy(MediaServerItem mediaServerItem, String app, String stream, String url, boolean enable_hls, boolean enable_mp4, String rtp_type) { public JSONObject addStreamProxy(MediaServerItem mediaServerItem, String app, String stream, String url, boolean enable_audio, boolean enable_mp4, String rtp_type) {
Map<String, Object> param = new HashMap<>(); Map<String, Object> param = new HashMap<>();
param.put("vhost", "__defaultVhost__"); param.put("vhost", "__defaultVhost__");
param.put("app", app); param.put("app", app);
param.put("stream", stream); param.put("stream", stream);
param.put("url", url); param.put("url", url);
param.put("enable_hls", enable_hls?1:0);
param.put("enable_mp4", enable_mp4?1:0); param.put("enable_mp4", enable_mp4?1:0);
param.put("enable_rtmp", 1); param.put("enable_audio", enable_audio?1:0);
param.put("enable_fmp4", 1);
param.put("enable_audio", 1);
param.put("enable_rtsp", 1);
param.put("add_mute_audio", 1);
param.put("rtp_type", rtp_type); param.put("rtp_type", rtp_type);
return sendPost(mediaServerItem, "addStreamProxy",param, null); return sendPost(mediaServerItem, "addStreamProxy",param, null);
} }

View File

@ -31,8 +31,8 @@ public class StreamProxyItem extends GbStream {
private String rtp_type; private String rtp_type;
@Schema(description = "是否启用") @Schema(description = "是否启用")
private boolean enable; private boolean enable;
@Schema(description = "是否启用HLS") @Schema(description = "是否启用音频")
private boolean enable_hls; private boolean enable_audio;
@Schema(description = "是否启用MP4") @Schema(description = "是否启用MP4")
private boolean enable_mp4; private boolean enable_mp4;
@Schema(description = "是否 无人观看时删除") @Schema(description = "是否 无人观看时删除")
@ -40,8 +40,6 @@ public class StreamProxyItem extends GbStream {
@Schema(description = "是否 无人观看时自动停用") @Schema(description = "是否 无人观看时自动停用")
private boolean enable_disable_none_reader; private boolean enable_disable_none_reader;
@Schema(description = "上级平台国标ID")
private String platformGbId;
@Schema(description = "创建时间") @Schema(description = "创建时间")
private String createTime; private String createTime;
@ -139,14 +137,6 @@ public class StreamProxyItem extends GbStream {
this.enable = enable; this.enable = enable;
} }
public boolean isEnable_hls() {
return enable_hls;
}
public void setEnable_hls(boolean enable_hls) {
this.enable_hls = enable_hls;
}
public boolean isEnable_mp4() { public boolean isEnable_mp4() {
return enable_mp4; return enable_mp4;
} }
@ -155,19 +145,12 @@ public class StreamProxyItem extends GbStream {
this.enable_mp4 = enable_mp4; this.enable_mp4 = enable_mp4;
} }
@Override
public String getPlatformGbId() {
return platformGbId;
}
public void setPlatformGbId(String platformGbId) {
this.platformGbId = platformGbId;
}
public String getCreateTime() { public String getCreateTime() {
return createTime; return createTime;
} }
@Override
public void setCreateTime(String createTime) { public void setCreateTime(String createTime) {
this.createTime = createTime; this.createTime = createTime;
} }
@ -187,4 +170,12 @@ public class StreamProxyItem extends GbStream {
public void setEnable_disable_none_reader(boolean enable_disable_none_reader) { public void setEnable_disable_none_reader(boolean enable_disable_none_reader) {
this.enable_disable_none_reader = enable_disable_none_reader; this.enable_disable_none_reader = enable_disable_none_reader;
} }
public boolean isEnable_audio() {
return enable_audio;
}
public void setEnable_audio(boolean enable_audio) {
this.enable_audio = enable_audio;
}
} }

View File

@ -5,23 +5,22 @@ import com.alibaba.fastjson2.JSONObject;
import com.genersoft.iot.vmp.common.StreamInfo; import com.genersoft.iot.vmp.common.StreamInfo;
import com.genersoft.iot.vmp.conf.UserSetting; import com.genersoft.iot.vmp.conf.UserSetting;
import com.genersoft.iot.vmp.conf.exception.ControllerException; import com.genersoft.iot.vmp.conf.exception.ControllerException;
import com.genersoft.iot.vmp.gb28181.bean.GbStream;
import com.genersoft.iot.vmp.gb28181.event.EventPublisher; import com.genersoft.iot.vmp.gb28181.event.EventPublisher;
import com.genersoft.iot.vmp.gb28181.event.subscribe.catalog.CatalogEvent; import com.genersoft.iot.vmp.gb28181.event.subscribe.catalog.CatalogEvent;
import com.genersoft.iot.vmp.media.zlm.ZLMRESTfulUtils; import com.genersoft.iot.vmp.media.zlm.ZLMRESTfulUtils;
import com.genersoft.iot.vmp.media.zlm.dto.hook.OnStreamChangedHookParam;
import com.genersoft.iot.vmp.media.zlm.dto.MediaServerItem; import com.genersoft.iot.vmp.media.zlm.dto.MediaServerItem;
import com.genersoft.iot.vmp.media.zlm.dto.StreamProxyItem; import com.genersoft.iot.vmp.media.zlm.dto.StreamProxyItem;
import com.genersoft.iot.vmp.media.zlm.dto.hook.OnStreamChangedHookParam;
import com.genersoft.iot.vmp.service.IGbStreamService; import com.genersoft.iot.vmp.service.IGbStreamService;
import com.genersoft.iot.vmp.service.IMediaServerService; import com.genersoft.iot.vmp.service.IMediaServerService;
import com.genersoft.iot.vmp.service.IMediaService; import com.genersoft.iot.vmp.service.IMediaService;
import com.genersoft.iot.vmp.service.IStreamProxyService;
import com.genersoft.iot.vmp.storager.IRedisCatchStorage; import com.genersoft.iot.vmp.storager.IRedisCatchStorage;
import com.genersoft.iot.vmp.storager.IVideoManagerStorage; import com.genersoft.iot.vmp.storager.IVideoManagerStorage;
import com.genersoft.iot.vmp.storager.dao.GbStreamMapper; import com.genersoft.iot.vmp.storager.dao.GbStreamMapper;
import com.genersoft.iot.vmp.storager.dao.ParentPlatformMapper; import com.genersoft.iot.vmp.storager.dao.ParentPlatformMapper;
import com.genersoft.iot.vmp.storager.dao.PlatformGbStreamMapper; import com.genersoft.iot.vmp.storager.dao.PlatformGbStreamMapper;
import com.genersoft.iot.vmp.storager.dao.StreamProxyMapper; import com.genersoft.iot.vmp.storager.dao.StreamProxyMapper;
import com.genersoft.iot.vmp.service.IStreamProxyService;
import com.genersoft.iot.vmp.utils.DateUtil; import com.genersoft.iot.vmp.utils.DateUtil;
import com.genersoft.iot.vmp.vmanager.bean.ErrorCode; import com.genersoft.iot.vmp.vmanager.bean.ErrorCode;
import com.genersoft.iot.vmp.vmanager.bean.ResourceBaceInfo; import com.genersoft.iot.vmp.vmanager.bean.ResourceBaceInfo;
@ -35,7 +34,9 @@ import org.springframework.transaction.TransactionDefinition;
import org.springframework.transaction.TransactionStatus; import org.springframework.transaction.TransactionStatus;
import org.springframework.util.ObjectUtils; import org.springframework.util.ObjectUtils;
import java.util.*; import java.util.HashMap;
import java.util.List;
import java.util.Map;
/** /**
* *
@ -107,7 +108,6 @@ public class StreamProxyServiceImpl implements IStreamProxyService {
param.getStream() ); param.getStream() );
param.setDst_url(dstUrl); param.setDst_url(dstUrl);
StringBuffer resultMsg = new StringBuffer(); StringBuffer resultMsg = new StringBuffer();
boolean streamLive = false;
param.setMediaServerId(mediaInfo.getId()); param.setMediaServerId(mediaInfo.getId());
boolean saveResult; boolean saveResult;
// 更新 // 更新
@ -124,7 +124,6 @@ public class StreamProxyServiceImpl implements IStreamProxyService {
if (param.isEnable()) { if (param.isEnable()) {
JSONObject jsonObject = addStreamProxyToZlm(param); JSONObject jsonObject = addStreamProxyToZlm(param);
if (jsonObject == null || jsonObject.getInteger("code") != 0) { if (jsonObject == null || jsonObject.getInteger("code") != 0) {
streamLive = false;
resultMsg.append(", 但是启用失败,请检查流地址是否可用"); resultMsg.append(", 但是启用失败,请检查流地址是否可用");
param.setEnable(false); param.setEnable(false);
// 直接移除 // 直接移除
@ -134,28 +133,12 @@ public class StreamProxyServiceImpl implements IStreamProxyService {
updateStreamProxy(param); updateStreamProxy(param);
} }
}else { }else {
streamLive = true;
resultForStreamInfo = mediaService.getStreamInfoByAppAndStream( resultForStreamInfo = mediaService.getStreamInfoByAppAndStream(
mediaInfo, param.getApp(), param.getStream(), null, null); mediaInfo, param.getApp(), param.getStream(), null, null);
} }
} }
if ( !ObjectUtils.isEmpty(param.getPlatformGbId()) && streamLive) {
List<GbStream> gbStreams = new ArrayList<>();
gbStreams.add(param);
if (gbStreamService.addPlatformInfo(gbStreams, param.getPlatformGbId(), param.getCatalogId())){
return resultForStreamInfo;
}else {
resultMsg.append(", 关联国标平台[ " + param.getPlatformGbId() + " ]失败");
throw new ControllerException(ErrorCode.ERROR100.getCode(), resultMsg.toString());
}
}else {
if (!streamLive) {
throw new ControllerException(ErrorCode.ERROR100.getCode(), resultMsg.toString());
}
}
return resultForStreamInfo; return resultForStreamInfo;
} }
@ -245,10 +228,10 @@ public class StreamProxyServiceImpl implements IStreamProxyService {
} }
if ("default".equals(param.getType())){ if ("default".equals(param.getType())){
result = zlmresTfulUtils.addStreamProxy(mediaServerItem, param.getApp(), param.getStream(), param.getUrl(), result = zlmresTfulUtils.addStreamProxy(mediaServerItem, param.getApp(), param.getStream(), param.getUrl(),
param.isEnable_hls(), param.isEnable_mp4(), param.getRtp_type()); param.isEnable_audio(), param.isEnable_mp4(), param.getRtp_type());
}else if ("ffmpeg".equals(param.getType())) { }else if ("ffmpeg".equals(param.getType())) {
result = zlmresTfulUtils.addFFmpegSource(mediaServerItem, param.getSrc_url(), param.getDst_url(), result = zlmresTfulUtils.addFFmpegSource(mediaServerItem, param.getSrc_url(), param.getDst_url(),
param.getTimeout_ms() + "", param.isEnable_hls(), param.isEnable_mp4(), param.getTimeout_ms() + "", param.isEnable_audio(), param.isEnable_mp4(),
param.getFfmpeg_cmd_key()); param.getFfmpeg_cmd_key());
} }
return result; return result;

View File

@ -12,9 +12,9 @@ import java.util.List;
public interface StreamProxyMapper { public interface StreamProxyMapper {
@Insert("INSERT INTO stream_proxy (type, name, app, stream,mediaServerId, url, src_url, dst_url, " + @Insert("INSERT INTO stream_proxy (type, name, app, stream,mediaServerId, url, src_url, dst_url, " +
"timeout_ms, ffmpeg_cmd_key, rtp_type, enable_hls, enable_mp4, enable, status, enable_remove_none_reader, enable_disable_none_reader, createTime) VALUES" + "timeout_ms, ffmpeg_cmd_key, rtp_type, enable_audio, enable_mp4, enable, status, enable_remove_none_reader, enable_disable_none_reader, createTime) VALUES" +
"('${type}','${name}', '${app}', '${stream}', '${mediaServerId}','${url}', '${src_url}', '${dst_url}', " + "('${type}','${name}', '${app}', '${stream}', '${mediaServerId}','${url}', '${src_url}', '${dst_url}', " +
"'${timeout_ms}', '${ffmpeg_cmd_key}', '${rtp_type}', ${enable_hls}, ${enable_mp4}, ${enable}, ${status}, " + "'${timeout_ms}', '${ffmpeg_cmd_key}', '${rtp_type}', ${enable_audio}, ${enable_mp4}, ${enable}, ${status}, " +
"${enable_remove_none_reader}, ${enable_disable_none_reader}, '${createTime}' )") "${enable_remove_none_reader}, ${enable_disable_none_reader}, '${createTime}' )")
int add(StreamProxyItem streamProxyDto); int add(StreamProxyItem streamProxyDto);
@ -30,7 +30,7 @@ public interface StreamProxyMapper {
"timeout_ms=#{timeout_ms}, " + "timeout_ms=#{timeout_ms}, " +
"ffmpeg_cmd_key=#{ffmpeg_cmd_key}, " + "ffmpeg_cmd_key=#{ffmpeg_cmd_key}, " +
"rtp_type=#{rtp_type}, " + "rtp_type=#{rtp_type}, " +
"enable_hls=#{enable_hls}, " + "enable_audio=#{enable_audio}, " +
"enable=#{enable}, " + "enable=#{enable}, " +
"status=#{status}, " + "status=#{status}, " +
"enable_remove_none_reader=#{enable_remove_none_reader}, " + "enable_remove_none_reader=#{enable_remove_none_reader}, " +

View File

@ -32,7 +32,7 @@
<el-table-column label="类型" width="100" > <el-table-column label="类型" width="100" >
<template slot-scope="scope"> <template slot-scope="scope">
<div slot="reference" class="name-wrapper"> <div slot="reference" class="name-wrapper">
<el-tag size="medium">{{scope.row.type}}</el-tag> <el-tag size="medium">{{scope.row.type === "default"? "直接代理":"FFMPEG代理"}}</el-tag>
</div> </div>
</template> </template>
</el-table-column> </el-table-column>
@ -55,15 +55,15 @@
</template> </template>
</el-table-column> </el-table-column>
<el-table-column prop="createTime" label="创建时间" min-width="150" show-overflow-tooltip/> <el-table-column prop="createTime" label="创建时间" min-width="150" show-overflow-tooltip/>
<el-table-column label="转HLS" min-width="120" > <el-table-column label="音频" min-width="120" >
<template slot-scope="scope"> <template slot-scope="scope">
<div slot="reference" class="name-wrapper"> <div slot="reference" class="name-wrapper">
<el-tag size="medium" v-if="scope.row.enable_hls"></el-tag> <el-tag size="medium" v-if="scope.row.enable_audio"></el-tag>
<el-tag size="medium" type="info" v-if="!scope.row.enable_hls"></el-tag> <el-tag size="medium" type="info" v-if="!scope.row.enable_audio"></el-tag>
</div> </div>
</template> </template>
</el-table-column> </el-table-column>
<el-table-column label="MP4录制" min-width="120" > <el-table-column label="录制" min-width="120" >
<template slot-scope="scope"> <template slot-scope="scope">
<div slot="reference" class="name-wrapper"> <div slot="reference" class="name-wrapper">
<el-tag size="medium" v-if="scope.row.enable_mp4"></el-tag> <el-tag size="medium" v-if="scope.row.enable_mp4"></el-tag>
@ -71,11 +71,12 @@
</div> </div>
</template> </template>
</el-table-column> </el-table-column>
<el-table-column label="无人观看自动删除" min-width="160" > <el-table-column label="无人观看" min-width="160" >
<template slot-scope="scope"> <template slot-scope="scope">
<div slot="reference" class="name-wrapper"> <div slot="reference" class="name-wrapper">
<el-tag size="medium" v-if="scope.row.enable_remove_none_reader"></el-tag> <el-tag size="medium" v-if="scope.row.enable_remove_none_reader"></el-tag>
<el-tag size="medium" type="info" v-if="!scope.row.enable_remove_none_reader"></el-tag> <el-tag size="medium" v-if="scope.row.enable_disable_none_reader"></el-tag>
<el-tag size="medium" type="info" v-if="!scope.row.enable_remove_none_reader && !scope.row.enable_disable_none_reader"></el-tag>
</div> </div>
</template> </template>
</el-table-column> </el-table-column>
@ -131,7 +132,6 @@
currentPage:1, currentPage:1,
count:15, count:15,
total:0, total:0,
getListLoading: false,
startBtnLoading: false startBtnLoading: false
}; };
}, },
@ -139,7 +139,7 @@
}, },
mounted() { mounted() {
this.initData(); this.initData();
this.updateLooper = setInterval(this.initData, 1000); this.startUpdateList()
}, },
destroyed() { destroyed() {
this.$destroy('videojs'); this.$destroy('videojs');
@ -149,6 +149,12 @@
initData: function() { initData: function() {
this.getStreamProxyList(); this.getStreamProxyList();
}, },
stopUpdateList: function (){
window.clearInterval(this.updateLooper)
},
startUpdateList: function (){
this.updateLooper = setInterval(this.initData, 1000);
},
currentChange: function(val){ currentChange: function(val){
this.currentPage = val; this.currentPage = val;
this.getStreamProxyList(); this.getStreamProxyList();
@ -159,7 +165,6 @@
}, },
getStreamProxyList: function() { getStreamProxyList: function() {
let that = this; let that = this;
this.getListLoading = true;
this.$axios({ this.$axios({
method: 'get', method: 'get',
url:`/api/proxy/list`, url:`/api/proxy/list`,
@ -175,23 +180,18 @@
} }
that.streamProxyList = res.data.data.list; that.streamProxyList = res.data.data.list;
} }
that.getListLoading = false;
}).catch(function (error) { }).catch(function (error) {
console.log(error); console.log(error);
that.getListLoading = false;
}); });
}, },
addStreamProxy: function(){ addStreamProxy: function(){
this.$refs.streamProxyEdit.openDialog(null, this.initData) this.$refs.streamProxyEdit.openDialog(null, this.initData)
}, },
addOnvif: function(){ addOnvif: function(){
this.getListLoading = true;
this.getListLoading = true;
this.$axios({ this.$axios({
method: 'get', method: 'get',
url:`/api/onvif/search?timeout=3000`, url:`/api/onvif/search?timeout=3000`,
}).then((res) =>{ }).then((res) =>{
this.getListLoading = false;
if (res.data.code === 0 ){ if (res.data.code === 0 ){
if (res.data.data.length > 0) { if (res.data.data.length > 0) {
this.$refs.onvifEdit.openDialog(res.data.data, (url)=>{ this.$refs.onvifEdit.openDialog(res.data.data, (url)=>{
@ -208,7 +208,6 @@
} }
}).catch((error)=> { }).catch((error)=> {
this.getListLoading = false;
this.$message.error(error.response.data.msg); this.$message.error(error.response.data.msg);
}); });
@ -217,7 +216,6 @@
}, },
play: function(row){ play: function(row){
let that = this; let that = this;
this.getListLoading = true;
this.$axios({ this.$axios({
method: 'get', method: 'get',
url:`/api/push/getPlayUrl`, url:`/api/push/getPlayUrl`,
@ -227,7 +225,6 @@
mediaServerId: row.mediaServerId mediaServerId: row.mediaServerId
} }
}).then(function (res) { }).then(function (res) {
that.getListLoading = false;
if (res.data.code === 0) { if (res.data.code === 0) {
that.$refs.devicePlayer.openDialog("streamPlay", null, null, { that.$refs.devicePlayer.openDialog("streamPlay", null, null, {
streamInfo: res.data.data, streamInfo: res.data.data,
@ -243,13 +240,11 @@
}).catch(function (error) { }).catch(function (error) {
console.log(error); console.log(error);
that.getListLoading = false;
}); });
}, },
deleteStreamProxy: function(row){ deleteStreamProxy: function(row){
let that = this; let that = this;
this.getListLoading = true;
that.$axios({ that.$axios({
method:"delete", method:"delete",
url:"/api/proxy/del", url:"/api/proxy/del",
@ -258,16 +253,13 @@
stream: row.stream stream: row.stream
} }
}).then((res)=>{ }).then((res)=>{
that.getListLoading = false;
that.initData() that.initData()
}).catch(function (error) { }).catch(function (error) {
console.log(error); console.log(error);
that.getListLoading = false;
}); });
}, },
start: function(row){ start: function(row){
let that = this; this.stopUpdateList()
this.getListLoading = true;
this.$set(row, 'startBtnLoading', true) this.$set(row, 'startBtnLoading', true)
this.$axios({ this.$axios({
method: 'get', method: 'get',
@ -276,28 +268,31 @@
app: row.app, app: row.app,
stream: row.stream stream: row.stream
} }
}).then(function (res) { }).then((res)=> {
that.getListLoading = false;
that.$set(row, 'startBtnLoading', false)
if (res.data.code === 0){ if (res.data.code === 0){
that.initData() this.initData()
}else { }else {
that.$message({ this.$message({
showClose: true, showClose: true,
message: "保存失败,请检查地址是否可用!", message: "启动失败,请检查地址是否可用!",
type: "error", type: "error",
}); });
} }
this.$set(row, 'startBtnLoading', false)
}).catch(function (error) { this.startUpdateList()
}).catch((error)=> {
console.log(error); console.log(error);
that.getListLoading = false; this.$message({
that.$set(row, 'startBtnLoading', false) showClose: true,
message: "启动失败,请检查地址是否可用!",
type: "error",
});
this.$set(row, 'startBtnLoading', false)
this.startUpdateList()
}); });
}, },
stop: function(row){ stop: function(row){
let that = this; let that = this;
this.getListLoading = true;
this.$axios({ this.$axios({
method: 'get', method: 'get',
url:`/api/proxy/stop`, url:`/api/proxy/stop`,
@ -306,11 +301,9 @@
stream: row.stream stream: row.stream
} }
}).then(function (res) { }).then(function (res) {
that.getListLoading = false;
that.initData() that.initData()
}).catch(function (error) { }).catch(function (error) {
console.log(error); console.log(error);
that.getListLoading = false;
}); });
}, },
refresh: function (){ refresh: function (){

View File

@ -83,31 +83,23 @@
<el-option label="组播" value="2"></el-option> <el-option label="组播" value="2"></el-option>
</el-select> </el-select>
</el-form-item> </el-form-item>
<el-form-item label="无人观看" prop="rtp_type" >
<el-form-item label="国标平台"> <el-select
<el-select @change="noneReaderHandler"
v-model="proxyParam.platformGbId" v-model="proxyParam.none_reader"
style="width: 100%" style="width: 100%"
placeholder="请选择国标平台" placeholder="请选择无人观看的处理方式"
> >
<el-option <el-option label="不做处理" value="0"></el-option>
v-for="item in platformList" <el-option label="停用" value="1"></el-option>
:key="item.name" <el-option label="移除" value="2"></el-option>
:label="item.name" </el-select>
:value="item.serverGBId"> </el-form-item>
<span style="float: left">{{ item.name }}</span>
<span style="float: right; color: #8492a6; font-size: 13px">{{ item.serverGBId }}</span>
</el-option>
</el-select>
</el-form-item>
<el-form-item label="其他选项"> <el-form-item label="其他选项">
<div style="float: left;"> <div style="float: left;">
<el-checkbox label="启用" v-model="proxyParam.enable" ></el-checkbox> <el-checkbox label="启用" v-model="proxyParam.enable" ></el-checkbox>
<el-checkbox label="转HLS" v-model="proxyParam.enable_hls" ></el-checkbox> <el-checkbox label="开启音频" v-model="proxyParam.enable_audio" ></el-checkbox>
<el-checkbox label="MP4录制" v-model="proxyParam.enable_mp4" ></el-checkbox> <el-checkbox label="录制" v-model="proxyParam.enable_mp4" ></el-checkbox>
<el-checkbox label="无人观看自动删除" v-model="proxyParam.enable_remove_none_reader" @change="removeNoneReader"></el-checkbox>
<el-checkbox label="无人观看停止拉流" v-model="proxyParam.enable_disable_none_reader" @change="disableNoneReaderHandType"></el-checkbox>
</div> </div>
</el-form-item> </el-form-item>
@ -169,10 +161,11 @@ export default {
gbId: null, gbId: null,
rtp_type: null, rtp_type: null,
enable: true, enable: true,
enable_hls: true, enable_audio: true,
enable_mp4: false, enable_mp4: false,
none_reader: null,
enable_remove_none_reader: false, enable_remove_none_reader: false,
enable_disable_none_reader: true, enable_disable_none_reader: false,
platformGbId: null, platformGbId: null,
mediaServerId: null, mediaServerId: null,
}, },
@ -196,6 +189,7 @@ export default {
this.listChangeCallback = callback; this.listChangeCallback = callback;
if (proxyParam != null) { if (proxyParam != null) {
this.proxyParam = proxyParam; this.proxyParam = proxyParam;
this.proxyParam.none_reader = null;
} }
let that = this; let that = this;
@ -233,26 +227,26 @@ export default {
}, },
onSubmit: function () { onSubmit: function () {
this.dialogLoading = true; this.dialogLoading = true;
var that = this; this.noneReaderHandler();
that.$axios({ this.$axios({
method: 'post', method: 'post',
url:`/api/proxy/save`, url:`/api/proxy/save`,
data: that.proxyParam data: this.proxyParam
}).then(function (res) { }).then((res)=> {
that.dialogLoading = false; this.dialogLoading = false;
if (typeof (res.data.code) != "undefined" && res.data.code === 0) { if (typeof (res.data.code) != "undefined" && res.data.code === 0) {
that.$message({ this.$message({
showClose: true, showClose: true,
message: res.data.msg, message: res.data.msg,
type: "success", type: "success",
}); });
that.showDialog = false; this.showDialog = false;
if (that.listChangeCallback != null) { if (this.listChangeCallback != null) {
that.listChangeCallback(); this.listChangeCallback();
that.dialogLoading = false; this.dialogLoading = false;
} }
} }
}).catch(function (error) { }).catch((error) =>{
console.log(error); console.log(error);
this.dialogLoading = false; this.dialogLoading = false;
}); });
@ -280,12 +274,18 @@ export default {
this.platform.expires = "300"; this.platform.expires = "300";
} }
}, },
removeNoneReader: function(checked) { noneReaderHandler: function() {
this.proxyParam.enable_disable_none_reader = !checked; if (this.proxyParam.none_reader === null || this.proxyParam.none_reader === "0") {
this.proxyParam.enable_disable_none_reader = false;
this.proxyParam.enable_remove_none_reader = false;
}else if (this.proxyParam.none_reader === "1"){
this.proxyParam.enable_disable_none_reader = true;
this.proxyParam.enable_remove_none_reader = false;
}else if (this.proxyParam.none_reader ==="2"){
this.proxyParam.enable_disable_none_reader = false;
this.proxyParam.enable_remove_none_reader = true;
}
}, },
disableNoneReaderHandType: function(checked) {
this.proxyParam.enable_remove_none_reader = !checked;
}
}, },
}; };
</script> </script>