我有YouTube链接“https://www.youtube.com/watch?v=ySuYTKkgIvg”
如何将此视频从YouTube存储到SD卡?
我可以通过Android YouTube DATA API使用YouTube播放器播放视频,但不知道如何下载 是否有任何API /代码可以帮助我做到这一点?
答案 0 :(得分:3)
Youtube API 可让您搜索&列出视频并获取媒体播放器网址,以便您可以在网页中播放视频。
<强> Look here for downloading video from Youtube 强>
Youtube Java Data API - Getting Started
它不允许您下载视频的字节内容 - 因为Google正在保护自己的权利和内容创作者的权利。
答案 1 :(得分:2)
我迟到了,但这个解决方案对我来说最好只是尝试一下。
方法1
添加到您的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
添加到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);
答案 2 :(得分:1)
您可以尝试使用我的库, youtube-dl-android ,它使您可以轻松地从1000多个站点(包括YouTube,Facebook等)中提取视频链接。< / p>
第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)");
});