开发者

Get thumbnail image of video from video url

Is it possible to get the thumbnail image from a video Url? I need to 开发者_StackOverflow中文版thumbnails of videos in a list view.


Yes its possible to get the thumbnail of a video using ThumbnailUtils.

FileOutputStream out;
File land=new File(Environment.getExternalStorageDirectory().getAbsoluteFile()
                +"/portland.jpg");// image file use to create image u can give any path.
Bitmap bitmap=ThumbnailUtils.createVideoThumbnail(filePath, MediaStore.Video.Thumbnails.FULL_SCREEN_KIND);//filePath is your video file path.
        ByteArrayOutputStream stream = new ByteArrayOutputStream();
        bitmap.compress(Bitmap.CompressFormat.JPEG, 100, stream);
        byte[] byteArray = stream.toByteArray();

        out=new  FileOutputStream(land.getPath());
        out.write(byteArray);
        out.close();


If you are specifically asking about youtube videos then there are automatically 4 generated images by Youtube.

http://img.youtube.com/vi/video_url_here/0.jpg
http://img.youtube.com/vi/video_url_here/1.jpg
http://img.youtube.com/vi/video_url_here/2.jpg
http://img.youtube.com/vi/video_url_here/3.jpg

Standard Image sizes

Player Background Thumbnail (480x360 pixels) http://i1.ytimg.com/vi/G0wGs3useV8/0.jpg

Start Thumbnail (120x90 pixels) http://i1.ytimg.com/vi/G0wGs3useV8/1.jpg

Middle Thumbnail (120x90 pixels) http://i1.ytimg.com/vi/G0wGs3useV8/2.jpg

End Thumbnail (120x90 pixels) http://i1.ytimg.com/vi/G0wGs3useV8/3.jpg

High Quality Thumbnail (480x360 pixels) http://i1.ytimg.com/vi/G0wGs3useV8/hqdefault.jpg

Medium Quality Thumbnail (320x180 pixels) http://i1.ytimg.com/vi/G0wGs3useV8/mqdefault.jpg

Normal Quality Thumbnail (120x90 pixels) http://i1.ytimg.com/vi/G0wGs3useV8/default.jpg

Standard Definition Thumbnail (640x480 pixels) http://i1.ytimg.com/vi/G0wGs3useV8/sddefault.jpg

Maximum Resolution Thumbnail (1920x1080 pixels) http://i1.ytimg.com/vi/G0wGs3useV8/maxresdefault.jpg


It is working in my case

Uri videoUri = data.getData();
                String selectedPathVideo="";
                selectedPathVideo = ImageFilePath.getPath(getApplicationContext(), videoUri);
                Log.i("Image File Path", ""+selectedPathVideo);

                try {
                    Bitmap thumb = ThumbnailUtils.createVideoThumbnail(selectedPathVideo, MediaStore.Video.Thumbnails.MICRO_KIND);


                    imgFarmerVideo.setImageBitmap(thumb);

                } catch (Exception e) {
                    e.printStackTrace();
                }

The Support File

public class ImageFilePath {
    /**
     * Method for return file path of Gallery image
     *
     * @param context
     * @param uri
     * @return path of the selected image file from gallery
     */
    public static String getPath(final Context context, final Uri uri)
    {

        //check here to KITKAT or new version
        final boolean isKitKat = Build.VERSION.SDK_INT >= Build.VERSION_CODES.KITKAT;

        // DocumentProvider
        if (isKitKat && DocumentsContract.isDocumentUri(context, uri)) {

            // ExternalStorageProvider
            if (isExternalStorageDocument(uri)) {
                final String docId = DocumentsContract.getDocumentId(uri);
                final String[] split = docId.split(":");
                final String type = split[0];

                if ("primary".equalsIgnoreCase(type)) {
                    return Environment.getExternalStorageDirectory() + "/" + split[1];
                }
            }
            // DownloadsProvider
            else if (isDownloadsDocument(uri)) {

                final String id = DocumentsContract.getDocumentId(uri);
                final Uri contentUri = ContentUris.withAppendedId(
                        Uri.parse("content://downloads/public_downloads"), Long.valueOf(id));

                return getDataColumn(context, contentUri, null, null);
            }
            // MediaProvider
            else if (isMediaDocument(uri)) {
                final String docId = DocumentsContract.getDocumentId(uri);
                final String[] split = docId.split(":");
                final String type = split[0];

                Uri contentUri = null;
                if ("image".equals(type)) {
                    contentUri = MediaStore.Images.Media.EXTERNAL_CONTENT_URI;
                } else if ("video".equals(type)) {
                    contentUri = MediaStore.Video.Media.EXTERNAL_CONTENT_URI;
                } else if ("audio".equals(type)) {
                    contentUri = MediaStore.Audio.Media.EXTERNAL_CONTENT_URI;
                }

                final String selection = "_id=?";
                final String[] selectionArgs = new String[] {
                        split[1]
                };

                return getDataColumn(context, contentUri, selection, selectionArgs);
            }
        }
        // MediaStore (and general)
        else if ("content".equalsIgnoreCase(uri.getScheme())) {

            // Return the remote address
            if (isGooglePhotosUri(uri))
                return uri.getLastPathSegment();

            return getDataColumn(context, uri, null, null);
        }
        // File
        else if ("file".equalsIgnoreCase(uri.getScheme())) {
            return uri.getPath();
        }

        return null;
    }

    /**
     * Get the value of the data column for this Uri. This is useful for
     * MediaStore Uris, and other file-based ContentProviders.
     *
     * @param context The context.
     * @param uri The Uri to query.
     * @param selection (Optional) Filter used in the query.
     * @param selectionArgs (Optional) Selection arguments used in the query.
     * @return The value of the _data column, which is typically a file path.
     */
    public static String getDataColumn(Context context, Uri uri, String selection,
                                       String[] selectionArgs) {

        Cursor cursor = null;
        final String column = "_data";
        final String[] projection = {
                column
        };

        try {
            cursor = context.getContentResolver().query(uri, projection, selection, selectionArgs,
                    null);
            if (cursor != null && cursor.moveToFirst()) {
                final int index = cursor.getColumnIndexOrThrow(column);
                return cursor.getString(index);
            }
        } finally {
            if (cursor != null)
                cursor.close();
        }
        return null;
    }

    /**
     * @param uri The Uri to check.
     * @return Whether the Uri authority is ExternalStorageProvider.
     */
    public static boolean isExternalStorageDocument(Uri uri) {
        return "com.android.externalstorage.documents".equals(uri.getAuthority());
    }

    /**
     * @param uri The Uri to check.
     * @return Whether the Uri authority is DownloadsProvider.
     */
    public static boolean isDownloadsDocument(Uri uri) {
        return "com.android.providers.downloads.documents".equals(uri.getAuthority());
    }

    /**
     * @param uri The Uri to check.
     * @return Whether the Uri authority is MediaProvider.
     */
    public static boolean isMediaDocument(Uri uri) {
        return "com.android.providers.media.documents".equals(uri.getAuthority());
    }

    /**
     * @param uri The Uri to check.
     * @return Whether the Uri authority is Google Photos.
     */
    public static boolean isGooglePhotosUri(Uri uri) {
        return "com.google.android.apps.photos.content".equals(uri.getAuthority());
    }
}


Try ThumbnailUtils, to get video bitmap from file path

ThumbnailUtils.createVideoThumbnail(filePath,MediaStore.Video.Thumbnails.MINI_KIND);


It is possible to get thumbnail image of video from video url.

If your video type is Vimeo follow below steps:

1)Suppose your Video Url is: http://player.vimeo.com/video/17314292

2)Get Video Id From Url : eg. 17314292

3)Call WS with Video id and XMl format http://vimeo.com/api/v2/video/17314292.xml

You will get "thumbnail_small","thumbnail_medium","thumbnail_large" in xml format for video thumb from video id

If your video type is YouTube follow below steps:

1)Video Url : http://www.youtube.com/embed/Nl2iMF0yKW8

2)Get Video Id From Url : eg. Nl2iMF0yKW8

3)Replace video id in this url http://i3.ytimg.com/vi/Nl2iMF0yKW8/default.jpg

NOTE:Just replace your id here.


It's very important to identify the components of a problem. I'd actually say you have two separate problems:

  1. Downloading a file from an URL.

  2. Creating a thumbnail image from an incomplete video file.

Look into those two separately, you'll find plenty of information.


To get thumbnail from the URL, i only got one solution till now, You have to use This library

It Supports file, http, https, mms, mmsh and rtmp protocols

and

It Supports aac, acc+, avi, flac, mp2, mp3, mp4, ogg, 3gp and more! formats (audio and video):


It is possible to get a thumbnail from a video file or url using FFMPEG.

FFMPEG must be built using the NDK (or you can find some Android built FFMPEG binaries). Here is a GitHub project to build FFMPEG:

https://github.com/guardianproject/android-ffmpeg

You can then include the FFMPEG binaries with your app and execute FFMPEG from code in your app to generate an image from the video (local or URL) using a command like:

ffmpeg -i videosite.com/video.flv -ss 00:00:15.000 -vframes 1 thumbnail_out.png

One thing to consider is at what seek time (option -ss) you grab the thumbnail for it to be a meaningful image that represents the video.

0

上一篇:

下一篇:

精彩评论

暂无评论...
验证码 换一张
取 消

最新问答

问答排行榜