From 67ef015561ea6ba3e2105790c2541ee6110a0fb7 Mon Sep 17 00:00:00 2001 From: localhost Date: Wed, 3 Jul 2024 08:50:54 +0200 Subject: [PATCH] fixed https://github.com/preservetube/preservetube/issues/16 --- utils/ytdlp.js | 19 +++++++++++++++++++ 1 file changed, 19 insertions(+) diff --git a/utils/ytdlp.js b/utils/ytdlp.js index 041ea39..a8c6a56 100644 --- a/utils/ytdlp.js +++ b/utils/ytdlp.js @@ -13,6 +13,8 @@ async function downloadVideo(url, ws, id) { } if (video.basic_info.duration >= 900) quality = '360p' // 15 minutes + quality = await getVideoQuality(video, quality) + let isDownloading = true const downloader = new WebSocket(`ws://${process.env.METADATA.replace('http://', '')}/download/${id}/${quality}`) downloader.on('message', async function message(data) { @@ -38,4 +40,21 @@ async function downloadVideo(url, ws, id) { }) } +async function getVideoQuality(json, quality) { + const adaptiveFormats = json['streaming_data']['adaptive_formats']; + let video = adaptiveFormats.find(f => f.quality_label === quality && !f.has_audio); + + // If the specified quality isn't available, find the lowest quality video + if (!video) { + video = adaptiveFormats.filter(f => !f.has_audio).reduce((prev, current) => { + if (!prev || parseInt(current.quality_label) < parseInt(prev.quality_label)) { + return current; + } + return prev; + }, null); + } + + return video ? video.quality_label : null; +} + module.exports = { downloadVideo } \ No newline at end of file