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-heightawrap_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_heighta 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_KNOWNevento. - Consigue el
Event.VIDEO_WIDTHyEvent.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
renderViewpara 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_KNOWNevento 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_heighta280dpy luego cambiar el tamaño delSurfaceViewpara igualar280dp. La relación de aspecto se modificará ligeramente. Si un usuario pasa a pantalla completa en modo vertical yupdateVideoViewMatchToParent()se llama, entonces tanto elBaseVideoViewySurfaceViewllenará 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.