Est-il possible de générer une vignette à partir d'une url vidéo dans android

je travaille sur une application vidéo. Je diffuse une vidéo à partir du lien du serveur , est-il possible pour moi de générer une vignette vidéo à partir de l'URL sans télécharger la vidéo.

21
demandé sur KishuDroid 2014-04-09 10:50:24

7 réponses

sans télécharger de vidéo, vous pouvez générer miniature à partir du code ci-dessous:

public static Bitmap retriveVideoFrameFromVideo(String videoPath) throws Throwable
{
    Bitmap bitmap = null;
    MediaMetadataRetriever mediaMetadataRetriever = null;
    try
    {
        mediaMetadataRetriever = new MediaMetadataRetriever();
        if (Build.VERSION.SDK_INT >= 14)
            mediaMetadataRetriever.setDataSource(videoPath, new HashMap<String, String>());
        else
            mediaMetadataRetriever.setDataSource(videoPath);
   //   mediaMetadataRetriever.setDataSource(videoPath);
        bitmap = mediaMetadataRetriever.getFrameAtTime();
    } catch (Exception e) {
        e.printStackTrace();
        throw new Throwable("Exception in retriveVideoFrameFromVideo(String videoPath)" + e.getMessage());

    } finally {
        if (mediaMetadataRetriever != null) {
            mediaMetadataRetriever.release();
        }
    }
    return bitmap;
}

NOTE: la vidéo est stockée comme Intra et non Intra (images frames) getFrameAtTime retournera le non - Intra frame le plus proche comme Bitmap. Donc en gros, il ne téléchargera pas toute la vidéo.

67
répondu KishuDroid 2017-03-28 08:10:47

il n'est pas possible de créer une vignette à partir d'un lien fumant, vous devez l'afficher à partir du serveur. Mieux vaut télécharger une miniature le long de la vidéo. Utilisez le code ci-dessous pour générer la vignette

Bitmap ThumbnailUtils.createVideoThumbnail("picturePath", MediaStore.Video.Thumbnails.MINI_KIND);
10
répondu DKV 2017-03-28 08:06:32

Voici votre lien:

  1. Android: est-il possible d'Afficher des vignettes vidéo?
  2. http://developer.android.com/reference/android/media/ThumbnailUtils.html

à mon avis, Côté Serveur devrait créer miniature à partir d'une vidéo et transférer des images miniatures vidéo à travers votre service.

5
répondu koyot3 2017-05-23 12:03:02

j'ai essayé avec glide et il a fonctionné , Glide version 4.3.1

    GlideApp.with(context)
                .asBitmap()
                .load(FILE_URL)
                .diskCacheStrategy(DiskCacheStrategy.DATA)
                .into(iv_picture);

Edit : Glide travaillait lentement pour moi

la meilleure réponse n'était pas de donner le résultat pour certaines vidéos , voici comment je l'ai fait

MediaMetadataRetriever retriever = new MediaMetadataRetriever();
 //give YourVideoUrl below
retriever.setDataSource("YourVideoUrl", new HashMap<String, String>());
// this gets frame at 2nd second
Bitmap image = retriever.getFrameAtTime(2000000, MediaMetadataRetriever.OPTION_CLOSEST_SYNC); 
//use this bitmap image
3
répondu Redman 2017-12-15 14:26:51

essayez celui-ci

Bitmap bitmap=ThumbnailUtils.createVideoThumbnail("VIDEO FILE ADDRESS",MediaStore.Video.Thumbnails.MINI_KIND);

1
répondu lost veteran 2017-12-29 11:51:35

cette méthode vous donnera des vignettes de tous les fichiers vidéo dans votre téléphone... n'hésitez pas à poser des questions

public static Bitmap[] getThumbnail(Context context){
        Uri uri=MediaStore.Video.Media.EXTERNAL_CONTENT_URI;
        String[] projection=new String[] { MediaStore.Video.Thumbnails._ID };
        Cursor ca = context.getContentResolver().query(uri, projection, null, null, null);
        Bitmap[] b=new Bitmap[ca.getCount()];
        int i=0;
        ca.moveToFirst();
        while(i<ca.getCount()) {
            int id = ca.getInt(ca.getColumnIndex(MediaStore.Video.Thumbnails._ID));
            b[i++]=MediaStore.Video.Thumbnails.getThumbnail(context.getContentResolver(),id, MediaStore.Images.Thumbnails.MINI_KIND, null );
            ca.moveToNext();
        }
        ca.close();
        return b;
    }
0
répondu lost veteran 2018-03-04 03:23:07

nous récupérons toutes les vidéos sur Android Phone. http://sunilkmrnishad.blogspot.in/2017/03/read-files-apps-photos-media-from.html

public class ThumbnailExtract extends AsyncTask<String, long[], Bitmap> {

    private final String videoUrl;
    private final ImageView mThumbnail;
    private final boolean mIsVideo;
    private MediaMetadataRetriever mmr;

    public ThumbnailExtract(String videoLocalUrl, ImageView thumbnail, boolean isVideo) {
        this.videoUrl = videoLocalUrl;
        mThumbnail = thumbnail;
        mIsVideo = isVideo;
        if (!isVideo) {
            mmr = new MediaMetadataRetriever();
        }
    }

    @Override
    protected Bitmap doInBackground(String... params) {
        if (!mIsVideo) {
            return getBitmap(videoUrl);
        } else {
            return ThumbnailUtils.createVideoThumbnail(videoUrl,
                    MediaStore.Images.Thumbnails.MINI_KIND);
        }
    }

    @Override
    protected void onPostExecute(Bitmap thumb) {
        if (thumb != null) {
            mThumbnail.setImageBitmap(thumb);
        }
    }

    private Bitmap getBitmap(String fileUrl) {
        mmr.setDataSource(fileUrl);
        byte[] data = mmr.getEmbeddedPicture();
        Bitmap bitmap = null;
        // convert the byte array to a bitmap
        if (data != null) {
            bitmap = BitmapFactory.decodeByteArray(data, 0, data.length);

        }
        return bitmap != null ? ScalingUtilities.createScaledBitmap(bitmap, 40, 40, ScalingUtilities.ScalingLogic.FIT) : bitmap;
    }
}
-1
répondu Sunil 2018-03-20 07:03:38