/youtubedl-android

youtube-dl for android

Primary LanguageJavaGNU General Public License v3.0GPL-3.0

youtubedl-android

Android library wrapper for youtube-dl executable

Credits


Sample app

Download Example Streaming Example

Debug apk for testing can be downloaded from the releases page

Installation

Gradle

Step 1 : Add jitpack repository to your project build file

allprojects {
    repositories {
        maven { url 'https://jitpack.io' }
    }
}

Step 2: Add the dependency

dependencies {
    implementation 'com.github.yausername.youtubedl-android:library:0.9.+'
}

Optional FFmpeg dependency can also be added

dependencies {
    implementation 'com.github.yausername.youtubedl-android:library:0.9.+'
    implementation 'com.github.yausername.youtubedl-android:ffmpeg:0.9.+'
}

  • Set android:extractNativeLibs="true" in your app's manifest.
  • Use abiFilters 'x86', 'armeabi-v7a' in app/build.gradle, see sample app.
  • Use abi splits to reduce apk size, see sample app.
  • On android 10 set android:requestLegacyExternalStorage="true". I haven't tested with scoped storage, feel free to do so.

Usage

  • youtube-dl executable and python 3.8 are bundled in the library.
  • Initialize library, preferably in onCreate.
try {
    YoutubeDL.getInstance().init(getApplication());
} catch (YoutubeDLException e) {
    Log.e(TAG, "failed to initialize youtubedl-android", e);
}
  • Downloading / custom command (A detailed example can be found in the sample app)
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)");
});
  • Get stream info (equivalent to --dump-json of youtube-dl)
VideoInfo streamInfo = YoutubeDL.getInstance().getInfo("https://vimeo.com/22439234");
System.out.println(streamInfo.getTitle());
  • youtube-dl supports myriad different options which be seen here

  • youtube-dl binary can be updated from within the library

YoutubeDL.getInstance().updateYoutubeDL(getApplication());

FFmpeg

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

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

Docs

  • Though not required for just using this library, documentation on building python for android can be seen here. Same for ffmpeg here. Alternatively, you can use pre-built packages from here (android5+) or here (android7+).
  • youtubedl-android uses lazy extractors based build of youtube-dl (youtubedl-lazy)