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