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

  • Cómo obtener la altura en píxeles de LinearLayout con layout_weight
  • getBeaconParsers (). add throws java.lang.UnsupportedOperationException
  • El zócalo se atasca al hacer readLine ()
  • Carta de AFreeChart que no rellena el padre
  • ¿Cómo pasar de managedQuery a LoaderManager / CursorLoader?
  • ¿Cómo hacer un temporizador simple sin nueva clase en Android?
  • ¿Cómo puedo mantener el estado al cambiar entre las pestañas / fragmentos de la barra de acción?
  • Android Studio: Error al crear el código de error JVM: -1
  • Java.net.SocketException: sendto failed: EPIPE (Broken pipe) en Android
  • Debug Lua en un proyecto de Java usando LuaJava
  • Fragmentos en ViewPager son nulos después onresume
  • FlipAndroid es un fan de Google para Android, Todo sobre Android Phones, Android Wear, Android Dev y Aplicaciones para Android Aplicaciones.