我正在尝试使用YoutubeDL下载Youtube视频(这不一定相关,该过程将运行并下载视频)。
当我设置扫描仪以尝试读取线程的输出并尝试显示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