瀏覽代碼

取消通道提前连接,取消I帧缓存

kwl 3 周之前
父節點
當前提交
4bb848978d

+ 4 - 4
src/main/java/com/jttserver/codec/FlvPacketizer.java

@@ -381,10 +381,10 @@ public class FlvPacketizer {
                 byte frameType = (naluType == NALU_TYPE_H264_IDR) ? (byte) 0x17 : (byte) 0x27;
                 byte[] payload = CommUtils.toLengthPrefixedPayloadFromAnnexB(naluData);
                 byte[] videoTag = createVideoTag(frameType, (byte) 0x01, 0, payload, timestamp);
-                // 缓存最近的I帧
-                if (naluType == NALU_TYPE_H264_IDR) {
-                    codecInfo.recentIFrame = videoTag;
-                }
+                // 缓存最近的I帧 (暂时不缓存)
+                // if (naluType == NALU_TYPE_H264_IDR) {
+                //     codecInfo.recentIFrame = videoTag;
+                // }
                 return videoTag;
             }
         } catch (Exception e) {

+ 7 - 5
src/main/java/com/jttserver/relay/FlvRealtimeStreamRelay.java

@@ -63,7 +63,9 @@ public class FlvRealtimeStreamRelay extends StreamRelay {
 
         // 还没有视频设备连接可直接返回true
         if (channelId == null || channelId.isEmpty())
-            return true;
+        {
+            return false;
+        }
 
         // 补发FLV头+视频序列头
         byte[] initVideoSegment = getChannelInitVideoSegment(channelId);
@@ -72,7 +74,7 @@ public class FlvRealtimeStreamRelay extends StreamRelay {
         byte[] initAudioSegment = getChannelInitAudioSegment(channelId);
 
         // 补发最近的I帧
-        byte[] recentIFrame = getChannelRecentIFrame(channelId);
+        //byte[] recentIFrame = getChannelRecentIFrame(channelId);
 
         // 在对应的Channel线程中发送,避免跨线程操作Channel引起的问题
         ch.eventLoop().execute(() -> {
@@ -85,9 +87,9 @@ public class FlvRealtimeStreamRelay extends StreamRelay {
                 ch.writeAndFlush(new BinaryWebSocketFrame(Unpooled.wrappedBuffer(initAudioSegment)));
             }
 
-            if (recentIFrame != null && recentIFrame.length > 0) {
-                ch.writeAndFlush(new BinaryWebSocketFrame(Unpooled.wrappedBuffer(recentIFrame)));
-            }
+            // if (recentIFrame != null && recentIFrame.length > 0) {
+            //     ch.writeAndFlush(new BinaryWebSocketFrame(Unpooled.wrappedBuffer(recentIFrame)));
+            // }
         });
 
         // 最后再注册通道连接

+ 2 - 1
src/main/java/com/jttserver/service/publisher/WebsockServer.java

@@ -73,8 +73,9 @@ public class WebsockServer extends PublishServer {
      */
     @Override
     public void start() throws InterruptedException {
+        int workerThreads = Math.max(16, Runtime.getRuntime().availableProcessors() * 2);
         bossGroup = new NioEventLoopGroup();
-        workerGroup = new NioEventLoopGroup();
+        workerGroup = new NioEventLoopGroup(workerThreads);
 
         ServerBootstrap bootstrap = new ServerBootstrap();