我正在编写一个应用,我想要显示一系列YouTube视频。但我希望列表能够显示带有其他信息的视频标题,但也会显示视频的缩略图,就像我们去的时一样 www.youtube.com
有人可以帮助我吗?如何显示视频网址的缩略图?
答案 0 :(得分:29)
结合两个接受的答案
How to make YouTube video thumbnails in android?
和
How to get video thumbnail of youtube video in android list in android?
最后,您只需使用 ID YOUTUBE网址。
我找到了一个PHP Answer for same question,他们描述的是:
每个YouTube视频都有4个生成的图片。它们的格式如下:
http://img.youtube.com/vi/<insert-youtube-video-id-here>/0.jpg
http://img.youtube.com/vi/<insert-youtube-video-id-here>/1.jpg
http://img.youtube.com/vi/<insert-youtube-video-id-here>/2.jpg
http://img.youtube.com/vi/<insert-youtube-video-id-here>/3.jpg
列表中的第一个是全尺寸图像,其他是缩略图图像。默认缩略图图像(即1.jpg
,2.jpg
,3.jpg
之一)是:
http://img.youtube.com/vi/<insert-youtube-video-id-here>/default.jpg
对于高质量版本的缩略图,请使用与此类似的网址:
http://img.youtube.com/vi/<insert-youtube-video-id-here>/hqdefault.jpg
还有一个中等质量版本的缩略图,使用类似于总部的网址:
http://img.youtube.com/vi/<insert-youtube-video-id-here>/mqdefault.jpg
对于缩略图的标准定义版本,请使用与此类似的网址:
http://img.youtube.com/vi/<insert-youtube-video-id-here>/sddefault.jpg
对于缩略图的最大分辨率版本,请使用与此类似的网址:
http://img.youtube.com/vi/<insert-youtube-video-id-here>/maxresdefault.jpg
以上所有网址都可通过https获取。只需在上述任意网址中将http
更改为https
即可。
此外,稍微短的主机名 i3.ytimg.com
可代替上方示例网址中的 img.youtube.com
。
我有一个网址https://www.youtube.com/watch?v=-OKrloDzGpU
现在我将从网址中获取 ID ,即: -OKrloDzGpU
// Picasso
Picasso.with(context)
.load("http://img.youtube.com/vi/-OKrloDzGpU/mqdefault.jpg")
.into(imageView);
// Glide
Glide.with(this)
.load("http://img.youtube.com/vi/-OKrloDzGpU/mqdefault.jpg")
.into(imageView);
谢谢。希望它会帮助你们所有人。
答案 1 :(得分:9)
试试这个:
从网址解析视频ID:这是网址中的'v'参数。即http://www.youtube.com/watch?v=xAiiwSXVRiw
通过Youtube Gdata网址获取视频元数据:http://gdata.youtube.com/feeds/api/videos/xAiiwSXVRiw
解析您返回的XML并查找<media:thumbnail url='..'>
。 'url'属性包含缩略图网址。
答案 2 :(得分:5)
如果您有Youtube视频的网址。使用下面的代码来获得中/高 质量缩略图网址
String url = "https://www.youtube.com/watch?v=tResEeK6P5I"
String videoId = url.split("v=")[1]; //you will get this video id "tResEeK6P5I"
String thumbnailMq = "http://img.youtube.com/vi/"+videoId+/mqdefault.jpg //medium quality thumbnail
String thumbnailHq = "http://img.youtube.com/vi/"+videoId+/hqdefault.jpg //high quality thumbnail
//your final urls will be like
http://img.youtube.com/vi/tResEeK6P5I/mqdefault.jpg
http://img.youtube.com/vi/tResEeK6P5I/hqdefault.jpg
答案 3 :(得分:1)
链接下载Glide jar文件 http://grepcode.com/snapshot/repo1.maven.org/maven2/com.github.bumptech.glide/glide/3.6.0
String url = "https://img.youtube.com/vi/"+videoURL.split("\\=")[1]+"/0.jpg";
Glide.with(this).load(url).into(imageView);
答案 4 :(得分:1)
这个问题已经很久了,但它仍然是Google搜索的最佳答案,所以我们就是如何使用Android YouTube API完成的。
YouTubeThumbnailView thumbnail = findViewById(R.id.thumbnail);
thumbnail.initialize(YOUTUBE_API_KEY, new YouTubeThumbnailView.OnInitializedListener() {
@Override
public void onInitializationSuccess(YouTubeThumbnailView youTubeThumbnailView,
YouTubeThumbnailLoader youTubeThumbnailLoader) {
youTubeThumbnailLoader.setVideo(youtubeID);
youTubeThumbnailLoader.setOnThumbnailLoadedListener(new YouTubeThumbnailLoader.OnThumbnailLoadedListener() {
@Override
public void onThumbnailLoaded(YouTubeThumbnailView youTubeThumbnailView, String s) {
//need to release the loader!!!
youTubeThumbnailLoader.release();
}
@Override
public void onThumbnailError(YouTubeThumbnailView youTubeThumbnailView,
YouTubeThumbnailLoader.ErrorReason errorReason) {
//need to release the loader!!!
youTubeThumbnailLoader.release();
}
});
}
@Override
public void onInitializationFailure(YouTubeThumbnailView youTubeThumbnailView,
YouTubeInitializationResult youTubeInitializationResult) {
//handle error here
}
});
YOUTUBE_API_KEY
在here
youtubeID
您需要使用视频的ID而不是完整的网址。
文档here。
答案 5 :(得分:0)
以上所有答案都在进行不需要的字符串操作。您可以使用 Uri
科特林
val videoId = Uri.parse("https://www.youtube.com/watch?v=dQw4w9WgXcQ").getQueryParameter("v")
val thumbnailUri = Uri.parse("https://img.youtube.com/vi/${videoId}/0.jpg")
Glide.with(this).load(thumbnailUri).into(imageView)
Java
String videoId = Uri.parse("https://www.youtube.com/watch?v=dQw4w9WgXcQ").getQueryParameter("v");
Uri thumbnailUri = Uri.parse("https://img.youtube.com/vi/${videoId}/0.jpg");
Glide.with(this).load(thumbnailUri).into(imageView);
答案 6 :(得分:0)
如果您想要高质量的缩略图但不适用于所有视频
Width | Height | URL
------|--------|----
640 | 480 | https://i.ytimg.com/vi/<VIDEO ID>/sd1.jpg
640 | 480 | https://i.ytimg.com/vi/<VIDEO ID>/sd2.jpg
640 | 480 | https://i.ytimg.com/vi/<VIDEO ID>/sd3.jpg
640 | 480 | https://i.ytimg.com/vi/<VIDEO ID>/sddefault.jpg
1280 | 720 | https://i.ytimg.com/vi/<VIDEO ID>/hq720.jpg
1920 | 1080 | https://i.ytimg.com/vi/<VIDEO ID>/maxresdefault.jpg
如果您希望缩略图适用于所有视频(质量相对较低)
Width | Height | URL
------|--------|----
120 | 90 | https://i.ytimg.com/vi/<VIDEO ID>/1.jpg
120 | 90 | https://i.ytimg.com/vi/<VIDEO ID>/2.jpg
120 | 90 | https://i.ytimg.com/vi/<VIDEO ID>/3.jpg
120 | 90 | https://i.ytimg.com/vi/<VIDEO ID>/default.jpg
320 | 180 | https://i.ytimg.com/vi/<VIDEO ID>/mq1.jpg
320 | 180 | https://i.ytimg.com/vi/<VIDEO ID>/mq2.jpg
320 | 180 | https://i.ytimg.com/vi/<VIDEO ID>/mq3.jpg
320 | 180 | https://i.ytimg.com/vi/<VIDEO ID>/mqdefault.jpg
480 | 360 | https://i.ytimg.com/vi/<VIDEO ID>/0.jpg
480 | 360 | https://i.ytimg.com/vi/<VIDEO ID>/hq1.jpg
480 | 360 | https://i.ytimg.com/vi/<VIDEO ID>/hq2.jpg
480 | 360 | https://i.ytimg.com/vi/<VIDEO ID>/hq3.jpg
480 | 360 | https://i.ytimg.com/vi/<VIDEO ID>/hqdefault.jpg
所有视频可用的最高质量缩略图为 480x360。
您可以使用链接:https://i.ytimg.com/vi/<VIDEO ID>/0.jpg
String videoId = IfXNjuoqt0Q;
String thumnailLink = "https://i.ytimg.com/vi/"+videoId+"/0.jpg";
https://i.ytimg.com/vi/IfXNjuoqt0Q/0.jpg
在 Android 中加载图片
// Picasso
Picasso.with(context)
.load("https://i.ytimg.com/vi/IfXNjuoqt0Q/0.jpg")
.into(imageView);
// Glide
Glide.with(this)
.load("https://i.ytimg.com/vi/IfXNjuoqt0Q/0.jpg")
.into(imageView);
--------以上已经回答了------
import android.app.Activity;
import android.graphics.Bitmap;
import android.graphics.BitmapFactory;
import android.util.Log;
import android.widget.ImageView;
import java.io.InputStream;
import java.net.HttpURLConnection;
import java.net.URL;
public class ThumbnailHandler {
public static Bitmap RemoveBlackBar(Bitmap bitmap){
if (bitmap.getWidth() == 480 && bitmap.getHeight() == 360 ){
int[] pixels = new int[bitmap.getWidth() * bitmap.getHeight()];
int[] pixels_out = new int[bitmap.getWidth() * bitmap.getHeight()];
// get pixel array from source
bitmap.getPixels(pixels, 0, bitmap.getWidth(), 0, 0, bitmap.getWidth(), bitmap.getHeight());
for (int y=0; y<270; y++){
for (int x=0; x < bitmap.getWidth() ; x++){
pixels_out [y * bitmap.getWidth() + x] = pixels [(y+45) * bitmap.getWidth() + x];
}
}
Bitmap bmOut = Bitmap.createBitmap(bitmap.getWidth(), 270, bitmap.getConfig());
bmOut.setPixels(pixels_out, 0, bitmap.getWidth(), 0, 0, bitmap.getWidth(), 270);
return bmOut;
}else {
return bitmap;
}
}
public static Bitmap getBitmapFromURL(String src) {
try {
URL url = new URL(src);
HttpURLConnection connection = (HttpURLConnection) url.openConnection();
connection.setDoInput(true);
connection.connect();
InputStream input = connection.getInputStream();
Bitmap myBitmap = BitmapFactory.decodeStream(input);
return myBitmap;
} catch (Exception e) {
Log.e("shabir", "err: "+e );
e.printStackTrace();
return null;
}
}
public static void getYtThumbnail_480_270(String url,YtThumbnailDownloadListener listener){
new Thread(new Runnable() {
@Override
public void run() {
Bitmap bitmap = getBitmapFromURL(url);
bitmap = RemoveBlackBar(bitmap);
listener.onThumbnailDownloaded(bitmap);
}
}).start();
}
public static void getYtThumbnail_480_270(String url, ImageView target, Activity activity){
new Thread(new Runnable() {
@Override
public void run() {
Bitmap bitmap = getBitmapFromURL(url);
Bitmap finalBitmap = RemoveBlackBar(bitmap);
activity.runOnUiThread(() -> {
target.setImageBitmap(finalBitmap);
});
}
}).start();
}
public interface YtThumbnailDownloadListener{
void onThumbnailDownloaded(Bitmap bitmap);
}
}
将上面的类复制到您的项目中
以上课程将 480x360 缩略图转换为 480x270 以去除黑条,
在 Android 中加载图片
// url
url = "https://i.ytimg.com/vi/IfXNjuoqt0Q/0.jpg";
// call to load thumbnail in Image view
ThumbnailHandler.getYtThumbnail_480_270(url,
imageView,
MainActivity.this);
// call to download thumbnail in bitmap format
ThumbnailHandler.getYtThumbnail_480_270(url, new ThumbnailHandler.YtThumbnailDownloadListener() {
@Override
public void onThumbnailDownloaded(Bitmap bitmap) {
// Use thumbnail bitmap
}
});
最高质量缩略图(480x270),适用于所有视频,无黑条