Neutral Point Measurement

    ytdl-core-browser

    1.0.0 • Public • Published

    Browser Youtube Downloader

    This library is a tiny wrapper around the ytdl-core library to make it work in the browser.

    Other methods than .getInfo() are not tested. But we discourage using them in the browser.

    We don't care about bugs and issues, do what you want. This library is just a proof of concept.

    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/index.js with the path to the library's entry file.

    ...
    <body>
        ...
        <script src="/dist/index.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(...)
            }
        }
    })

    Install

    npm i ytdl-core-browser

    DownloadsWeekly Downloads

    10

    Version

    1.0.0

    License

    MIT

    Unpacked Size

    492 kB

    Total Files

    8

    Last publish

    Collaborators

    • edoulamenace