BrightcoveVideoView
cuando se trabaja con Native SDK para Android.Resumen
Como desarrollador, puede cambiar el comportamiento predeterminado de cómo se muestra el video en la vista de video. Puede cambiar el tamaño / estirar la vista de video interna (SurfaceView
/TextureView
) para llenar el BrightcoveVideoView
(FrameLayout
). Para hacer esto, puede escuchar el EventType.VIDEO_SIZE_KNOWN
evento, haga algunos cálculos matemáticos y establezca los valores de visualización.
Hay dos formas de cambiar la vista de video:
Cambiar el tamaño del contenedor
Es posible que desee desarrollar una aplicación que configure la Vista de video para que se ajuste a toda la pantalla del dispositivo en modo vertical. Puede hacer esto cambiando el tamaño del contenedor (BaseVideoView
/FrameLayout
).
Establecer la propiedad del contenedor
Si ve márgenes negros alrededor de su video, puede intentar configurar el BrightcoveVideoView
layout-height
.
- Abra el XML diseño expediente.
- Selecciona el
BrightcoveVideoView layout-height
awrap_content
. - Puede experimentar un parpadeo inicial como se explica en la nota anterior.
Establecer el tamaño de la vista de video
Otra forma de controlar la Vista de video es establecer el tamaño mediante programación.
- Para minimizar el parpadeo inicial, intente configurar el
layout_height
a un valor específico (por ejemplo, 280 dp). El objetivo es que la altura establecida se acerque a la altura calculada. - Escuche el
EventType.VIDEO_SIZE_KNOWN
evento. - Consigue el
Event.VIDEO_WIDTH
yEvent.VIDEO_HEIGHT
- Con esos valores, determine la relación de aspecto.
- Utilice la relación de aspecto para calcular el ancho y el alto en la pantalla.
Esta solución se verá similar a esto:
//Event sent when we know the Video dimensions.
eventEmitter.on(EventType.VIDEO_SIZE_KNOWN, new EventListener() {
@Override
public void processEvent(Event event) {
// Get the width and height
float width = event.getIntegerProperty(Event.VIDEO_WIDTH);
float height = event.getIntegerProperty(Event.VIDEO_HEIGHT);
float aspectRatio = height/width;
//Get the display metrics
DisplayMetrics metrics = new DisplayMetrics();
getWindowManager().getDefaultDisplay().getMetrics(metrics);
int videoWidth = metrics.widthPixels; // We cover the entire display's width
int videoHeight = (int) (videoWidth*aspectRatio); //Calculate the height based on the ratio
// Set the layout params
brightcoveVideoView.setLayoutParams(new FrameLayout.LayoutParams(videoWidth,videoHeight));
}
});
Al agregar una vista, deberá anular los parámetros de diseño. Para obtener más detalles, consulte la Androide: Agregar vista / administrar diseño documento.
Cambiar el tamaño del video
Es posible que desee implementar un doble toque que llene la pantalla. Esto tomaría un video 16: 9 y llenaría la pantalla en un dispositivo 18: 9 o 19: 9.
Puede hacer esto cambiando el tamaño del video real (SurfaceView
).
-
Si establece el ancho y el alto en el
renderView
para que coincida con el tamaño de la pantalla del dispositivo, el video cambiará de tamaño para que coincida con la pantalla completa.//Event sent when we know the Video dimensions. eventEmitter.on(EventType.VIDEO_SIZE_KNOWN, new EventListener() { @Override public void processEvent(Event event) { // Get the width and height float width = event.getIntegerProperty(Event.VIDEO_WIDTH); float height = event.getIntegerProperty(Event.VIDEO_HEIGHT); float aspectRatio = height/width; //Get the display metrics DisplayMetrics metrics = new DisplayMetrics(); getWindowManager().getDefaultDisplay().getMetrics(metrics); int videoWidth = metrics.widthPixels; // We cover the entire display's width int videoHeight = (int) (videoWidth*aspectRatio); //Calculate the height based on the ratio // Set the video size brightcoveVideoView.getRenderView().setVideoSize(videoWidth, videoHeight); } });
-
El siguiente código actualiza la vista de video subyacente (p. Ej.
SurfaceView
) para que coincida con su padreBaseVideoView
(FrameLayout
). Hay varias cosas a tener en cuenta:-
Necesitas escuchar el
VIDEO_SIZE_KNOWN
evento al entrar y salir de la pantalla completa, y al girar el dispositivo. - Debe decidir cuándo actualizar su vista para las condiciones anteriores.
Un escenario podría ser que establezca el
BaseVideoView layout_height
a280dp
y luego cambiar el tamaño delSurfaceView
para igualar280dp
. La relación de aspecto se modificará ligeramente. Si un usuario pasa a pantalla completa en modo vertical yupdateVideoViewMatchToParent()
se llama, entonces tanto elBaseVideoView
ySurfaceView
llenará la pantalla del dispositivo y la relación de aspecto del video se modificará ligeramente.public void updateVideoViewMatchToParent(@NonNull BaseVideoView brightcoveVideoView) { RenderView renderView = brightcoveVideoView.getRenderView(); if (renderView != null) { renderView.setVideoSize(brightcoveVideoView.getWidth(), brightcoveVideoView.getHeight()); } }
Para detectar el doble toque, puede utilizar el GestureDetector.OnDoubleTapListener interfaz. Para obtener más detalles, consulte la Detecta gestos comunes documento.
-
Necesitas escuchar el
Si desea estirar el video sin tener en cuenta la relación de aspecto (sin recortar el video), puede intentar esto:
eventEmitter.on(EventType.VIDEO_SIZE_KNOWN, new EventListener() {
@Override
public void processEvent(Event event) {
//Get the display metrics
DisplayMetrics metrics = new DisplayMetrics();
getWindowManager().getDefaultDisplay().getMetrics(metrics);
int videoHeight = metrics.heightPixels;
int videoWidth = metrics.widthPixels;
brightcoveVideoView.getRenderView().setVideoSize(videoWidth, videoHeight);
}
});
Tenga en cuenta que los valores que obtiene se ven afectados por la orientación del dispositivo. Para estirar el video tanto en vertical como en horizontal, debe hacer lo siguiente:
-
Anule lo siguiente
Activity
:public void onConfigurationChanged(Configuration configuration)
- Restablece el tamaño del video.