Extraer mapa de bits del vídeo en android
Estoy tratando de extraer todos los marcos de un video.
Siguiendo el código quiero buscar los primeros 30 cuadros de un vídeo, pero conseguí solamente el primer marco 30 veces.
private ArrayList<Bitmap> getFrames(String path) { try { ArrayList<Bitmap> bArray = new ArrayList<Bitmap>(); bArray.clear(); MediaMetadataRetriever mRetriever = new MediaMetadataRetriever(); mRetriever.setDataSource("/sdcard/myvideo.mp4"); for (int i = 0; i < 30; i++) { bArray.add(mRetriever.getFrameAtTime(1000*i, MediaMetadataRetriever.OPTION_CLOSEST_SYNC)); } return bArray; } catch (Exception e) { return null; } }
Ahora, ¿cómo puedo obtener todos los cuadros de un video?
- ¿Cómo puedo tomar una captura de pantalla de un video, en android
- El video no se muestra en VideoView, pero puedo escuchar su sonido
- Android Camera PreviewCallback no se llama en 4.1
- Android: ¿Puedo recortar un video en radio de aspecto a pantalla completa?
- Reproducción inversa de Android y marco por cuadro
- El video de Android no mantiene la orientación cuando se sube al sitio web.
- Grabación de errores en vídeos android
- Reproducir vídeo en el cuadro de diálogo android
- Android: ¿Cómo volver a la actividad anterior cuando se detiene el video?
- Android VideoView - Cómo reproducir vídeos en secuencia
- ¿Es posible escribir metadatos en medios de video en Android?
- Android - No se pueden reproducir videos (mp4 / mov / 3gp / etc.)?
- ¿Por qué el tamaño de la vista de video cambió automáticamente dependiendo del tamaño del video?
El soporte de vídeo en Android SDK es limitado y la extracción de fotogramas para vídeos codificados en H264 sólo es posible para fotogramas clave. Para extraer un marco arbitrario, necesitará usar una biblioteca como FFmpegMediaMetadataRetriever que utiliza código nativo para extraer datos del vídeo. Es muy rápido, viene con binarios precompilados (para ARM y x86) por lo que no es necesario profundizar en C ++ y makefiles, está bajo licencia de Apache 2.0 y viene con una aplicación demo de Android.
También hay una biblioteca Java pura, JCodec pero es más lenta y cuando la usé el año pasado los colores del marco extraído fueron distorsionados.
GetFrameAt obtiene datos en milisegundos pero está incrementando .001 milisegundos en el bucle for.
for(int i=1000000;i<millis*1000;i+=1000000) // for incrementing 1s use 1000 { bArray.add(mRetriever.getFrameAtTime(i, MediaMetadataRetriever.OPTION_CLOSEST_SYNC)); }
Cámbielo como arriba. Arriba se muestra para crear lo que desea. Yo también lo respondí aquí
- Error de inicio de sesión de Android facebook sdk 1118578
- Maps de Android ClusteredMarkers – no muestran unclustered?