Не срабатывает try catch в Node.js c использованием библиотеки ytdl-core
Суть проблемы такая: Я пытаюсь скачивать отдельно аудио и видео дорожки на Ютуб при помощи вилки ytdl-core. Все знаем что Ютуб не работает в России, на своём компьютере я использую goodbye-DPI для обхода, но из-за этого ytdl-core не сразу понимает, что такое видео и аудио вообще есть. На выходе получается, что одна и та же программа одно и тоже видео скачивает с 3-5ой попытки. Я пытаюсь использовать конструкцию while try catch чтоб перезапускать попытку скачивания каждый раз при ошибке, но при этом try catch как будто не работает и программу всё также вручную приходиться заново запускать, пока не получится. Вот так выглядит мой код:
import fs from 'fs';
import { YtdlCore, toPipeableStream } from '@ybd-project/ytdl-core';
const ytdl = new YtdlCore({
});
// Айди видео с ютуб(После знака =)
let vidId = "";
//Функция попыток скачивания до победной
async function retry (maxAtt = 10) { //Перемення макс. попыток
let att = 0; //Переменная попыток
let scc = false; //Если получилось true
while(maxAtt > att && !scc) { //Цикл до удачной попытки
try {
console.log(`Попытка ${att}. . .`);
//Сами команды, которые должны скачивать видео и аудио, но делают это с 3-5ой попытки
await ytdl.download(`https://www.youtube.com/watch?v=${vidId}`, {quality: "highestaudio",}).then((stream) => toPipeableStream(stream).pipe(fs.createWriteStream(`${vidId}Audio.mp4a`)));
await ytdl.download(`https://www.youtube.com/watch?v=${vidId}`, {quality: "highest",}).then((stream) => toPipeableStream(stream).pipe(fs.createWriteStream(`${vidId}Video.mp4`)));
console.log("Успешно!");
scc = true;
} catch (error) {
att++;
console.error(`Попытка ${att} не удалась! ! !`);
if (att >= maxAtt) {
console.error(`Достигнуто максимальное кол-во попыток! ! !`);
throw error;
}
}
}
}
retry()
Ошибка: throw new Error(No such format found: ${QUALITY}
);
^
Error: No such format found: highest at FormatUtils.chooseFormat (C:\Users\Gleb\Desktop\ворк1.0.2\node_modules@ybd-project\ytdl-core\package\utils\Format.js:180:19) at C:\Users\Gleb\Desktop\ворк1.0.2\node_modules@ybd-project\ytdl-core\package\core\Download\Download.js:92:51 at process.processTicksAndRejections (node:internal/process/task_queues:105:5) UPD: Смог уменьшить кол-во ошибок изменив способ выбора аудио и видео, НО ОШИБКА ВСЁ ЕЩЁ ИНОГДА ВЫСКАКИВАЕТ.
Ответы (1 шт):
Не используйте пакет ybd-project/ytdl-core
, используйте distube/ytdl-core
.