【问题标题】:How to download Youtube video in android SD card programmatically如何以编程方式在 Android SD 卡中下载 Youtube 视频
【发布时间】:2014-05-13 10:33:26
【问题描述】:

我有 YouTube 链接“https://www.youtube.com/watch?v=ySuYTKkgIvg

如何将此视频从 YouTube 存储到我的 SD 卡?

我可以通过 android YouTube DATA API 使用 YouTube 播放器播放视频,但不知道如何下载 有任何 API / 代码可以帮助我做到这一点吗?

【问题讨论】:

标签: android android-youtube-api


【解决方案1】:

Youtube API允许您搜索和列出视频并获取媒体播放器网址,以便您可以在您的网页中播放视频

Look here for downloading video from Youtube

Youtube Video Data API

Youtube Java Data API - Getting Started

它不允许您下载视频的字节内容 - 因为 Google 正在保护自己的权利和内容创建者的权利。

Youtube Google API Terms of Service

【讨论】:

  • 如果我有一个频道,想下载视频,它仍然不可用吗?
【解决方案2】:

我迟到了,但这个解决方案对我来说是最好的,试试这个。

方法一

添加到你的 gradle 文件中

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

和依赖关系

 compile 'com.github.Commit451.YouTubeExtractor:youtubeextractor:2.1.0'

添加这个小代码,你就完成了。 Demo HERE

public class MainActivity extends AppCompatActivity {

    private static final String YOUTUBE_ID = "ea4-5mrpGfE";

    private final YouTubeExtractor mExtractor = YouTubeExtractor.create();


    private Callback<YouTubeExtractionResult> mExtractionCallback = new Callback<YouTubeExtractionResult>() {
        @Override
        public void onResponse(Call<YouTubeExtractionResult> call, Response<YouTubeExtractionResult> response) {
            bindVideoResult(response.body());
        }

        @Override
        public void onFailure(Call<YouTubeExtractionResult> call, Throwable t) {
            onError(t);
        }
    };


    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);


//        For android youtube extractor library  com.github.Commit451.YouTubeExtractor:youtubeextractor:2.1.0'
        mExtractor.extract(YOUTUBE_ID).enqueue(mExtractionCallback);

    }


    private void onError(Throwable t) {
        t.printStackTrace();
        Toast.makeText(MainActivity.this, "It failed to extract. So sad", Toast.LENGTH_SHORT).show();
    }


    private void bindVideoResult(YouTubeExtractionResult result) {

//        Here you can get download url link
        Log.d("OnSuccess", "Got a result with the best url: " + result.getBestAvailableQualityVideoUri());

        Toast.makeText(this, "result : " + result.getSd360VideoUri(), Toast.LENGTH_SHORT).show();
    }
}

您可以在bindVideoResult()方法中获取下载链接。

方法 2

使用这个库android-youtubeExtractor

添加到 gradle 文件中

repositories {
    maven { url "https://jitpack.io" }
}

compile 'com.github.HaarigerHarald:android-youtubeExtractor:master-SNAPSHOT'

这里是获取下载地址的代码。

       String youtubeLink = "http://youtube.com/watch?v=xxxx";

    YouTubeUriExtractor ytEx = new YouTubeUriExtractor(this) {
        @Override
        public void onUrisAvailable(String videoId, String videoTitle, SparseArray<YtFile> ytFiles) {
            if (ytFiles != null) {
                int itag = 22;
// Here you can get download url
                String downloadUrl = ytFiles.get(itag).getUrl();
            }
        }
    };

    ytEx.execute(youtubeLink);

【讨论】:

  • 但是在第一种方法中,响应体总是返回 null
【解决方案3】:

您可以尝试使用我的图书馆youtube-dl-android,它可以让您轻松地从包括 YouTube、Facebook 等在内的 1000 多个网站中提取视频链接。

第 1 步:将 jitpack 存储库添加到您的项目构建文件中

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

第 2 步:添加依赖项

dependencies {
    implementation 'com.github.bawaviki.youtube-dl-android:library:0.7.+'
}

第 3 步:使用 Youtube-dl 实例

YoutubeDLRequest request = new YoutubeDLRequest("http://youtube.com/watch?v=xxxx");
request.setOption("-o", youtubeDLDir.getAbsolutePath() + "/%(title)s.%(ext)s");
YoutubeDL.getInstance().execute(request, (progress, etaInSeconds) -> {
    System.out.println(String.valueOf(progress) + "% (ETA " + String.valueOf(etaInSeconds) + " seconds)");
});

【讨论】:

    猜你喜欢
    • 2012-12-13
    • 2023-03-14
    • 1970-01-01
    • 2012-06-18
    • 2011-06-05
    • 2011-05-28
    • 2016-02-29
    • 1970-01-01
    • 2014-07-15
    相关资源
    最近更新 更多