|
|
@@ -148,39 +148,6 @@ public class StreamProxyServiceImpl implements IStreamProxyService {
|
|
|
throw new ControllerException(ErrorCode.ERROR100.getCode(), "保存代理未找到在线的ZLM");
|
|
|
}
|
|
|
|
|
|
- String dstUrl;
|
|
|
- if ("ffmpeg".equalsIgnoreCase(streamProxy.getType())) {
|
|
|
-
|
|
|
- String ffmpegCmd = mediaServerService.getFfmpegCmd(mediaServer, streamProxy.getFfmpegCmdKey());
|
|
|
-
|
|
|
- if (ffmpegCmd == null) {
|
|
|
- throw new ControllerException(ErrorCode.ERROR100.getCode(), "ffmpeg拉流代理无法获取ffmpeg cmd");
|
|
|
- }
|
|
|
- String schema = getSchemaFromFFmpegCmd(ffmpegCmd);
|
|
|
- if (schema == null) {
|
|
|
- throw new ControllerException(ErrorCode.ERROR100.getCode(), "ffmpeg拉流代理无法从ffmpeg cmd中获取到输出格式");
|
|
|
- }
|
|
|
- int port;
|
|
|
- String schemaForUri;
|
|
|
- if (schema.equalsIgnoreCase("rtsp")) {
|
|
|
- port = mediaServer.getRtspPort();
|
|
|
- schemaForUri = schema;
|
|
|
- }else if (schema.equalsIgnoreCase("flv")) {
|
|
|
- port = mediaServer.getRtmpPort();
|
|
|
- schemaForUri = schema;
|
|
|
- }else {
|
|
|
- port = mediaServer.getRtmpPort();
|
|
|
- schemaForUri = schema;
|
|
|
- }
|
|
|
-
|
|
|
- dstUrl = String.format("%s://%s:%s/%s/%s", schemaForUri, "127.0.0.1", port, streamProxy.getApp(),
|
|
|
- streamProxy.getStream());
|
|
|
- }else {
|
|
|
- dstUrl = String.format("rtsp://%s:%s/%s/%s", "127.0.0.1", mediaServer.getRtspPort(), streamProxy.getApp(),
|
|
|
- streamProxy.getStream());
|
|
|
- }
|
|
|
- streamProxy.setDstUrl(dstUrl);
|
|
|
- log.info("[拉流代理] 输出地址为:{}", dstUrl);
|
|
|
streamProxy.setMediaServerId(mediaServer.getId());
|
|
|
boolean saveResult;
|
|
|
// 更新
|
|
|
@@ -195,53 +162,53 @@ public class StreamProxyServiceImpl implements IStreamProxyService {
|
|
|
}
|
|
|
|
|
|
if (streamProxy.isEnable()) {
|
|
|
- StreamInfo streamInfo = mediaServerService.startProxy(streamProxy);
|
|
|
+ StreamInfo streamInfo = mediaServerService.startProxy(mediaServer, streamProxy);
|
|
|
if (streamInfo != null) {
|
|
|
callback.run(ErrorCode.SUCCESS.getCode(), ErrorCode.SUCCESS.getMsg(), streamInfo);
|
|
|
}else {
|
|
|
callback.run(ErrorCode.ERROR100.getCode(), "记录已保存,启用失败", null);
|
|
|
}
|
|
|
|
|
|
-
|
|
|
-
|
|
|
- Hook hook = Hook.getInstance(HookType.on_media_arrival, streamProxy.getApp(), streamProxy.getStream(), mediaServer.getId());
|
|
|
- hookSubscribe.addSubscribe(hook, (hookData) -> {
|
|
|
- StreamInfo streamInfo = mediaServerService.getStreamInfoByAppAndStream(
|
|
|
- mediaServer, streamProxy.getApp(), streamProxy.getStream(), null, null);
|
|
|
- callback.run(ErrorCode.SUCCESS.getCode(), ErrorCode.SUCCESS.getMsg(), streamInfo);
|
|
|
- });
|
|
|
- String talkKey = UUID.randomUUID().toString();
|
|
|
- String delayTalkKey = UUID.randomUUID().toString();
|
|
|
- dynamicTask.startDelay(delayTalkKey, ()->{
|
|
|
- StreamInfo streamInfo = mediaServerService.getStreamInfoByAppAndStreamWithCheck(streamProxy.getApp(), streamProxy.getStream(), mediaServer.getId(), false);
|
|
|
- if (streamInfo != null) {
|
|
|
- callback.run(ErrorCode.SUCCESS.getCode(), ErrorCode.SUCCESS.getMsg(), streamInfo);
|
|
|
- }else {
|
|
|
- dynamicTask.stop(talkKey);
|
|
|
- callback.run(ErrorCode.ERROR100.getCode(), "超时", null);
|
|
|
- }
|
|
|
- }, 7000);
|
|
|
- WVPResult<String> result = addStreamProxyToZlm(streamProxy);
|
|
|
- if (result != null && result.getCode() == 0) {
|
|
|
- hookSubscribe.removeSubscribe(hook);
|
|
|
- dynamicTask.stop(talkKey);
|
|
|
- StreamInfo streamInfo = mediaServerService.getStreamInfoByAppAndStream(
|
|
|
- mediaServer, streamProxy.getApp(), streamProxy.getStream(), null, null);
|
|
|
- callback.run(ErrorCode.SUCCESS.getCode(), ErrorCode.SUCCESS.getMsg(), streamInfo);
|
|
|
- }else {
|
|
|
- streamProxy.setEnable(false);
|
|
|
- // 直接移除
|
|
|
- if (streamProxy.isEnableRemoveNoneReader()) {
|
|
|
- del(streamProxy.getApp(), streamProxy.getStream());
|
|
|
- }else {
|
|
|
- updateStreamProxy(streamProxy);
|
|
|
- }
|
|
|
- if (result == null){
|
|
|
- callback.run(ErrorCode.ERROR100.getCode(), "记录已保存,启用失败", null);
|
|
|
- }else {
|
|
|
- callback.run(ErrorCode.ERROR100.getCode(), result.getMsg(), null);
|
|
|
- }
|
|
|
- }
|
|
|
+//
|
|
|
+//
|
|
|
+// Hook hook = Hook.getInstance(HookType.on_media_arrival, streamProxy.getApp(), streamProxy.getStream(), mediaServer.getId());
|
|
|
+// hookSubscribe.addSubscribe(hook, (hookData) -> {
|
|
|
+// StreamInfo streamInfo = mediaServerService.getStreamInfoByAppAndStream(
|
|
|
+// mediaServer, streamProxy.getApp(), streamProxy.getStream(), null, null);
|
|
|
+// callback.run(ErrorCode.SUCCESS.getCode(), ErrorCode.SUCCESS.getMsg(), streamInfo);
|
|
|
+// });
|
|
|
+// String talkKey = UUID.randomUUID().toString();
|
|
|
+// String delayTalkKey = UUID.randomUUID().toString();
|
|
|
+// dynamicTask.startDelay(delayTalkKey, ()->{
|
|
|
+// StreamInfo streamInfo = mediaServerService.getStreamInfoByAppAndStreamWithCheck(streamProxy.getApp(), streamProxy.getStream(), mediaServer.getId(), false);
|
|
|
+// if (streamInfo != null) {
|
|
|
+// callback.run(ErrorCode.SUCCESS.getCode(), ErrorCode.SUCCESS.getMsg(), streamInfo);
|
|
|
+// }else {
|
|
|
+// dynamicTask.stop(talkKey);
|
|
|
+// callback.run(ErrorCode.ERROR100.getCode(), "超时", null);
|
|
|
+// }
|
|
|
+// }, 7000);
|
|
|
+// WVPResult<String> result = addStreamProxyToZlm(streamProxy);
|
|
|
+// if (result != null && result.getCode() == 0) {
|
|
|
+// hookSubscribe.removeSubscribe(hook);
|
|
|
+// dynamicTask.stop(talkKey);
|
|
|
+// StreamInfo streamInfo = mediaServerService.getStreamInfoByAppAndStream(
|
|
|
+// mediaServer, streamProxy.getApp(), streamProxy.getStream(), null, null);
|
|
|
+// callback.run(ErrorCode.SUCCESS.getCode(), ErrorCode.SUCCESS.getMsg(), streamInfo);
|
|
|
+// }else {
|
|
|
+// streamProxy.setEnable(false);
|
|
|
+// // 直接移除
|
|
|
+// if (streamProxy.isEnableRemoveNoneReader()) {
|
|
|
+// del(streamProxy.getApp(), streamProxy.getStream());
|
|
|
+// }else {
|
|
|
+// updateStreamProxy(streamProxy);
|
|
|
+// }
|
|
|
+// if (result == null){
|
|
|
+// callback.run(ErrorCode.ERROR100.getCode(), "记录已保存,启用失败", null);
|
|
|
+// }else {
|
|
|
+// callback.run(ErrorCode.ERROR100.getCode(), result.getMsg(), null);
|
|
|
+// }
|
|
|
+// }
|
|
|
}else{
|
|
|
StreamInfo streamInfo = mediaServerService.getStreamInfoByAppAndStream(
|
|
|
mediaServer, streamProxy.getApp(), streamProxy.getStream(), null, null);
|
|
|
@@ -249,24 +216,7 @@ public class StreamProxyServiceImpl implements IStreamProxyService {
|
|
|
}
|
|
|
}
|
|
|
|
|
|
- private String getSchemaFromFFmpegCmd(String ffmpegCmd) {
|
|
|
- ffmpegCmd = ffmpegCmd.replaceAll(" + ", " ");
|
|
|
- String[] paramArray = ffmpegCmd.split(" ");
|
|
|
- if (paramArray.length == 0) {
|
|
|
- return null;
|
|
|
- }
|
|
|
- for (int i = 0; i < paramArray.length; i++) {
|
|
|
- if (paramArray[i].equalsIgnoreCase("-f")) {
|
|
|
- if (i + 1 < paramArray.length - 1) {
|
|
|
- return paramArray[i+1];
|
|
|
- }else {
|
|
|
- return null;
|
|
|
- }
|
|
|
|
|
|
- }
|
|
|
- }
|
|
|
- return null;
|
|
|
- }
|
|
|
|
|
|
/**
|
|
|
* 新增代理流
|