2017-02-07 1 views
1

J'ai été en mesure de faire une vignette vidéo en utilisant Glide si la source peut être trouvée dans le stockage de téléphone. Cependant, le code ne fonctionne pas si vous accédez à une URL distante au lieu d'un fichier local.Comment faire Vignette vidéo de la source à distance dans Android en utilisant Glide

 Glide.with(mContext) 
       .load(message) 
       .into(mVideoThumbnailView); 

J'essaie d'accéder à un fichier mp4. Merci pour vos conseils.

+0

Quel type est 'message'? Assurez-vous qu'il pointe vers une ressource valide. – azizbekian

Répondre

1

Je n'ai pas essayé avec Glide. Cependant, comme mentionné dans ce issue, vous devez écrire un modèle personnalisé et DataFetcher pour récupérer l'image en utilisant Glide.

Toutefois, une méthode de contournement qui a fonctionné pour moi est en utilisant MediaMetadataRetriever. Voici comment j'ai récupéré le bitmap miniature sans télécharger le fichier:

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; 
     } 
+0

Bonjour @OBX, où l'utilisez-vous exactement? Dans une activité (est-ce important)? J'applique actuellement ceci dans un adaptateur. En utilisant ce code, je reçois un 'java.lang.IllegalArgumentException 02-07 18: 23: 13.150 12240-12240/com.woppi.myapp W/System.err: à android.media.MediaMetadataRetriever.setDataSource (MediaMetadataRetriever.java : 73) 02-07 18: 23: 13.150 12240-12240/com.woppi.myapp W/System.err: à com.woppi.myapp.RoomMessageAdapter.retrieveVideoFrameFromVideo (RoomMessageAdapter.java:635) ' – Woppi

+0

hmm, peut être un problème de permission, essayez ceci aussi, http://stackoverflow.com/questions/27566480/mediametadataretriever-setdatasource-throws-illegalargumentexception et laissez savoir si vous avez déjà ajouté la permission! Si vous utilisez une API plus élevée, rétrograder la version et essayer sans autorisation d'exécution – OBX

+0

J'ai 'INTERNET, WRITE_EXTERNAL_STORAGE, READ_EXTERNAL_STORAGE, RECORD_AUDIO, CAMERA' J'utilise l'API niveau 21 mais l'application devrait supporter 4.2.2 Jellybean et plus. – Woppi