Home

Awesome

youtubedl-android

Android library wrapper for yt-dlp (formerly youtube-dl) executable

Maven Central Version

Credits

<br/>

Sample app

Debug apk for testing can be downloaded from the releases page <br/> <br/> Download Example Streaming Example

If you wish to use config file in the download option by using this command --config-location you must create a file named config.txt inside youtubedl-android directory and add the commands for example.

--no-mtime

-o /sdcard/Download/youtubedl-android/%(title)s.%(ext)s

-f "bestvideo[ext=mp4]+bestaudio[ext=m4a]/best[ext=mp4]/best"
<br/>

Checkout dvd, a video downloader app based on this library.

Also take a look at Seal, another video/audio downloader app which demonstrates a more advanced and customized use of this library.

Installation

Gradle

repositories {
    mavenCentral()
}

dependencies {
    implementation("io.github.junkfood02.youtubedl-android:library:0.16.0")
    implementation("io.github.junkfood02.youtubedl-android:ffmpeg:0.16.0")
    implementation("io.github.junkfood02.youtubedl-android:aria2c:0.16.0") // optional
}

Usage

try {
    YoutubeDL.getInstance().init(this);
} catch (YoutubeDLException e) {
    Log.e(TAG, "failed to initialize youtubedl-android", e);
}
    File youtubeDLDir = new File(Environment.getExternalStoragePublicDirectory(Environment.DIRECTORY_DOWNLOADS), "youtubedl-android");
    YoutubeDLRequest request = new YoutubeDLRequest("https://vimeo.com/22439234");
    request.addOption("-o", youtubeDLDir.getAbsolutePath() + "/%(title)s.%(ext)s");
    YoutubeDL.getInstance().execute(request, (progress, etaInSeconds) -> {
    System.out.println(String.valueOf(progress) + "% (ETA " + String.valueOf(etaInSeconds) + " seconds)");
    });
    YoutubeDLRequest request = new YoutubeDLRequest("https://vimeo.com/22439234");
    final String processId = "MyProcessDownloadId";
    YoutubeDL.getInstance().execute(request, (progress, etaInSeconds) -> {
    System.out.println(String.valueOf(progress) + "% (ETA " + String.valueOf(etaInSeconds) + " seconds)");
    }, processId);
    ...
    YoutubeDL.getInstance().destroyProcessById(processId);
    VideoInfo streamInfo = YoutubeDL.getInstance().getInfo("https://vimeo.com/22439234");
    System.out.println(streamInfo.getTitle());
    YoutubeDLRequest request = new YoutubeDLRequest("https://youtu.be/Pv61yEcOqpw");
    request.addOption("-f", "best");
    VideoInfo streamInfo = YoutubeDL.getInstance().getInfo(request);
    System.out.println(streamInfo.getUrl());
    YoutubeDL.getInstance().updateYoutubeDL(this, updateChannel); // UpdateChannel.NIGHTLY or UpdateChannel.STABLE

FFmpeg

If you wish to use ffmpeg features of yt-dlp (e.g. --extract-audio), include and initialize the ffmpeg library.

try {
    YoutubeDL.getInstance().init(this);
    FFmpeg.getInstance().init(this);
} catch (YoutubeDLException e) {
    Log.e(TAG, "failed to initialize youtubedl-android", e);
}

Aria2c

This library can make use of aria2c as the external downloader. include and initialize the aria2c library.

try {
    YoutubeDL.getInstance().init(this);
    FFmpeg.getInstance().init(this);
    Aria2c.getInstance().init(this);
} catch (YoutubeDLException e) {
    Log.e(TAG, "failed to initialize youtubedl-android", e);
}

and options for the request as below:

request.addOption("--downloader", "libaria2c.so");
request.addOption("--external-downloader-args", "aria2c:\"--summary-interval=1\"");

Docs

Donate

You can support the project by donating to below addresses.

TypeAddress
<img src="https://en.bitcoin.it/w/images/en/2/29/BC_Logo_.png" alt="Bitcoin" width="50"/>bc1qw3g7grh6dxk69mzwjmewanj9gj2ycc5mju5dc4
<img src="https://www.getmonero.org/press-kit/symbols/monero-symbol-480.png" alt="Monero" width="50"/>49SQgJTxoifhRB1vZGzKwUXUUNPMsrsxEacZ8bRs5tqeFgxFUHyDFBiUYh3UBRLAq355tc2694gbX9LNT7Ho7Vch2XEP4n4