Browse Source

增加不同路径的解耦

kwl 3 weeks ago
parent
commit
a6ab0472d8

+ 3 - 2
src/main/java/com/jttserver/Server.java

@@ -8,6 +8,7 @@ import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 
 import com.jttserver.config.ConfigManager;
+import com.jttserver.relay.StreamRelayType;
 import com.jttserver.service.ManagerWebServer;
 import com.jttserver.service.publisher.PublishServer;
 import com.jttserver.service.publisher.WebsockServer;
@@ -51,8 +52,8 @@ public class Server {
             wsServer.start();
             ManagerWebServer webServer = new ManagerWebServer();
 
-            RecvSever readTimeServer = new JttVideoRecvServer(wsServer, realtimePort, "/realtime/");
-            RecvSever playbackServer = new JttVideoRecvServer(wsServer, playbackPort, "/playback/");
+            RecvSever readTimeServer = new JttVideoRecvServer(wsServer, realtimePort, "/realtime/", StreamRelayType.FLV_REALTIME);
+            RecvSever playbackServer = new JttVideoRecvServer(wsServer, playbackPort, "/playback/", StreamRelayType.FLV_PLAYBACK);
 
             // 当程序正常退出时自动调用stop()方法来关闭服务器。
             Runtime.getRuntime().addShutdownHook(new Thread(() -> {

+ 21 - 0
src/main/java/com/jttserver/relay/StreamRelayType.java

@@ -0,0 +1,21 @@
+package com.jttserver.relay;
+
+import com.jttserver.service.publisher.PublishServer;
+import com.jttserver.service.receiver.RecvSever;
+
+public enum StreamRelayType {
+    FLV_REALTIME {
+        @Override
+        public StreamRelay create(PublishServer ps, RecvSever owner, String prefix) {
+            return new FlvRealtimeStreamRelay(ps, owner,  prefix);
+        }
+    },
+    FLV_PLAYBACK {
+        @Override
+        public StreamRelay create(PublishServer ps, RecvSever owner, String prefix) {
+            return new FlvRealtimeStreamRelay(ps, owner,  prefix);
+        }
+    };
+
+    public abstract StreamRelay create(PublishServer ps, RecvSever owner, String prefix);
+}

+ 3 - 5
src/main/java/com/jttserver/service/receiver/JttVideoRecvServer.java

@@ -16,6 +16,7 @@ import com.jttserver.protocol.Jtt1078PacketParams;
 import com.jttserver.protocol.Jtt1078PacketParser;
 import com.jttserver.relay.FlvRealtimeStreamRelay;
 import com.jttserver.relay.StreamRelay;
+import com.jttserver.relay.StreamRelayType;
 import com.jttserver.relay.workerthreads.BroadcastWorker;
 import com.jttserver.relay.workerthreads.VideoPublishWorker;
 import com.jttserver.service.publisher.PublishServer;
@@ -52,12 +53,9 @@ public class JttVideoRecvServer extends RecvSever {
     // 存储每个连接的Channel
     private static final Map<String, Channel> channelIdToCtxMap = new ConcurrentHashMap<>();
 
-    // 流转发器
-    private StreamRelay streamRelay;
 
-    public JttVideoRecvServer(PublishServer publishServer, int port, String prefix) {
-        super(publishServer, port, prefix);
-        this.streamRelay = new FlvRealtimeStreamRelay(publishServer, this, prefix);
+    public JttVideoRecvServer(PublishServer publishServer, int port, String prefix, StreamRelayType relayType) {
+        super(publishServer, port, prefix, relayType);
     }
 
     /**

+ 7 - 1
src/main/java/com/jttserver/service/receiver/RecvSever.java

@@ -1,5 +1,7 @@
 package com.jttserver.service.receiver;
 
+import com.jttserver.relay.StreamRelay;
+import com.jttserver.relay.StreamRelayType;
 import com.jttserver.service.publisher.PublishServer;
 
 /* 
@@ -10,6 +12,9 @@ public abstract class RecvSever {
     // 流发布服务器
     protected PublishServer publishServer;
 
+    // 流转发器
+    protected StreamRelay streamRelay;
+
     // 接收服务器监听端口,-1表示未配置
     protected int port = -1;
 
@@ -26,10 +31,11 @@ public abstract class RecvSever {
     /**
      * 构造函数
      */
-    public RecvSever(PublishServer publishServer, int port, String prefix) {
+    public RecvSever(PublishServer publishServer, int port, String prefix, StreamRelayType relayType) {
         this.publishServer = publishServer;
         this.port = port;
         this.prefix = prefix;
+        this.streamRelay = relayType.create(publishServer, this, prefix);
     }
 
     /*