From 2af5cf496c811fd302564c7edb29d4e5f6cf31e2 Mon Sep 17 00:00:00 2001
From: 64850858 <648540858@qq.com>
Date: 星期五, 04 六月 2021 19:22:47 +0800
Subject: [PATCH] 修复 拉流代理的ffmpeg模式
---
src/main/java/com/genersoft/iot/vmp/media/zlm/ZLMRunner.java | 2
src/main/java/com/genersoft/iot/vmp/service/IStreamProxyService.java | 6 +++
src/main/java/com/genersoft/iot/vmp/media/zlm/ZLMRESTfulUtils.java | 6 ++
src/main/java/com/genersoft/iot/vmp/vmanager/gb28181/play/PlayController.java | 2
src/main/java/com/genersoft/iot/vmp/vmanager/streamProxy/StreamProxyController.java | 13 ++++++
web_src/src/components/dialog/StreamProxyEdit.vue | 25 +++++++++++-
src/main/java/com/genersoft/iot/vmp/service/impl/StreamProxyServiceImpl.java | 21 ++++++++++
web_src/src/components/CloudRecord.vue | 2 -
8 files changed, 69 insertions(+), 8 deletions(-)
diff --git a/src/main/java/com/genersoft/iot/vmp/media/zlm/ZLMRESTfulUtils.java b/src/main/java/com/genersoft/iot/vmp/media/zlm/ZLMRESTfulUtils.java
index c8aa245..d0c88b0 100644
--- a/src/main/java/com/genersoft/iot/vmp/media/zlm/ZLMRESTfulUtils.java
+++ b/src/main/java/com/genersoft/iot/vmp/media/zlm/ZLMRESTfulUtils.java
@@ -176,13 +176,17 @@
return sendPost("getRtpInfo",param, null);
}
- public JSONObject addFFmpegSource(String src_url, String dst_url, String timeout_ms){
+ public JSONObject addFFmpegSource(String src_url, String dst_url, String timeout_ms,
+ boolean enable_hls, boolean enable_mp4, String ffmpeg_cmd_key){
logger.info(src_url);
logger.info(dst_url);
Map<String, Object> param = new HashMap<>();
param.put("src_url", src_url);
param.put("dst_url", dst_url);
param.put("timeout_ms", timeout_ms);
+ param.put("enable_hls", enable_hls);
+ param.put("enable_mp4", enable_mp4);
+ param.put("ffmpeg_cmd_key", ffmpeg_cmd_key);
return sendPost("addFFmpegSource",param, null);
}
diff --git a/src/main/java/com/genersoft/iot/vmp/media/zlm/ZLMRunner.java b/src/main/java/com/genersoft/iot/vmp/media/zlm/ZLMRunner.java
index e255bd3..d622101 100644
--- a/src/main/java/com/genersoft/iot/vmp/media/zlm/ZLMRunner.java
+++ b/src/main/java/com/genersoft/iot/vmp/media/zlm/ZLMRunner.java
@@ -115,7 +115,7 @@
}
Map<String, Object> param = new HashMap<>();
param.put("api.secret",mediaConfig.getSecret()); // -profile:v Baseline
-// param.put("ffmpeg.cmd","%s -fflags nobuffer -rtsp_transport tcp -i %s -c:a aac -strict -2 -ar 44100 -ab 48k -c:v libx264 -f flv %s");
+ param.put("ffmpeg.cmd","%s -fflags nobuffer -rtsp_transport tcp -i %s -c:a aac -strict -2 -ar 44100 -ab 48k -c:v libx264 -f flv %s");
param.put("hook.enable","1");
param.put("hook.on_flow_report","");
param.put("hook.on_play",String.format("%s/on_play", hookPrex));
diff --git a/src/main/java/com/genersoft/iot/vmp/service/IStreamProxyService.java b/src/main/java/com/genersoft/iot/vmp/service/IStreamProxyService.java
index cddc21c..2f7388a 100644
--- a/src/main/java/com/genersoft/iot/vmp/service/IStreamProxyService.java
+++ b/src/main/java/com/genersoft/iot/vmp/service/IStreamProxyService.java
@@ -56,4 +56,10 @@
* @return
*/
boolean stop(String app, String stream);
+
+ /**
+ * 鑾峰彇ffmpeg.cmd妯℃澘
+ * @return
+ */
+ JSONObject getFFmpegCMDs();
}
diff --git a/src/main/java/com/genersoft/iot/vmp/service/impl/StreamProxyServiceImpl.java b/src/main/java/com/genersoft/iot/vmp/service/impl/StreamProxyServiceImpl.java
index a77371f..2eb99b8 100644
--- a/src/main/java/com/genersoft/iot/vmp/service/impl/StreamProxyServiceImpl.java
+++ b/src/main/java/com/genersoft/iot/vmp/service/impl/StreamProxyServiceImpl.java
@@ -104,7 +104,8 @@
param.isEnable_hls(), param.isEnable_mp4(), param.getRtp_type());
}else if ("ffmpeg".equals(param.getType())) {
result = zlmresTfulUtils.addFFmpegSource(param.getSrc_url(), param.getDst_url(),
- param.getTimeout_ms() + "");
+ param.getTimeout_ms() + "", param.isEnable_hls(), param.isEnable_mp4(),
+ param.getFfmpeg_cmd_key());
}
return result;
}
@@ -165,4 +166,22 @@
}
return result;
}
+
+ @Override
+ public JSONObject getFFmpegCMDs() {
+ JSONObject result = new JSONObject();
+ JSONObject mediaServerConfigResuly = zlmresTfulUtils.getMediaServerConfig();
+ if (mediaServerConfigResuly != null && mediaServerConfigResuly.getInteger("code") == 0
+ && mediaServerConfigResuly.getJSONArray("data").size() > 0){
+ JSONObject mediaServerConfig = mediaServerConfigResuly.getJSONArray("data").getJSONObject(0);
+
+ for (String key : mediaServerConfig.keySet()) {
+ if (key.startsWith("ffmpeg.cmd")){
+ result.put(key, mediaServerConfig.getString(key));
+ }
+ }
+ }
+
+ return result;
+ }
}
diff --git a/src/main/java/com/genersoft/iot/vmp/vmanager/gb28181/play/PlayController.java b/src/main/java/com/genersoft/iot/vmp/vmanager/gb28181/play/PlayController.java
index 5f44e76..783542d 100644
--- a/src/main/java/com/genersoft/iot/vmp/vmanager/gb28181/play/PlayController.java
+++ b/src/main/java/com/genersoft/iot/vmp/vmanager/gb28181/play/PlayController.java
@@ -168,7 +168,7 @@
String dstUrl = String.format("rtmp://%s:%s/convert/%s", "127.0.0.1", mediaInfo.getRtmpPort(),
streamId );
String srcUrl = String.format("rtsp://%s:%s/rtp/%s", "127.0.0.1", mediaInfo.getRtspPort(), streamId);
- JSONObject jsonObject = zlmresTfulUtils.addFFmpegSource(srcUrl, dstUrl, "1000000");
+ JSONObject jsonObject = zlmresTfulUtils.addFFmpegSource(srcUrl, dstUrl, "1000000", true, false, null);
logger.info(jsonObject.toJSONString());
JSONObject result = new JSONObject();
if (jsonObject != null && jsonObject.getInteger("code") == 0) {
diff --git a/src/main/java/com/genersoft/iot/vmp/vmanager/streamProxy/StreamProxyController.java b/src/main/java/com/genersoft/iot/vmp/vmanager/streamProxy/StreamProxyController.java
index 2baa999..fd53cea 100644
--- a/src/main/java/com/genersoft/iot/vmp/vmanager/streamProxy/StreamProxyController.java
+++ b/src/main/java/com/genersoft/iot/vmp/vmanager/streamProxy/StreamProxyController.java
@@ -66,6 +66,19 @@
return result;
}
+ @ApiOperation("鑾峰彇ffmpeg.cmd妯℃澘")
+ @GetMapping(value = "/ffmpeg_cmd/list")
+ @ResponseBody
+ public WVPResult getFFmpegCMDs(){
+ logger.debug("鑾峰彇ffmpeg.cmd妯℃澘锛�" );
+ JSONObject data = streamProxyService.getFFmpegCMDs();
+ WVPResult<JSONObject> result = new WVPResult<>();
+ result.setCode(0);
+ result.setMsg("success");
+ result.setData(data);
+ return result;
+ }
+
@ApiOperation("绉婚櫎浠g悊")
@ApiImplicitParams({
@ApiImplicitParam(name = "app", value = "搴旂敤鍚�", dataTypeClass = String.class),
diff --git a/web_src/src/components/CloudRecord.vue b/web_src/src/components/CloudRecord.vue
index 2e6d34c..c269270 100644
--- a/web_src/src/components/CloudRecord.vue
+++ b/web_src/src/components/CloudRecord.vue
@@ -14,8 +14,6 @@
</div>
<div v-if="!recordDetail">
<div style="background-color: #FFFFFF; margin-bottom: 1rem; position: relative; padding: 0.5rem; text-align: left;font-size: 14px;">
-
-
鑺傜偣閫夋嫨: <el-select size="mini" @change="chooseMediaChange" style="width: 16rem; margin-right: 1rem;" v-model="mediaServer" placeholder="璇烽�夋嫨" default-first-option>
<el-option
v-for="item in mediaServerList"
diff --git a/web_src/src/components/dialog/StreamProxyEdit.vue b/web_src/src/components/dialog/StreamProxyEdit.vue
index afc03cc..f558ed6 100644
--- a/web_src/src/components/dialog/StreamProxyEdit.vue
+++ b/web_src/src/components/dialog/StreamProxyEdit.vue
@@ -36,11 +36,23 @@
<el-form-item label="鎷夋祦鍦板潃" prop="src_url" v-if="proxyParam.type=='ffmpeg'">
<el-input v-model="proxyParam.src_url" clearable></el-input>
</el-form-item>
- <el-form-item label="瓒呮椂鏃堕棿" prop="timeout_ms" v-if="proxyParam.type=='ffmpeg'">
+ <el-form-item label="瓒呮椂鏃堕棿:绉�" prop="timeout_ms" v-if="proxyParam.type=='ffmpeg'">
<el-input v-model="proxyParam.timeout_ms" clearable></el-input>
</el-form-item>
<el-form-item label="FFmpeg鍛戒护妯℃澘" prop="ffmpeg_cmd_key" v-if="proxyParam.type=='ffmpeg'">
- <el-input v-model="proxyParam.ffmpeg_cmd_key" clearable></el-input>
+<!-- <el-input v-model="proxyParam.ffmpeg_cmd_key" clearable></el-input>-->
+ <el-select
+ v-model="proxyParam.ffmpeg_cmd_key"
+ style="width: 100%"
+ placeholder="璇烽�夋嫨FFmpeg鍛戒护妯℃澘"
+ >
+ <el-option
+ v-for="item in Object.keys(ffmpegCmdList)"
+ :key="item"
+ :label="ffmpegCmdList[item]"
+ :value="item">
+ </el-option>
+ </el-select>
</el-form-item>
<el-form-item label="鍥芥爣缂栫爜" prop="gbId">
<el-input v-model="proxyParam.gbId" placeholder="璁剧疆鍥芥爣缂栫爜鍙帹閫佸埌鍥芥爣" clearable></el-input>
@@ -159,6 +171,7 @@
enable_mp4: false,
platformGbId: null,
},
+ ffmpegCmdList:{},
rules: {
name: [{ required: true, message: "璇疯緭鍏ュ悕绉�", trigger: "blur" }],
@@ -189,6 +202,14 @@
}).catch(function (error) {
console.log(error);
});
+ this.$axios({
+ method: 'get',
+ url:`/api/proxy/ffmpeg_cmd/list`
+ }).then(function (res) {
+ that.ffmpegCmdList = res.data.data;
+ }).catch(function (error) {
+ console.log(error);
+ });
},
onSubmit: function () {
console.log("onSubmit");
--
Gitblit v1.8.0