如何从视频文件中获取图像

时间:2013-10-15 06:54:15

标签: android image

你好我是韩国的开发者。我有一些问题,所以我进入这个网站。

    InputStream is;
    URL url = 
         new URL("http://112.216.25.58:8888/VOD_LAUNCHER/media/youtube_sample3.mp4");
    Uri uri = Uri.parse(url.toURI().toString());
    is = getContentResolver().openInputStream(uri);
    Bitmap bitmap = BitmapFactory.decodeStream(is);
    //Bitmap bitmap = BitmapFactory.decodeFile(url.toString());
    //MediaMetadataRetriever ret = new MediaMetadataRetriever();
    //ret.setDataSource(url.toString());
    //Bitmap bitmap = ret.getFrameAtTime(0);
    //mImageView.setImageURI(uri);

    //Bitmap bitmap = ThumbnailUtils.createVideoThumbnail(uri.toString(), Thumbnails.MICRO_KIND);
    mImageView.setImageBitmap(bitmap);

private Bitmap getPreview(URI uri) {
        File image = new File(uri);

    BitmapFactory.Options bounds = new BitmapFactory.Options();
    bounds.inJustDecodeBounds = true;
    BitmapFactory.decodeFile(image.getPath(), bounds);
    if ((bounds.outWidth == -1) || (bounds.outHeight == -1))
        return null;

    int originalSize = (bounds.outHeight > bounds.outWidth) ? bounds.outHeight
            : bounds.outWidth;

    BitmapFactory.Options opts = new BitmapFactory.Options();
    //opts.inSampleSize = originalSize / THUMBNAIL_SIZE;
    return BitmapFactory.decodeFile(image.getPath(), opts);     
}

private String getRealPathFromURI(Uri contentUri) {
    String[] proj = { MediaStore.Images.Media.DATA };
    CursorLoader loader = new CursorLoader(getApplicationContext(), 
                                              contentUri, proj, null, null, null);
    Cursor cursor = loader.loadInBackground();
    int column_index = cursor.getColumnIndexOrThrow(MediaStore.Images.Media.DATA);
    cursor.moveToFirst();
    return cursor.getString(column_index);
}

我尝试使用ThumbnailUtil等,但它不起作用。 如何在Android 4.0上获得ThumbnailImage? 谢谢你的回复。

4 个答案:

答案 0 :(得分:17)

从API级别8开始,您可以这样做:

String path = /*get video path*/;
Bitmap thumb = ThumbnailUtils.createVideoThumbnail(path,
                MediaStore.Images.Thumbnails.MINI_KIND);

美好而简单:)

答案 1 :(得分:2)

如果要提取视频的帧,则应使用this class。代码应该是这样的:

MediaMetadataRetriever media = new MediaMetadataRetriever();
media.setDataSource(path);
Bitmap extractedImage = media.getFrameAtTime(time, option);

希望它有用

答案 2 :(得分:1)

非常简单!您可以使用滑行库。

首先在videoView上添加imageView并使用以下代码:

>

 GlideApp.with(getApplicationContext()).load("empty")
    .thumbnail(GlideApp.with(getApplicationContext()).load("videoURL"))
    .into(imageView);

此代码将下载图像,并最终减少互联网使用量。

答案 3 :(得分:0)

尝试此操作以获取视频缩略图。

ImageView videoview;
 Bitmap thumb = ThumbnailUtils.createVideoThumbnail("YOUR VIDEO STRING PATH",   MediaStore.Images.Thumbnails.MINI_KIND);
 Matrix matrix = new Matrix();
 Bitmap bmThumbnail = Bitmap.createBitmap(thumb, 0, 0,
 thumb.getWidth(), thumb.getHeight(), matrix, true);
 videoview.setImageBitmap(bmThumbnail);

已编辑:使用此方法获取视频URI的字符串路径。

/**
     * Try to return the absolute file path of the Gallery video.
     * 
     * @param context
     * @param uri
     * @return the file path or null
     */
    public static String getVideoPathFromGallary(final Context context,Uri contentUri) {
        String[] proj = {  MediaStore.Video.Media.DATA, MediaStore.Video.Media.SIZE, MediaStore.Video.Media.DURATION};
        Cursor cursor = ((Activity) context).managedQuery(contentUri, proj, null, null, null);
        if (cursor == null)
            return null;
        cursor.moveToFirst();
        int column_index = cursor
                .getColumnIndexOrThrow(MediaStore.Video.Media.DATA);
        int fileSize = cursor.getInt(cursor.getColumnIndexOrThrow(MediaStore.Video.Media.SIZE));
        long duration = TimeUnit.MILLISECONDS.toSeconds(cursor.getInt(cursor.getColumnIndexOrThrow(MediaStore.Video.Media.DURATION)));
        System.out.println("size: " + fileSize);
        System.out.println("duration: " + duration);
        return cursor.getString(column_index);
    }