Skip to content

mrgick/ytdl-core-info-browser

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

18 Commits
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

Disclamer

This is based on a fork. By July 02, 2024, it is working.

Browser Youtube Downloader

This library is a tiny wrapper around the ytdl-core library to make it work in the browser. Also add other stuff - such as ytpl and ytsr. We don't care about bugs and issues, do what you want. This library is just a proof of concept. free js static CDN

Have fun!

Explanations

In order to make ytdl-core work in the browser, we use two steps:

  1. We browserify the source code
  2. We use proxyquireify to mock miniget and m3u8stream to bypass CORS errors by YouTube.

Usage

Here is an example usage. You can replace /dist/ytdl.js with the path to the library's entry file.

...
<body>
    ...
    <script src="/dist/ytdl.js"></script>
    <script>
        const ytdl = window.require('ytdl-core-browser')({
            proxyUrl: 'https://cors-anywhere.herokuapp.com/',
            // proxyquireStubs: {}, arguments mapped directly to proxyquireify
            // For more info, see https://www.npmjs.com/package/proxyquireify
        });
        ytdl
            .getInfo('https://www.youtube.com/watch?v=WPdbEbwNTcU')
            .then(info=>console.log(info))
            .catch(err=>{throw err;});
    </script>
</body>

Customize

This is the source code of the library:

const proxyquire = require('proxyquireify')(require); 
const realMiniget = require('miniget');
const m3u8stream = require('m3u8stream');
// We import the library so it cached before using proxyquire
const ytdlCore = require('ytdl-core');

interface YtdlBrowserOptions {
    proxyUrl: string; // Ex: 'https://cors-anywhere.herokuapp.com/'
    proxyquireStubs?: any;
}

module.exports = (options: YtdlBrowserOptions) => {
    return proxyquire('ytdl-core', {
        miniget(url, opts){
            return realMiniget(options.proxyUrl + url, opts);
        },
        m3u8stream(url, opts){
            return m3u8stream(options.proxyUrl + url, opts);
        },
        ...(options.proxyquireStubs || {})
    });
};

You are very welcomed to hack the settings (especially with option proxyquireStubs). For instance, if you want to use a custom implementation of the miniget library:

const ytdl = window.require('ytdl-core-browser')({
    proxyUrl: ...
    proxyquireStubs: {
        miniget(url,options){
            // Your custom mock of miniget(...)
        },
        m3u8stream(url, options){
            // Your custom mock of m3u8stream(...)
        }
    }
})