undoing that
This commit is contained in:
		
							parent
							
								
									b8b9058840
								
							
						
					
					
						commit
						e0d1af6974
					
				
							
								
								
									
										81
									
								
								index.js
								
								
								
								
							
							
						
						
									
										81
									
								
								index.js
								
								
								
								
							| 
						 | 
					@ -133,15 +133,8 @@ app.ws('/download/:id/:quality', async (ws, req) => {
 | 
				
			||||||
    quality: req.params.quality,
 | 
					    quality: req.params.quality,
 | 
				
			||||||
    type: 'video'
 | 
					    type: 'video'
 | 
				
			||||||
  }
 | 
					  }
 | 
				
			||||||
  const videoFormat = chooseFormat(videoOptions, info['streaming_data'])
 | 
					  const videoFormat = info.chooseFormat(videoOptions)
 | 
				
			||||||
  if (!videoFormat) {
 | 
					  const videoStream = await info.download(videoOptions)
 | 
				
			||||||
    ws.send('No matching formats found... Please try again later.')
 | 
					 | 
				
			||||||
    return ws.close()
 | 
					 | 
				
			||||||
  }
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
  const videoStream = await info.download({
 | 
					 | 
				
			||||||
    itag: videoFormat.itag
 | 
					 | 
				
			||||||
  })
 | 
					 | 
				
			||||||
  const videoWriteStream = fs.createWriteStream(`./output/${req.params.id}_video.mp4`)
 | 
					  const videoWriteStream = fs.createWriteStream(`./output/${req.params.id}_video.mp4`)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
  let videoTotal = videoFormat.content_length;
 | 
					  let videoTotal = videoFormat.content_length;
 | 
				
			||||||
| 
						 | 
					@ -241,76 +234,6 @@ function mergeIt(audioPath, videoPath, outputPath) {
 | 
				
			||||||
  });
 | 
					  });
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
// stolen straight from youtubei.js
 | 
					 | 
				
			||||||
function chooseFormat(options, streaming_data) {
 | 
					 | 
				
			||||||
  if (!streaming_data) return null
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
  const formats = [
 | 
					 | 
				
			||||||
    ...(streaming_data.formats || []),
 | 
					 | 
				
			||||||
    ...(streaming_data.adaptive_formats || [])
 | 
					 | 
				
			||||||
  ];
 | 
					 | 
				
			||||||
  
 | 
					 | 
				
			||||||
  if (options.itag) {
 | 
					 | 
				
			||||||
    const candidates = formats.filter((format) => format.itag === options.itag);
 | 
					 | 
				
			||||||
    if (!candidates.length) return null
 | 
					 | 
				
			||||||
    return candidates[0];
 | 
					 | 
				
			||||||
  }
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
  const requires_audio = options.type ? options.type.includes('audio') : true;
 | 
					 | 
				
			||||||
  const requires_video = options.type ? options.type.includes('video') : true;
 | 
					 | 
				
			||||||
  const language = options.language || 'original';
 | 
					 | 
				
			||||||
  const quality = options.quality || 'best';
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
  let best_width = -1;
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
  const is_best = [ 'best', 'bestefficiency' ].includes(quality);
 | 
					 | 
				
			||||||
  const use_most_efficient = quality !== 'best';
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
  let candidates = formats.filter((format) => {
 | 
					 | 
				
			||||||
    if (requires_audio && !format.has_audio)
 | 
					 | 
				
			||||||
      return false;
 | 
					 | 
				
			||||||
    if (requires_video && !format.has_video)
 | 
					 | 
				
			||||||
      return false;
 | 
					 | 
				
			||||||
    if (options.codec && !format.mime_type.includes(options.codec))
 | 
					 | 
				
			||||||
      return false;
 | 
					 | 
				
			||||||
    if (options.format !== 'any' && !format.mime_type.includes(options.format || 'mp4'))
 | 
					 | 
				
			||||||
      return false;
 | 
					 | 
				
			||||||
    if (!is_best && format.quality_label !== quality)
 | 
					 | 
				
			||||||
      return false;
 | 
					 | 
				
			||||||
    if (format.width && (best_width < format.width))
 | 
					 | 
				
			||||||
      best_width = format.width;
 | 
					 | 
				
			||||||
    return true;
 | 
					 | 
				
			||||||
  });
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
  if (!candidates.length) return null
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
  if (is_best && requires_video)
 | 
					 | 
				
			||||||
    candidates = candidates.filter((format) => format.width === best_width);
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
  if (requires_audio && !requires_video) {
 | 
					 | 
				
			||||||
    const audio_only = candidates.filter((format) => {
 | 
					 | 
				
			||||||
      if (language !== 'original') {
 | 
					 | 
				
			||||||
        return !format.has_video && !format.has_text && format.language === language;
 | 
					 | 
				
			||||||
      }
 | 
					 | 
				
			||||||
      return !format.has_video && !format.has_text && format.is_original;
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
    });
 | 
					 | 
				
			||||||
    if (audio_only.length > 0) {
 | 
					 | 
				
			||||||
      candidates = audio_only;
 | 
					 | 
				
			||||||
    }
 | 
					 | 
				
			||||||
  }
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
  if (use_most_efficient) {
 | 
					 | 
				
			||||||
    // Sort by bitrate (lower is better)
 | 
					 | 
				
			||||||
    candidates.sort((a, b) => a.bitrate - b.bitrate);
 | 
					 | 
				
			||||||
  } else {
 | 
					 | 
				
			||||||
    // Sort by bitrate (higher is better)
 | 
					 | 
				
			||||||
    candidates.sort((a, b) => b.bitrate - a.bitrate);
 | 
					 | 
				
			||||||
  }
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
  return candidates.filter(v => v.content_length)[0];
 | 
					 | 
				
			||||||
}
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
async function switchIps() {
 | 
					async function switchIps() {
 | 
				
			||||||
  const currentIp = await (await fetch('http://localhost:8000/v1/publicip/ip', {
 | 
					  const currentIp = await (await fetch('http://localhost:8000/v1/publicip/ip', {
 | 
				
			||||||
    headers: {
 | 
					    headers: {
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
		Loading…
	
		Reference in New Issue