From dba4aa0a0299242d04ca37d1e44e91258e5342a4 Mon Sep 17 00:00:00 2001 From: 0xboobface <0xboobface@gmail.com> Date: Mon, 10 Sep 2018 17:52:11 +0200 Subject: [PATCH] Fix OutOfMemoryErrors 1. Catch exceptions thrown by ContinuityFixer and skip to the next packet. 2. Restrict the queue size to 10 segments. Otherwise, if the download is faster than the stream is written to hard disk, the queue builds up with segments until the heap exceeds its maximum size --- .../taktik/mpegts/sources/BlockingMultiMTSSource.java | 9 +++++++-- 1 file changed, 7 insertions(+), 2 deletions(-) diff --git a/src/main/java/org/taktik/mpegts/sources/BlockingMultiMTSSource.java b/src/main/java/org/taktik/mpegts/sources/BlockingMultiMTSSource.java index 69360a2b..d4ba9fe3 100644 --- a/src/main/java/org/taktik/mpegts/sources/BlockingMultiMTSSource.java +++ b/src/main/java/org/taktik/mpegts/sources/BlockingMultiMTSSource.java @@ -28,7 +28,7 @@ public class BlockingMultiMTSSource extends AbstractMTSSource implements AutoClo if (fixContinuity) { continuityFixer = new ContinuityFixer(); } - this.sources = new LinkedBlockingQueue<>(); + this.sources = new LinkedBlockingQueue<>(10); } public void addSource(MTSSource source) throws InterruptedException { @@ -45,7 +45,12 @@ public class BlockingMultiMTSSource extends AbstractMTSSource implements AutoClo packet = switchSourceIfNeeded(packet); if (fixContinuity) { - continuityFixer.fixContinuity(packet); + try { + continuityFixer.fixContinuity(packet); + } catch(Exception e) { + LOG.error("Failed to fix continuity. MTSPacket probably invalid", e); + return nextPacketInternal(); + } } return packet; }