如何在Android中显示YouTube视频的缩略图

时间:2011-09-06 18:58:38

标签: android youtube

我正在编写一个应用,我想要显示一系列YouTube视频。但我希望列表能够显示带有其他信息的视频标题,但也会显示视频的缩略图,就像我们去的时一样 www.youtube.com

有人可以帮助我吗?如何显示视频网址的缩略图?

7 个答案:

答案 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.jpg2.jpg3.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

中图:http://img.youtube.com/vi/-OKrloDzGpU/mqdefault.jpg

enter image description here

高清图像:http://img.youtube.com/vi/-OKrloDzGpU/hqdefault.jpg

enter image description here

使用Glide或Picasso在Android中加载图片:

// 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)

试试这个:

  1. 从网址解析视频ID:这是网址中的'v'参数。即http://www.youtube.com/watch?v=xAiiwSXVRiw

  2. 中的'xAiiwSXVRiw'
  3. 通过Youtube Gdata网址获取视频元数据:http://gdata.youtube.com/feeds/api/videos/xAiiwSXVRiw

  4. 解析您返回的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_KEYhere

中获取您的API密钥

youtubeID您需要使用视频的ID而不是完整的网址。

文档here

答案 5 :(得分:0)

以上所有答案都在进行不需要的字符串操作。您可以使用 Uri

轻松获取 if id

科特林

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";

enter image description here

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);

--------以上已经回答了------

如果您想从 480x360 缩略图(YouTube 中所有视频可用的最高质量图像)中删除黑条,但问题是它带有黑条


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
                    }
                });

enter image description here

最高质量缩略图(480x270),适用于所有视频,无黑条