This commit is contained in:
parent
26eb7b7ec5
commit
67ef015561
|
@ -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 }
|
Loading…
Reference in New Issue