En Android, usando exoplayer, ¿cómo rellenar surfaceview con un video que no tiene la misma relación de aspecto con el dispositivo?

Tengo una actividad que utiliza ExoPlayer para reproducir un video. Cuando voy a pantalla completa, a menos que la relación de aspecto del dispositivo sea igual a la del video, consigo pequeñas barras negras en la parte superior e inferior del video.

Así es como se ve el diseño:

<com.google.android.exoplayer.AspectRatioFrameLayout android:id="@+id/video_frame" android:layout_width="match_parent" android:layout_height="wrap_content" android:layout_gravity="center" android:layout_alignParentLeft="true" android:layout_alignParentTop="true" android:layout_alignParentRight="true" android:layout_alignParentBottom="true"> <SurfaceView android:id="@+id/surface_view" android:layout_width="match_parent" android:layout_height="match_parent" android:layout_gravity="fill_vertical"/> <View android:id="@+id/shutter" android:layout_width="match_parent" android:layout_height="match_parent" android:background="@android:color/black"/> </com.google.android.exoplayer.AspectRatioFrameLayout> 

Esperaba que

 aspectRatioFrameLayout.setAspectRatio(mVideo.getAspectRatio()); 

Resolvería el problema, pero no tuve éxito. ¿Hay una manera de llenar la pantalla con el video, incluso si parte del video está cortado de la pantalla?

Puede quitar el com.google.android.exoplayer.AspectRatioFrameLayout .

A continuación, coloque un FrameLayout simple con ancho y altura en match_parent .

Tenga en cuenta que el SurfaceView debe permanecer en width y height = match_parent .

Explicación: AspectRatioFrameLayout está estableciendo la altura correcta de la vista de acuerdo con la relación de video real (calcuclating basado en anchura, altura y pixelRatio). Si no lo quieres, Exoplayer todavía puede mostrar la vista en un SurfaceView como lo estaban haciendo antes. Si SurfaceView no es @Override , no tendrá relación de aspecto.

Hay una manera más rápida de llenar la pantalla con el video. Vaya a la clase SimpleExoPlayerView.java , cambie el resizeMode de AspectRatioFrameLayout.RESIZE_MODE_FIT a AspectRatioFrameLayout.RESIZE_MODE_FILL . RESIZE_MODE_FILL ignorará la relación de aspecto especificada. Utilice esta forma si utiliza ExoPlayer como un módulo en su proyecto.

ACTUALIZADO Si utiliza ExoPlayer como una biblioteca, tienen un método para setResizeMode() . Acaba de configurar AspectRatioFrameLayout.RESIZE_MODE_FILL en su vista: simpleExoPlayerView.setResizeMode(AspectRatioFrameLayout.RESIZE_MODE_FILL) Eso es todo!

  • Convertir secuencias de entrada de vídeo a RTMP
  • No se pueden transmitir vídeos
  • Uso de JWplayer en Android para reproducir video en Phonegap
  • Cómo saber cuando MediaRecorder ha terminado de escribir datos en el archivo
  • Android no puede usar hdmi en la pestaña creativa y necesita ser notificado en todos los dispositivos (máximo) tan pronto como hdmi esté conectado
  • Codificación y muxing de vídeo mediante MediaCodec y MediaMuxer
  • Aplicación de efectos en el video que se está reproduciendo
  • Picasso image loading library: cómo cargar miniaturas de video
  • SurfaceView, SurfaceTexture y MediaPlayer no pueden reproducir mi video en android
  • Error de la cámara 1001
  • ¿Puede Android cache el video HTML5 con el manifiesto de caché sin conexión?
  • FlipAndroid es un fan de Google para Android, Todo sobre Android Phones, Android Wear, Android Dev y Aplicaciones para Android Aplicaciones.