Commit 2ef411129756224061b9d44f3fd998a73db8b0a8
1 parent
b7d85a27
修复拉流代理的ffmpeg代理方式
Showing
4 changed files
with
83 additions
and
94 deletions
src/main/java/com/genersoft/iot/vmp/media/zlm/dto/StreamProxyItem.java
| ... | ... | @@ -16,32 +16,30 @@ public class StreamProxyItem extends GbStream { |
| 16 | 16 | @Schema(description = "流ID") |
| 17 | 17 | private String stream; |
| 18 | 18 | @Schema(description = "流媒体服务ID") |
| 19 | - private String media_server_id; | |
| 19 | + private String mediaServerId; | |
| 20 | 20 | @Schema(description = "拉流地址") |
| 21 | 21 | private String url; |
| 22 | 22 | @Schema(description = "拉流地址") |
| 23 | - private String src_url; | |
| 23 | + private String srcUrl; | |
| 24 | 24 | @Schema(description = "目标地址") |
| 25 | - private String dst_url; | |
| 25 | + private String dstUrl; | |
| 26 | 26 | @Schema(description = "超时时间") |
| 27 | - private int timeout_ms; | |
| 27 | + private int timeoutMs; | |
| 28 | 28 | @Schema(description = "ffmpeg模板KEY") |
| 29 | - private String ffmpeg_cmd_key; | |
| 29 | + private String ffmpegCmdKey; | |
| 30 | 30 | @Schema(description = "rtsp拉流时,拉流方式,0:tcp,1:udp,2:组播") |
| 31 | - private String rtp_type; | |
| 31 | + private String rtpType; | |
| 32 | 32 | @Schema(description = "是否启用") |
| 33 | 33 | private boolean enable; |
| 34 | 34 | @Schema(description = "是否启用音频") |
| 35 | - private boolean enable_audio; | |
| 35 | + private boolean enableAudio; | |
| 36 | 36 | @Schema(description = "是否启用MP4") |
| 37 | - private boolean enable_mp4; | |
| 37 | + private boolean enableMp4; | |
| 38 | 38 | @Schema(description = "是否 无人观看时删除") |
| 39 | - private boolean enable_remove_none_reader; | |
| 39 | + private boolean enableRemoveNoneReader; | |
| 40 | 40 | |
| 41 | 41 | @Schema(description = "是否 无人观看时自动停用") |
| 42 | - private boolean enable_disable_none_reader; | |
| 43 | - @Schema(description = "创建时间") | |
| 44 | - private String create_time; | |
| 42 | + private boolean enableDisableNoneReader; | |
| 45 | 43 | |
| 46 | 44 | public String getType() { |
| 47 | 45 | return type; |
| ... | ... | @@ -73,12 +71,12 @@ public class StreamProxyItem extends GbStream { |
| 73 | 71 | |
| 74 | 72 | @Override |
| 75 | 73 | public String getMediaServerId() { |
| 76 | - return media_server_id; | |
| 74 | + return mediaServerId; | |
| 77 | 75 | } |
| 78 | 76 | |
| 79 | 77 | @Override |
| 80 | 78 | public void setMediaServerId(String mediaServerId) { |
| 81 | - this.media_server_id = mediaServerId; | |
| 79 | + this.mediaServerId = mediaServerId; | |
| 82 | 80 | } |
| 83 | 81 | |
| 84 | 82 | public String getUrl() { |
| ... | ... | @@ -90,43 +88,43 @@ public class StreamProxyItem extends GbStream { |
| 90 | 88 | } |
| 91 | 89 | |
| 92 | 90 | public String getSrcUrl() { |
| 93 | - return src_url; | |
| 91 | + return srcUrl; | |
| 94 | 92 | } |
| 95 | 93 | |
| 96 | 94 | public void setSrcUrl(String src_url) { |
| 97 | - this.src_url = src_url; | |
| 95 | + this.srcUrl = src_url; | |
| 98 | 96 | } |
| 99 | 97 | |
| 100 | 98 | public String getDstUrl() { |
| 101 | - return dst_url; | |
| 99 | + return dstUrl; | |
| 102 | 100 | } |
| 103 | 101 | |
| 104 | 102 | public void setDstUrl(String dst_url) { |
| 105 | - this.dst_url = dst_url; | |
| 103 | + this.dstUrl = dst_url; | |
| 106 | 104 | } |
| 107 | 105 | |
| 108 | 106 | public int getTimeoutMs() { |
| 109 | - return timeout_ms; | |
| 107 | + return timeoutMs; | |
| 110 | 108 | } |
| 111 | 109 | |
| 112 | 110 | public void setTimeoutMs(int timeout_ms) { |
| 113 | - this.timeout_ms = timeout_ms; | |
| 111 | + this.timeoutMs = timeout_ms; | |
| 114 | 112 | } |
| 115 | 113 | |
| 116 | 114 | public String getFfmpegCmdKey() { |
| 117 | - return ffmpeg_cmd_key; | |
| 115 | + return ffmpegCmdKey; | |
| 118 | 116 | } |
| 119 | 117 | |
| 120 | 118 | public void setFfmpegCmdKey(String ffmpeg_cmd_key) { |
| 121 | - this.ffmpeg_cmd_key = ffmpeg_cmd_key; | |
| 119 | + this.ffmpegCmdKey = ffmpeg_cmd_key; | |
| 122 | 120 | } |
| 123 | 121 | |
| 124 | 122 | public String getRtpType() { |
| 125 | - return rtp_type; | |
| 123 | + return rtpType; | |
| 126 | 124 | } |
| 127 | 125 | |
| 128 | 126 | public void setRtpType(String rtp_type) { |
| 129 | - this.rtp_type = rtp_type; | |
| 127 | + this.rtpType = rtp_type; | |
| 130 | 128 | } |
| 131 | 129 | |
| 132 | 130 | public boolean isEnable() { |
| ... | ... | @@ -138,44 +136,36 @@ public class StreamProxyItem extends GbStream { |
| 138 | 136 | } |
| 139 | 137 | |
| 140 | 138 | public boolean isEnableMp4() { |
| 141 | - return enable_mp4; | |
| 139 | + return enableMp4; | |
| 142 | 140 | } |
| 143 | 141 | |
| 144 | 142 | public void setEnableMp4(boolean enable_mp4) { |
| 145 | - this.enable_mp4 = enable_mp4; | |
| 146 | - } | |
| 147 | - | |
| 148 | - @Override | |
| 149 | - public String getCreateTime() { | |
| 150 | - return create_time; | |
| 151 | - } | |
| 152 | - | |
| 153 | - @Override | |
| 154 | - public void setCreateTime(String create_time) { | |
| 155 | - this.create_time = create_time; | |
| 143 | + this.enableMp4 = enable_mp4; | |
| 156 | 144 | } |
| 157 | 145 | |
| 158 | 146 | public boolean isEnableRemoveNoneReader() { |
| 159 | - return enable_remove_none_reader; | |
| 147 | + return enableRemoveNoneReader; | |
| 160 | 148 | } |
| 161 | 149 | |
| 162 | 150 | public void setEnableRemoveNoneReader(boolean enable_remove_none_reader) { |
| 163 | - this.enable_remove_none_reader = enable_remove_none_reader; | |
| 151 | + this.enableRemoveNoneReader = enable_remove_none_reader; | |
| 164 | 152 | } |
| 165 | 153 | |
| 166 | 154 | public boolean isEnableDisableNoneReader() { |
| 167 | - return enable_disable_none_reader; | |
| 155 | + return enableDisableNoneReader; | |
| 168 | 156 | } |
| 169 | 157 | |
| 170 | 158 | public void setEnableDisableNoneReader(boolean enable_disable_none_reader) { |
| 171 | - this.enable_disable_none_reader = enable_disable_none_reader; | |
| 159 | + this.enableDisableNoneReader = enable_disable_none_reader; | |
| 172 | 160 | } |
| 173 | 161 | |
| 174 | 162 | public boolean isEnableAudio() { |
| 175 | - return enable_audio; | |
| 163 | + return enableAudio; | |
| 176 | 164 | } |
| 177 | 165 | |
| 178 | 166 | public void setEnableAudio(boolean enable_audio) { |
| 179 | - this.enable_audio = enable_audio; | |
| 167 | + this.enableAudio = enable_audio; | |
| 180 | 168 | } |
| 169 | + | |
| 170 | + | |
| 181 | 171 | } | ... | ... |
src/main/java/com/genersoft/iot/vmp/storager/dao/StreamProxyMapper.java
| ... | ... | @@ -13,9 +13,9 @@ public interface StreamProxyMapper { |
| 13 | 13 | |
| 14 | 14 | @Insert("INSERT INTO wvp_stream_proxy (type, name, app, stream,media_server_id, url, src_url, dst_url, " + |
| 15 | 15 | "timeout_ms, ffmpeg_cmd_key, rtp_type, enable_audio, enable_mp4, enable, status, enable_remove_none_reader, enable_disable_none_reader, create_time) VALUES" + |
| 16 | - "(#{type}, #{name}, #{app}, #{stream}, #{mediaServerId}, #{url}, #{src_url}, #{dst_url}, " + | |
| 17 | - "#{timeout_ms}, #{ffmpeg_cmd_key}, #{rtp_type}, #{enable_audio}, #{enable_mp4}, #{enable}, #{status}, " + | |
| 18 | - "#{enable_remove_none_reader}, #{enable_disable_none_reader}, #{createTime} )") | |
| 16 | + "(#{type}, #{name}, #{app}, #{stream}, #{mediaServerId}, #{url}, #{srcUrl}, #{dstUrl}, " + | |
| 17 | + "#{timeoutMs}, #{ffmpegCmdKey}, #{rtpType}, #{enableAudio}, #{enableMp4}, #{enable}, #{status}, " + | |
| 18 | + "#{enableRemoveNoneReader}, #{enableDisableNoneReader}, #{createTime} )") | |
| 19 | 19 | int add(StreamProxyItem streamProxyDto); |
| 20 | 20 | |
| 21 | 21 | @Update("UPDATE wvp_stream_proxy " + |
| ... | ... | @@ -25,17 +25,17 @@ public interface StreamProxyMapper { |
| 25 | 25 | "stream=#{stream}," + |
| 26 | 26 | "url=#{url}, " + |
| 27 | 27 | "media_server_id=#{mediaServerId}, " + |
| 28 | - "src_url=#{src_url}," + | |
| 29 | - "dst_url=#{dst_url}, " + | |
| 30 | - "timeout_ms=#{timeout_ms}, " + | |
| 31 | - "ffmpeg_cmd_key=#{ffmpeg_cmd_key}, " + | |
| 32 | - "rtp_type=#{rtp_type}, " + | |
| 33 | - "enable_audio=#{enable_audio}, " + | |
| 28 | + "src_url=#{srcUrl}," + | |
| 29 | + "dst_url=#{dstUrl}, " + | |
| 30 | + "timeout_ms=#{timeoutMs}, " + | |
| 31 | + "ffmpeg_cmd_key=#{ffmpegCmdKey}, " + | |
| 32 | + "rtp_type=#{rtpType}, " + | |
| 33 | + "enable_audio=#{enableAudio}, " + | |
| 34 | 34 | "enable=#{enable}, " + |
| 35 | 35 | "status=#{status}, " + |
| 36 | - "enable_remove_none_reader=#{enable_remove_none_reader}, " + | |
| 37 | - "enable_disable_none_reader=#{enable_disable_none_reader}, " + | |
| 38 | - "enable_mp4=#{enable_mp4} " + | |
| 36 | + "enable_remove_none_reader=#{enableRemoveNoneReader}, " + | |
| 37 | + "enable_disable_none_reader=#{enableDisableNoneReader}, " + | |
| 38 | + "enable_mp4=#{enableMp4} " + | |
| 39 | 39 | "WHERE app=#{app} AND stream=#{stream}") |
| 40 | 40 | int update(StreamProxyItem streamProxyDto); |
| 41 | 41 | ... | ... |
web_src/src/components/StreamProxyList.vue
| ... | ... | @@ -22,8 +22,8 @@ |
| 22 | 22 | {{scope.row.url}} |
| 23 | 23 | </el-tag> |
| 24 | 24 | <el-tag size="medium" v-if="scope.row.type != 'default'"> |
| 25 | - <i class="cpoy-btn el-icon-document-copy" title="点击拷贝" v-clipboard="scope.row.src_url" @success="$message({type:'success', message:'成功拷贝到粘贴板'})"></i> | |
| 26 | - {{scope.row.src_url}} | |
| 25 | + <i class="cpoy-btn el-icon-document-copy" title="点击拷贝" v-clipboard="scope.row.srcUrl" @success="$message({type:'success', message:'成功拷贝到粘贴板'})"></i> | |
| 26 | + {{scope.row.srcUrl}} | |
| 27 | 27 | </el-tag> |
| 28 | 28 | </div> |
| 29 | 29 | </template> |
| ... | ... | @@ -197,7 +197,7 @@ |
| 197 | 197 | this.$refs.onvifEdit.openDialog(res.data.data, (url)=>{ |
| 198 | 198 | if (url != null) { |
| 199 | 199 | this.$refs.onvifEdit.close(); |
| 200 | - this.$refs.streamProxyEdit.openDialog({type: "default", url: url, src_url: url}, this.initData()) | |
| 200 | + this.$refs.streamProxyEdit.openDialog({type: "default", url: url, srcUrl: url}, this.initData()) | |
| 201 | 201 | } |
| 202 | 202 | }) |
| 203 | 203 | }else { | ... | ... |
web_src/src/components/dialog/StreamProxyEdit.vue
| ... | ... | @@ -33,13 +33,13 @@ |
| 33 | 33 | <el-form-item label="拉流地址" prop="url" v-if="proxyParam.type=='default'"> |
| 34 | 34 | <el-input v-model="proxyParam.url" clearable></el-input> |
| 35 | 35 | </el-form-item> |
| 36 | - <el-form-item label="拉流地址" prop="src_url" v-if="proxyParam.type=='ffmpeg'"> | |
| 37 | - <el-input v-model="proxyParam.src_url" clearable></el-input> | |
| 36 | + <el-form-item label="拉流地址" prop="srcUrl" v-if="proxyParam.type=='ffmpeg'"> | |
| 37 | + <el-input v-model="proxyParam.srcUrl" clearable></el-input> | |
| 38 | 38 | </el-form-item> |
| 39 | - <el-form-item label="超时时间:毫秒" prop="timeout_ms" v-if="proxyParam.type=='ffmpeg'"> | |
| 40 | - <el-input v-model="proxyParam.timeout_ms" clearable></el-input> | |
| 39 | + <el-form-item label="超时时间:毫秒" prop="timeoutMs" v-if="proxyParam.type=='ffmpeg'"> | |
| 40 | + <el-input v-model="proxyParam.timeoutMs" clearable></el-input> | |
| 41 | 41 | </el-form-item> |
| 42 | - <el-form-item label="节点选择" prop="rtp_type"> | |
| 42 | + <el-form-item label="节点选择" prop="rtpType"> | |
| 43 | 43 | <el-select |
| 44 | 44 | v-model="proxyParam.mediaServerId" |
| 45 | 45 | @change="mediaServerIdChange" |
| ... | ... | @@ -54,10 +54,9 @@ |
| 54 | 54 | </el-option> |
| 55 | 55 | </el-select> |
| 56 | 56 | </el-form-item> |
| 57 | - <el-form-item label="FFmpeg命令模板" prop="ffmpeg_cmd_key" v-if="proxyParam.type=='ffmpeg'"> | |
| 58 | -<!-- <el-input v-model="proxyParam.ffmpeg_cmd_key" clearable></el-input>--> | |
| 57 | + <el-form-item label="FFmpeg命令模板" prop="ffmpegCmdKey" v-if="proxyParam.type=='ffmpeg'"> | |
| 59 | 58 | <el-select |
| 60 | - v-model="proxyParam.ffmpeg_cmd_key" | |
| 59 | + v-model="proxyParam.ffmpegCmdKey" | |
| 61 | 60 | style="width: 100%" |
| 62 | 61 | placeholder="请选择FFmpeg命令模板" |
| 63 | 62 | > |
| ... | ... | @@ -72,9 +71,9 @@ |
| 72 | 71 | <el-form-item label="国标编码" prop="gbId"> |
| 73 | 72 | <el-input v-model="proxyParam.gbId" placeholder="设置国标编码可推送到国标" clearable></el-input> |
| 74 | 73 | </el-form-item> |
| 75 | - <el-form-item label="拉流方式" prop="rtp_type" v-if="proxyParam.type=='default'"> | |
| 74 | + <el-form-item label="拉流方式" prop="rtpType" v-if="proxyParam.type=='default'"> | |
| 76 | 75 | <el-select |
| 77 | - v-model="proxyParam.rtp_type" | |
| 76 | + v-model="proxyParam.rtpType" | |
| 78 | 77 | style="width: 100%" |
| 79 | 78 | placeholder="请选择拉流方式" |
| 80 | 79 | > |
| ... | ... | @@ -83,10 +82,10 @@ |
| 83 | 82 | <el-option label="组播" value="2"></el-option> |
| 84 | 83 | </el-select> |
| 85 | 84 | </el-form-item> |
| 86 | - <el-form-item label="无人观看" prop="rtp_type" > | |
| 85 | + <el-form-item label="无人观看" prop="rtpType" > | |
| 87 | 86 | <el-select |
| 88 | 87 | @change="noneReaderHandler" |
| 89 | - v-model="proxyParam.none_reader" | |
| 88 | + v-model="proxyParam.noneReader" | |
| 90 | 89 | style="width: 100%" |
| 91 | 90 | placeholder="请选择无人观看的处理方式" |
| 92 | 91 | > |
| ... | ... | @@ -98,8 +97,8 @@ |
| 98 | 97 | <el-form-item label="其他选项"> |
| 99 | 98 | <div style="float: left;"> |
| 100 | 99 | <el-checkbox label="启用" v-model="proxyParam.enable" ></el-checkbox> |
| 101 | - <el-checkbox label="开启音频" v-model="proxyParam.enable_audio" ></el-checkbox> | |
| 102 | - <el-checkbox label="录制" v-model="proxyParam.enable_mp4" ></el-checkbox> | |
| 100 | + <el-checkbox label="开启音频" v-model="proxyParam.enableAudio" ></el-checkbox> | |
| 101 | + <el-checkbox label="录制" v-model="proxyParam.enableMp4" ></el-checkbox> | |
| 103 | 102 | </div> |
| 104 | 103 | |
| 105 | 104 | </el-form-item> |
| ... | ... | @@ -155,17 +154,17 @@ export default { |
| 155 | 154 | app: null, |
| 156 | 155 | stream: null, |
| 157 | 156 | url: "", |
| 158 | - src_url: null, | |
| 159 | - timeout_ms: null, | |
| 160 | - ffmpeg_cmd_key: null, | |
| 157 | + srcUrl: null, | |
| 158 | + timeoutMs: null, | |
| 159 | + ffmpegCmdKey: null, | |
| 161 | 160 | gbId: null, |
| 162 | - rtp_type: null, | |
| 161 | + rtpType: null, | |
| 163 | 162 | enable: true, |
| 164 | - enable_audio: true, | |
| 165 | - enable_mp4: false, | |
| 166 | - none_reader: null, | |
| 167 | - enable_remove_none_reader: false, | |
| 168 | - enable_disable_none_reader: false, | |
| 163 | + enableAudio: true, | |
| 164 | + enableMp4: false, | |
| 165 | + noneReader: null, | |
| 166 | + enableRemoveNoneReader: false, | |
| 167 | + enableDisableNoneReader: false, | |
| 169 | 168 | platformGbId: null, |
| 170 | 169 | mediaServerId: null, |
| 171 | 170 | }, |
| ... | ... | @@ -177,9 +176,9 @@ export default { |
| 177 | 176 | app: [{ required: true, message: "请输入应用名", trigger: "blur" }], |
| 178 | 177 | stream: [{ required: true, message: "请输入流ID", trigger: "blur" }], |
| 179 | 178 | url: [{ required: true, message: "请输入要代理的流", trigger: "blur" }], |
| 180 | - src_url: [{ required: true, message: "请输入要代理的流", trigger: "blur" }], | |
| 181 | - timeout_ms: [{ required: true, message: "请输入FFmpeg推流成功超时时间", trigger: "blur" }], | |
| 182 | - ffmpeg_cmd_key: [{ required: false, message: "请输入FFmpeg命令参数模板(可选)", trigger: "blur" }], | |
| 179 | + srcUrl: [{ required: true, message: "请输入要代理的流", trigger: "blur" }], | |
| 180 | + timeoutMs: [{ required: true, message: "请输入FFmpeg推流成功超时时间", trigger: "blur" }], | |
| 181 | + ffmpegCmdKey: [{ required: false, message: "请输入FFmpeg命令参数模板(可选)", trigger: "blur" }], | |
| 183 | 182 | }, |
| 184 | 183 | }; |
| 185 | 184 | }, |
| ... | ... | @@ -189,7 +188,7 @@ export default { |
| 189 | 188 | this.listChangeCallback = callback; |
| 190 | 189 | if (proxyParam != null) { |
| 191 | 190 | this.proxyParam = proxyParam; |
| 192 | - this.proxyParam.none_reader = null; | |
| 191 | + this.proxyParam.noneReader = null; | |
| 193 | 192 | } |
| 194 | 193 | |
| 195 | 194 | let that = this; |
| ... | ... | @@ -218,7 +217,7 @@ export default { |
| 218 | 217 | } |
| 219 | 218 | }).then(function (res) { |
| 220 | 219 | that.ffmpegCmdList = res.data.data; |
| 221 | - that.proxyParam.ffmpeg_cmd_key = Object.keys(res.data.data)[0]; | |
| 220 | + that.proxyParam.ffmpegCmdKey = Object.keys(res.data.data)[0]; | |
| 222 | 221 | }).catch(function (error) { |
| 223 | 222 | console.log(error); |
| 224 | 223 | }); |
| ... | ... | @@ -275,15 +274,15 @@ export default { |
| 275 | 274 | } |
| 276 | 275 | }, |
| 277 | 276 | noneReaderHandler: function() { |
| 278 | - if (this.proxyParam.none_reader === null || this.proxyParam.none_reader === "0") { | |
| 279 | - this.proxyParam.enable_disable_none_reader = false; | |
| 280 | - this.proxyParam.enable_remove_none_reader = false; | |
| 281 | - }else if (this.proxyParam.none_reader === "1"){ | |
| 282 | - this.proxyParam.enable_disable_none_reader = true; | |
| 283 | - this.proxyParam.enable_remove_none_reader = false; | |
| 284 | - }else if (this.proxyParam.none_reader ==="2"){ | |
| 285 | - this.proxyParam.enable_disable_none_reader = false; | |
| 286 | - this.proxyParam.enable_remove_none_reader = true; | |
| 277 | + if (this.proxyParam.noneReader === null || this.proxyParam.noneReader === "0") { | |
| 278 | + this.proxyParam.enableDisableNoneReader = false; | |
| 279 | + this.proxyParam.enableRemoveNoneReader = false; | |
| 280 | + }else if (this.proxyParam.noneReader === "1"){ | |
| 281 | + this.proxyParam.enableDisableNoneReader = true; | |
| 282 | + this.proxyParam.enableRemoveNoneReader = false; | |
| 283 | + }else if (this.proxyParam.noneReader ==="2"){ | |
| 284 | + this.proxyParam.enableDisableNoneReader = false; | |
| 285 | + this.proxyParam.enableRemoveNoneReader = true; | |
| 287 | 286 | } |
| 288 | 287 | }, |
| 289 | 288 | }, | ... | ... |