Remove state from Remux post-processor

Post-processors have to be thread safe and can't have any state
This commit is contained in:
0xb00bface 2020-12-12 16:31:36 +01:00
parent 605269b4a0
commit cdaeaa746b
1 changed files with 8 additions and 8 deletions

View File

@ -22,8 +22,6 @@ public class Remux extends AbstractPostProcessor {
public static final String FFMPEG_ARGS = "ffmpeg.args"; public static final String FFMPEG_ARGS = "ffmpeg.args";
public static final String FILE_EXT = "file.ext"; public static final String FILE_EXT = "file.ext";
private transient File inputFile;
private transient File remuxedFile;
@Override @Override
public String getName() { public String getName() {
@ -32,12 +30,14 @@ public class Remux extends AbstractPostProcessor {
@Override @Override
public boolean postprocess(Recording rec, RecordingManager recordingManager, Config config) throws IOException, InterruptedException { public boolean postprocess(Recording rec, RecordingManager recordingManager, Config config) throws IOException, InterruptedException {
inputFile = rec.getPostProcessedFile(); final File inputFile;
if (inputFile.isDirectory()) { if (rec.getPostProcessedFile().isDirectory()) {
inputFile = new File(inputFile, "playlist.m3u8"); inputFile = new File(rec.getPostProcessedFile(), "playlist.m3u8");
} else {
inputFile = rec.getPostProcessedFile();
} }
String fileExt = getConfig().get(FILE_EXT); String fileExt = getConfig().get(FILE_EXT);
remuxedFile = new File(rec.getPostProcessedFile().getAbsolutePath() + '.' + fileExt); File remuxedFile = new File(rec.getPostProcessedFile().getAbsolutePath() + '.' + fileExt);
String[] cmdline = prepareCommandline(inputFile, remuxedFile); String[] cmdline = prepareCommandline(inputFile, remuxedFile);
File executionDir = rec.getPostProcessedFile().isDirectory() ? rec.getPostProcessedFile() : rec.getPostProcessedFile().getParentFile(); File executionDir = rec.getPostProcessedFile().isDirectory() ? rec.getPostProcessedFile() : rec.getPostProcessedFile().getParentFile();
LOG.info("Executing {} in working directory {}", Arrays.toString(cmdline), executionDir); LOG.info("Executing {} in working directory {}", Arrays.toString(cmdline), executionDir);
@ -46,14 +46,14 @@ public class Remux extends AbstractPostProcessor {
FFmpeg ffmpeg = new FFmpeg.Builder() FFmpeg ffmpeg = new FFmpeg.Builder()
.logOutput(config.getSettings().logFFmpegOutput) .logOutput(config.getSettings().logFFmpegOutput)
.logFile(ffmpegLog) .logFile(ffmpegLog)
.onExit(exitCode -> finalizeStep(exitCode, rec)) .onExit(exitCode -> finalizeStep(exitCode, rec, inputFile, remuxedFile))
.build(); .build();
ffmpeg.exec(cmdline, new String[0], executionDir); ffmpeg.exec(cmdline, new String[0], executionDir);
int exitCode = ffmpeg.waitFor(); int exitCode = ffmpeg.waitFor();
return exitCode != 1; return exitCode != 1;
} }
private void finalizeStep(int exitCode, Recording rec) { private void finalizeStep(int exitCode, Recording rec, File inputFile, File remuxedFile) {
if (exitCode != 1) { if (exitCode != 1) {
try { try {
rec.setPostProcessedFile(remuxedFile); rec.setPostProcessedFile(remuxedFile);