web-dev-qa-db-fra.com

Est-il possible de générer une vignette à partir d'une URL de la vidéo dans Android

Je travaille sur une application vidéo. Je suis en train de diffuser une vidéo à partir d'un lien de serveur, puis-je générer une vignette vidéo à partir de l'URL sans télécharger la vidéo.

24
DKV

Il n’est pas possible de créer une vignette à partir d’un lien à la vapeur, vous devez la montrer à partir du serveur. Mieux télécharger une vignette le long de la vidéo . Utilisez le code ci-dessous pour générer une vignette

Bitmap ThumbnailUtils.createVideoThumbnail("picturePath", MediaStore.Video.Thumbnails.MINI_KIND);
12
DKV

Sans télécharger la vidéo, vous pouvez générer une vignette à 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;
}

REMARQUE: La vidéo est enregistrée en tant qu'intra et non intra (images). GetFrameAtTime renverra l'image la plus proche, non Intra, sous forme de bitmap. Donc, fondamentalement, il ne téléchargera pas la vidéo entière.

69
KishuDroid

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, le côté serveur devrait créer une miniature à partir d'une vidéo et transférer des images vidéo miniatures via votre service. 

5
koyot3

J'ai essayé cela avec glide et cela a fonctionné, version Glide 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’a pas donné de 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
4
Manohar Reddy

essayez d'utiliser celui-ci 

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

1
lost veteran

Cette méthode vous donnera des vignettes de tous les fichiers vidéo de 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
lost veteran