Voglio creare una miniatura del video dal percorso della sdcard come posso generare una miniatura dal percorso del file video?Come creare una miniatura del video dal percorso del file video in Android
risposta
È 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.
MediaStore.Images.Thumbnails.MICRO_KIND
tipo genererà delle miniature di dimensioni 96 x 96.MediaStore.Images.Thumbnails.MINI_KIND
tipo genererà delle miniature di dimensioni 512 x 384.
Spero che aiuta!
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à
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"/>
Grazie mille. Funziona :) –
funziona per i video uri da JSON –
No, non lo è. funziona solo con i file video che sono in memoria – Rajesh