2015-09-11 13 views

risposta

27

È possibile utilizzare la classe ThumbnailUtils per ottenere la miniatura del video del file Video.

createVideoThumbnail() è un metodo che restituisce Bitmap (miniatura) del video dal percorso del file video.

da Android Documenti:

public static Bitmap createVideoThumbnail (String filePath, int tipo)

creare una miniatura video per un video. Può restituire null se il video è danneggiato o il formato non è supportato.

È possibile creare VideoThumbnail dal percorso sdcard come questo.

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

Utilizzando ThumbnailUtils, è possibile creare una miniatura di due tipi.

  1. MediaStore.Images.Thumbnails.MICRO_KIND tipo genererà delle miniature di dimensioni 96 x 96.

  2. MediaStore.Images.Thumbnails.MINI_KIND tipo genererà delle miniature di dimensioni 512 x 384.

Spero che aiuta!

+0

Grazie mille. Funziona :) –

+0

funziona per i video uri da JSON –

+0

No, non lo è. funziona solo con i file video che sono in memoria – Rajesh

1

Si prega di controllare il mio codice spero che vi aiuterà a

/** 
    * 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; 
    } 

Modifica metodo di cui sopra secondo le vostre necessità

1

Se si crea direttamente le miniature come segue

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

Poi c'è è un problema con questo metodo se stai creando le miniature per un grande set di video (per un numero elevato di video). l'applicazione si bloccherà fino a quando tutte le anteprime non saranno caricate perché tutto il processo è in esecuzione nel thread principale.


Usa SuziLoader

Questo caricatore caricherà le miniature per i video che viene localmente memorizzati sul file system in background.

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 

Per ottenere questa dipendenza attenersi alla seguente procedura

Fase 1. Aggiungere il repository JitPack al file di configurazione
inserirlo nel vostro build.gradle radice alla fine del repository:

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

Fase 2. Aggiungere la dipendenza

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

ADD LEGGI ESTERNO STOCCAGGIO Autorizzazione in manifest

<uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE"/>