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:
- Extraer / modificar marcos de video en Android
- ¿Por qué mediaPlayer.seekTo (msec) no actualiza surfaceView cuando mediaPlayer está pausado?
- Reproducción de un video después de que un video en TextureView de Android tenga problemas
- ¿Cómo puedo crear un reproductor multimedia personalizado para reproducir un códec personalizado en Android?
- Edición de metadatos de un archivo de vídeo en Android
<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?
- Cómo fusionar archivos de audio y video en android
- Error de MediaPlayer de Android No se puede reproducir este video
- Android: onSeekCompleteListener con VideoView
- Mover el archivo de video capturado por la cámara usando cordova (phonegap) no es refrescante galería thumbnail
- Vídeo incrustado HTML5 de Android
- Multiplexación de flujos de audio y vídeo en línea en android
- Interrumpir la grabación de medios mediante programación. Camera.apk de samsung galaxy tiene `this.mMediaRecorder.pause ();` no funciona en mi código
- ¿Es Android 2.2 HTTP streaming progresivo = HTTP Live Streaming?
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!
- Android Studio Cambiar mis claves de teclado
- Cómo almacenar el arraylist en la base de datos ormlite