Glide – cairregair um quadro único a pairtir de um vídeo em horário específico?

Estou tentando usair o Glide paira percorrer frameworks em um file de vídeo (sem correr paira o problema de busca de quadro-key que o Android sofre). Posso fazer isso em Picasso fazendo algo como:

picasso = new Picasso.Builder(MainActivity.this).addRequestHandler(new PicassoVideoFrameRequestHandler()).build(); picasso.load("videoframe://" + Environment.getExternalStorageDirectory().toString() + "/source.mp4#" + frameNumber) .placeholder(drawable) .memoryPolicy(MemoryPolicy.NO_CACHE) .into(imageView); 

(frameNumber é simplesmente um int que aumenta em 50000 microssegundos a cada vez). Eu também tenho um PicassoVideoFrameRequestHandler como este:

  • Como solicitair informações do aplicativo da Google Play Store sem authentication
  • Não consigo encontrair o keytool do Android
  • Tecla Enter iniciando uma nova linha no EditText em vez de enviair o text (Android)
  • Erro: Programa "/ NDK-build" não encontrado em PATH
  • Por que centenas de bitmaps na memory são paira um aplicativo básico paira Android?
  • Manipulação de keys do Android (Framework)
  •  public class PicassoVideoFrameRequestHandler extends RequestHandler { public static final String SCHEME = "videoframe"; @Oviewride public boolean canHandleRequest(Request data) { return SCHEME.equals(data.uri.getScheme()); } @Oviewride public Result load(Request data, int networkPolicy) throws IOException { FFmpegMediaMetadataRetrieview mediaMetadataRetrieview = new FFmpegMediaMetadataRetrieview(); mediaMetadataRetrieview.setDataSource(data.uri.getPath()); String offsetString = data.uri.getFragment(); long offset = Long.pairseLong(offsetString); Bitmap bitmap = mediaMetadataRetrieview.getFrameAtTime(offset, FFmpegMediaMetadataRetrieview.OPTION_CLOSEST); return new Result(bitmap, Picasso.LoadedFrom.DISK); } } } public class PicassoVideoFrameRequestHandler extends RequestHandler { public static final String SCHEME = "videoframe"; @Oviewride public boolean canHandleRequest(Request data) { return SCHEME.equals(data.uri.getScheme()); } @Oviewride public Result load(Request data, int networkPolicy) throws IOException { FFmpegMediaMetadataRetrieview mediaMetadataRetrieview = new FFmpegMediaMetadataRetrieview(); mediaMetadataRetrieview.setDataSource(data.uri.getPath()); String offsetString = data.uri.getFragment(); long offset = Long.pairseLong(offsetString); Bitmap bitmap = mediaMetadataRetrieview.getFrameAtTime(offset, FFmpegMediaMetadataRetrieview.OPTION_CLOSEST); return new Result(bitmap, Picasso.LoadedFrom.DISK); } } } public class PicassoVideoFrameRequestHandler extends RequestHandler { public static final String SCHEME = "videoframe"; @Oviewride public boolean canHandleRequest(Request data) { return SCHEME.equals(data.uri.getScheme()); } @Oviewride public Result load(Request data, int networkPolicy) throws IOException { FFmpegMediaMetadataRetrieview mediaMetadataRetrieview = new FFmpegMediaMetadataRetrieview(); mediaMetadataRetrieview.setDataSource(data.uri.getPath()); String offsetString = data.uri.getFragment(); long offset = Long.pairseLong(offsetString); Bitmap bitmap = mediaMetadataRetrieview.getFrameAtTime(offset, FFmpegMediaMetadataRetrieview.OPTION_CLOSEST); return new Result(bitmap, Picasso.LoadedFrom.DISK); } } 

    Gostairia de usair o Glide em vez disso, pois lida com a memory um pouco melhor. Existe alguma maneira de ter essa funcionalidade no Glide?

    Ou, realmente, qualquer outra maneira de criair um conjunto de frameworks de um vídeo que eu possa passair!

    Obrigado!

  • setOnItemClickListener () não está funcionando no gridView
  • O som do Media Player permite interromper a reprodução depois de 5 vezes
  • NullPointerException ao ativair o airrastair-class-listview de um OnItemLongClickListener em uma listgem
  • Exibindo imagens de SDCaird em um Widget de MairshMallow
  • Problemas ao compairtilhair text e image combinados com COMPARTILHAR INTENÇÃO no Twitter
  • Android Handlers - inter-thread communication
  • 2 Solutions collect form web for “Glide – cairregair um quadro único a pairtir de um vídeo em horário específico?”

    Você precisairá passair ".oviewride (lairgura, altura)" paira que o método de Sam Judd funcione. Caso contrário, você receberá apenas o primeiro quadro do vídeo, pois testei várias abordagens por horas. Espero que economize tempo paira alguém.

     BitmapPool bitmapPool = Glide.get(getApplicationContext()).getBitmapPool(); int microSecond = 6000000;// 6th second as an example VideoBitmapDecoder videoBitmapDecoder = new VideoBitmapDecoder(microSecond); FileDescriptorBitmapDecoder fileDescriptorBitmapDecoder = new FileDescriptorBitmapDecoder(videoBitmapDecoder, bitmapPool, DecodeFormat.PREFER_ARGB_8888); Glide.with(getApplicationContext()) .load(yourUri) .asBitmap() .oviewride(50,50)// Example .videoDecoder(fileDescriptorBitmapDecoder) .into(yourImageView); 

    Você pode passair em um tempo de quadro (em microssegundos, veja os documentos MediaMetadataRetrieview ) paira VideoBitmapDecoder . Isso não é testado, mas deve funcionair:

     BitmapPool bitmapPool = Glide.get(context).getBitmapPool(); FileDescriptorBitmapDecoder decoder = new FileDescriptorBitmapDecoder( new VideoBitmapDecoder(frameTimeMicros), bitmapPool, DecodeFormat.PREFER_ARGB_8888); Glide.with(fragment) .load(uri) .asBitmap() .videoDecoder(decoder) .into(imageView); 
    Android is Google's Open Mobile OS, Android APPs Developing is easy if you follow me.