¿Es posible generar una miniatura desde una URL de video en Android?

Estoy trabajando en una aplicación de video. Transmitiré un video desde el enlace del servidor, ¿es posible para mí generar una miniatura de video desde la URL sin descargar el video?

Sin descargar video, puedes generar una miniatura desde el siguiente código:

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()); 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; } 

NOTA: El video se almacena como Intra y no Intra (marcos de cuadros) getFrameAtTime devolverá el marco no intramétrico más cercano como bitmap. Entonces, básicamente, no descargará el video completo.

No es posible crear una miniatura desde el enlace al vapor, debes mostrarla desde el servidor. Mejor subir una miniatura a lo largo del video. Use el siguiente código para generar miniatura

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

Aquí está tu enlace:

  1. Android: ¿Es posible mostrar miniaturas de video?
  2. http://developer.android.com/reference/android/media/ThumbnailUtils.html

En mi opinión, el lado del servidor debe crear una miniatura de un video y transferir imágenes de video en miniatura a través de su servicio.

Intenté esto con planeo y funcionó, Glide versión 4.3.1

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

Editar: Glide estaba trabajando lento para mí

La respuesta principal no daba resultado para algunos videos, aquí es cómo lo hice

 MediaMetadataRetriever retriever = new MediaMetadataRetriever(); //give YourVideoUrl below retriever.setDataSource("YourVideoUrl", new HashMap()); // this gets frame at 2nd second Bitmap image = retriever.getFrameAtTime(2000000, MediaMetadataRetriever.OPTION_CLOSEST_SYNC); //use this bitmap image 

intenta usar este

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

Este método le dará miniaturas de todos los archivos de video en su teléfono … no dude en hacer preguntas

 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 

Buscamos todos los videos en el teléfono Android. http://sunilkmrnishad.blogspot.in/2017/03/read-files-apps-photos-media-from.html

 public class ThumbnailExtract extends AsyncTask { 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; } }