From ebe717f0e8ca71645897c6f6d41c41c95ac35e60 Mon Sep 17 00:00:00 2001 From: 0xboobface <0xboobface@gmail.com> Date: Thu, 16 Aug 2018 13:44:59 +0200 Subject: [PATCH] Made segment merger more robust --- .../java/ctbrec/recorder/SegmentMerger.java | 26 ++++++++++++++----- 1 file changed, 20 insertions(+), 6 deletions(-) diff --git a/src/main/java/ctbrec/recorder/SegmentMerger.java b/src/main/java/ctbrec/recorder/SegmentMerger.java index e296f074..7783276d 100644 --- a/src/main/java/ctbrec/recorder/SegmentMerger.java +++ b/src/main/java/ctbrec/recorder/SegmentMerger.java @@ -6,6 +6,9 @@ import java.io.FileOutputStream; import java.io.IOException; import java.util.List; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; + import com.iheartradio.m3u8.Encoding; import com.iheartradio.m3u8.Format; import com.iheartradio.m3u8.ParseException; @@ -17,6 +20,8 @@ import com.iheartradio.m3u8.data.TrackData; public class SegmentMerger { + private static final transient Logger LOG = LoggerFactory.getLogger(SegmentMerger.class); + private int lastPercentage; public void merge(File recDir, File targetFile) throws IOException, ParseException, PlaylistException { @@ -25,6 +30,11 @@ public class SegmentMerger { } File playlistFile = new File(recDir, "playlist.m3u8"); + if(!playlistFile.exists()) { + LOG.warn("Couldn't merge segments. Playlist {} does not exist", playlistFile); + return; + } + try (FileInputStream fin = new FileInputStream(playlistFile); FileOutputStream fos = new FileOutputStream(targetFile)) { PlaylistParser parser = new PlaylistParser(fin, Format.EXT_M3U, Encoding.UTF_8); Playlist playlist = parser.parse(); @@ -33,13 +43,17 @@ public class SegmentMerger { for (int i = 0; i < tracks.size(); i++) { TrackData trackData = tracks.get(i); File segment = new File(recDir, trackData.getUri()); - try (FileInputStream segmentStream = new FileInputStream(segment)) { - int length = -1; - byte[] b = new byte[1024 * 1024]; - while ((length = segmentStream.read(b)) >= 0) { - fos.write(b, 0, length); + if(segment.exists()) { + try (FileInputStream segmentStream = new FileInputStream(segment)) { + int length = -1; + byte[] b = new byte[1024 * 1024]; + while ((length = segmentStream.read(b)) >= 0) { + fos.write(b, 0, length); + } + lastPercentage = (int) (i * 100.0 / tracks.size()); + } catch(Exception e) { + LOG.error("Couldn't append segment {} to merged file {}", segment.getName(), targetFile.getName(), e); } - lastPercentage = (int) (i * 100.0 / tracks.size()); } } }