Android obtener captura de pantalla de videoview actual

He visto un montón de viejas preguntas sobre esto, tal vez ahora hay algunas soluciones. Quiero tomar una captura de pantalla del marco actual de mi videoview. Videoview muestra un video en tiempo real usando un flujo rtsp.

Trato de tomar bitmap, pero siempre es negro

public static Bitmap loadBitmapFromView(View v) { Bitmap b = Bitmap.createBitmap(v.getLayoutParams().width , v.getLayoutParams().height, Bitmap.Config.ARGB_8888); Canvas c = new Canvas(b); v.layout(0, 0, v.getLayoutParams().width, v.getLayoutParams().height); v.draw(c); return b; } 

EDIT: MediaMetadataRetriever no funciona con url de flujo, tal vez funciona con archivo de vídeo. Utilizando lib en este enlace (es un contenedor de MediaMetadataRetriever que permiten la entrada de protocolo rtsp ) Puedo guardar un cuadro de video, pero hay un retraso de 10 seg respeta videoview en tiempo real porque debe crear una nueva conexión con el servidor de streaming.

No pruebo ThumbnailUtils , pero en Api leí que la entrada es sólo archivo-path

One Solution collect form web for “Android obtener captura de pantalla de videoview actual”

Use TextureView en lugar de VideoView. TextureView tiene el método getBitmap (). Aquí está el uso de TextureView como videoView

 public class TextureVideoActivity extends Activity implements TextureView.SurfaceTextureListener { private static final String FILE_NAME = "myVideo.mp4"; private static final String TAG = TextureVideoActivity.class.getName(); private MediaPlayer mMediaPlayer; private TextureView mPreview; @Override public void onCreate(Bundle icicle) { super.onCreate(icicle); setContentView(R.layout.activity_texture_video); mPreview = (TextureView) findViewById(R.id.textureView); mPreview.setSurfaceTextureListener(this); } public Bitmap getBitmap(){ return mPreview.getBitmap(); } public void onSurfaceTextureAvailable(SurfaceTexture surfaceTexture, int width, int height) { Surface surface = new Surface(surfaceTexture); try { mMediaPlayer = new MediaPlayer(); mMediaPlayer .setDataSource(this, Uri.parse(FILE_NAME)); mMediaPlayer.setSurface(surface); mMediaPlayer.setLooping(true); // don't forget to call MediaPlayer.prepareAsync() method when you use constructor for // creating MediaPlayer mMediaPlayer.prepareAsync(); // Play video when the media source is ready for playback. mMediaPlayer.setOnPreparedListener(new MediaPlayer.OnPreparedListener() { @Override public void onPrepared(MediaPlayer mediaPlayer) { mediaPlayer.start(); } }); } catch (IllegalArgumentException e) { Log.d(TAG, e.getMessage()); } catch (SecurityException e) { Log.d(TAG, e.getMessage()); } catch (IllegalStateException e) { Log.d(TAG, e.getMessage()); } catch (IOException e) { Log.d(TAG, e.getMessage()); } } @Override protected void onDestroy() { super.onDestroy(); if (mMediaPlayer != null) { // Make sure we stop video and release resources when activity is destroyed. mMediaPlayer.stop(); mMediaPlayer.release(); mMediaPlayer = null; } } @Override public void onSurfaceTextureSizeChanged(SurfaceTexture surfaceTexture, int i, int i2) { } @Override public boolean onSurfaceTextureDestroyed(SurfaceTexture surfaceTexture) { return false; } @Override public void onSurfaceTextureUpdated(SurfaceTexture surfaceTexture) { } } 

Reproducción de vídeo en TextureView

  • Android Studio 3 no puede crear mi proyecto
  • PreferenceFragment.findPreference devuelve siempre NULL
  • ¿Cómo comparar dos arraylist?
  • Android / Java: ¿Llamar a un método usando reflexión?
  • Android instrumentación prueba java.lang.UnsatisfiedLinkError en el uso de AndroidJunitRunner y AndroidJUnit4
  • Cómo guardar la imagen a través de la captura en android a php?
  • Variables de String de paso por referencia a setOnItemSelectedListener de varios Spinners
  • Android SimpleDateFormat devolver el tiempo incorrecto entre la medianoche y 1 am
  • Cambiar la propiedad animateLayoutChanges mediante el código java
  • Problemas al importar proyectos en Android Studio con respecto a ActionBarSherlock
  • ¿Cómo puedo hacer conexiones de URL asíncronas en Android?
  • FlipAndroid es un fan de Google para Android, Todo sobre Android Phones, Android Wear, Android Dev y Aplicaciones para Android Aplicaciones.