web-dev-qa-db-fra.com

Comment créer une vignette vidéo à partir d'un chemin de fichier vidéo dans Android?

Je veux créer une miniature d'une vidéo à partir du chemin de la carte SD. Comment puis je faire ça?

16
Parth Bhayani

Vous pouvez utiliser la classe ThumbnailUtils pour obtenir la miniature vidéo du fichier vidéo.

createVideoThumbnail() est une méthode qui renvoie le bitmap (miniature) de la vidéo à partir du chemin du fichier vidéo.

Depuis Android Docs:

Bitmap public statique createVideoThumbnail (String filePath, int kind)

Créez une miniature de vidéo pour une vidéo. Peut retourner null si la vidéo est corrompue ou si le format n'est pas pris en charge.

Vous pouvez créer VideoThumbnail à partir du chemin de la carte SD comme ceci.

Bitmap thumb = ThumbnailUtils.createVideoThumbnail(filePath, Thumbnails.MINI_KIND);

En utilisant ThumbnailUtils, vous pouvez créer une miniature de deux types.

  1. MediaStore.Images.Thumbnails.MICRO_KIND le type générera une miniature de taille 96 x 96.

  2. MediaStore.Images.Thumbnails.MINI_KIND le type générera une miniature de taille 512 x 384.

J'espère que ça aide!

35
Rajesh

Veuillez vérifier mon code en espérant qu'il vous aidera

/**
     * Retrieve video frame image from given video path
     * 
     * @param p_videoPath
     *            the video file path
     * 
     * @return Bitmap - the bitmap is video frame image
     * 
     * @throws Throwable
     */
    @SuppressLint("NewApi")
    public static Bitmap retriveVideoFrameFromVideo(String p_videoPath)
            throws Throwable
    {
        Bitmap m_bitmap = null;
        MediaMetadataRetriever m_mediaMetadataRetriever = null;
        try
        {
            m_mediaMetadataRetriever = new MediaMetadataRetriever();
            m_mediaMetadataRetriever.setDataSource(p_videoPath);
            m_bitmap = m_mediaMetadataRetriever.getFrameAtTime();
        }
        catch (Exception m_e)
        {
            throw new Throwable(
                    "Exception in retriveVideoFrameFromVideo(String p_videoPath)"
                            + m_e.getMessage());
        }
        finally
        {
            if (m_mediaMetadataRetriever != null)
            {
                m_mediaMetadataRetriever.release();
            }
        }
        return m_bitmap;
    }

Modifiez la méthode ci-dessus selon vos besoins

3
Android Team

Si vous créez directement des miniatures comme suit

Bitmap thumb = ThumbnailUtils.createVideoThumbnail(path,
    MediaStore.Images.Thumbnails.MINI_KIND);

Ensuite, il y a un problème avec cette méthode si vous créez des miniatures pour un grand ensemble de vidéos (pour un grand nombre de vidéos). l'application se fige jusqu'à ce que toutes les miniatures soient chargées car tout le processus s'exécute dans le thread principal.


tiliser SuziLoader

Ce chargeur chargera les miniatures des vidéos qui sont stockées localement sur votre système de fichiers en arrière-plan.

String path = Environment.getExternalStorageDirectory().getAbsolutePath() + "/video.mp4";
ImageView mThumbnail = (ImageView) findViewById(R.id.thumbnail);

SuziLoader loader = new SuziLoader(); //Create it for once
loader.with(MainActivity.this) //Context
    .load(path) //Video path
    .into(mThumbnail) // imageview to load the thumbnail
    .type("mini") // mini or micro
    .show(); // to show the thumbnail

Pour obtenir cette dépendance, utilisez les étapes suivantes

Étape 1. Ajoutez le référentiel JitPack à votre fichier de build
Ajoutez-le dans votre build.gradle racine à la fin des référentiels:

allprojects {
    repositories {
        ...
        maven { url 'https://jitpack.io' }
    }
}

Étape 2. Ajoutez la dépendance

dependencies {
    compile 'com.github.sushinpv:SuziVideoThumbnailLoader:0.1.0'
}

AJOUTER LIRE STOCKAGE EXTERNE Autorisation dans le manifeste

<uses-permission Android:name="Android.permission.READ_EXTERNAL_STORAGE"/>
3
Sushin Pv