Я пытаюсь загрузить видео с YouTube с помощью YoutubeDL (это не обязательно актуально, процесс запускается и загружает видео).
Настоящая проблема возникает, когда я настраиваю сканер, чтобы попытаться прочитать вывод из потока и попытаться отобразить ETA (который отображается в процессе youtube-dl).
@Override
public boolean recieveTransmission() throws IOException {
Process process = new ProcessBuilder("youtube-dl", "-f", "best", "--newline", "-o", getPath().toString(), this.url).inheritIO().start();
try ( Scanner scanner = new Scanner(process.getInputStream())) {
while (scanner.hasNextLine()) {
var str = scanner.nextLine();
System.out.println(str);
//Check that we're on the right line that contains the ETA and percent
if (str.contains("[download]") && str.contains("%") && str.contains("ETA")) {
//Set Progress & ETA
Pattern pattern = Pattern.compile("\\d+(\\.\\d{1,2})?%");
Matcher matcher = pattern.matcher(str);
this.progress = Double.parseDouble(matcher.group().replace("%", ""));
pattern = Pattern.compile("/d/d:/d/d");
matcher = pattern.matcher(str);
this.ETA = matcher.group();
System.out.println("F");
}
}
}
try {
process.waitFor();
System.out.println("Progress: " + this.progress + " ETA: " + this.ETA);
} catch (InterruptedException ex) {
Logger.getLogger(YoutubeUplink.class.getName()).log(Level.SEVERE, null, ex);
}
System.out.println(StellarDiskManager.getOutputFolder().toAbsolutePath().toString());
return true;
}
Вместо этого происходит то, что цикл while никогда не входил (из моих тестов в отладчике), указывая на то, что метод scanner.hasNextLine никогда не выполняется. Я не уверен, что с этим происходит.
Я сделал короткое видео, показывающее, что происходит. (https://youtu.be/qPKu-ykTo2A)
Просто для ясности, процесс youtube-dl
выводит строки, подобные этой, при загрузке с использованием --newline
: [download] 1.2% of 41.17MiB at 1.69MiB/s ETA 00:24