BrightcoveVideoView
lorsque vous travaillez avec le SDK natif pour Android.Aperçu
En tant que développeur, vous pouvez modifier le comportement par défaut d'affichage de la vidéo dans la vue vidéo. Vous pouvez redimensionner/étirer la vue vidéo interne (SurfaceView
/TextureView
) pour remplir le BrightcoveVideoView
(FrameLayout
). Pour ce faire, vous pouvez écouter le EventType.VIDEO_SIZE_KNOWN
événement, faites quelques calculs et définissez les valeurs d'affichage.
Il existe deux manières de modifier la vue vidéo :
Redimensionner le conteneur
Vous souhaiterez peut-être développer une application qui définit la vue vidéo pour qu'elle s'adapte à tout l'écran de l'appareil en mode portrait. Vous pouvez le faire en redimensionnant le conteneur (BaseVideoView
/FrameLayout
).
Définir la propriété du conteneur
Si vous voyez des marges noires autour de votre vidéo, vous pouvez essayer de régler le BrightcoveVideoView
layout-height
.
- Ouvrir le XML disposition déposer.
- Met le
BrightcoveVideoView layout-height
àwrap_content
. - Vous pouvez rencontrer un scintillement initial comme expliqué dans la note ci-dessus.
Définir la taille de la vue vidéo
Une autre façon de contrôler la vue vidéo consiste à définir la taille par programmation.
- Pour minimiser le scintillement initial, essayez de régler le
layout_height
à une valeur spécifique (par exemple 280dp). L'objectif est que la hauteur réglée soit proche de la hauteur calculée. - Écoutez le
EventType.VIDEO_SIZE_KNOWN
un événement. - Obtenir le
Event.VIDEO_WIDTH
etEvent.VIDEO_HEIGHT
- Avec ces valeurs, déterminez le rapport hauteur/largeur.
- Utilisez le rapport hauteur/largeur pour calculer la largeur et la hauteur de l'écran.
Cette solution ressemblera à ceci :
//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));
}
});
Lors de l'ajout d'une vue, vous devrez remplacer les paramètres de mise en page. Pour plus de détails, consultez le Android: Ajouter une vue/Gérer la mise en page document.
Redimensionner la vidéo
Vous voudrez peut-être implémenter un double-clic qui remplit l'écran. Cela prendrait une vidéo 16:9 et remplirait l'écran sur un appareil 18:9 ou 19:9.
Vous pouvez le faire en redimensionnant la vidéo réelle (SurfaceView
).
-
Si vous réglez la largeur et la hauteur sur le
renderView
pour correspondre à la taille de l'affichage de l'appareil, la vidéo sera redimensionnée pour correspondre à l'écran entier.//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); } });
-
Le code ci-dessous met à jour la vue vidéo sous-jacente (par exemple
SurfaceView
) pour correspondre à son parentBaseVideoView
(FrameLayout
). Il y a plusieurs choses à garder à l'esprit :-
Vous devez écouter le
VIDEO_SIZE_KNOWN
événement lors de l'entrée et de la sortie du plein écran, et lors de la rotation de l'appareil. - Vous devez décider quand mettre à jour votre vue pour les conditions ci-dessus.
Un scénario pourrait être que vous définissiez le
BaseVideoView layout_height
à280dp
puis redimensionner leSurfaceView
correspondre280dp
. Le rapport hauteur/largeur sera légèrement modifié. Si un utilisateur passe en plein écran en mode portrait etupdateVideoViewMatchToParent()
est appelé, alors les deuxBaseVideoView
etSurfaceView
remplira l'écran de l'appareil et le rapport hauteur/largeur de la vidéo sera légèrement modifié.public void updateVideoViewMatchToParent(@NonNull BaseVideoView brightcoveVideoView) { RenderView renderView = brightcoveVideoView.getRenderView(); if (renderView != null) { renderView.setVideoSize(brightcoveVideoView.getWidth(), brightcoveVideoView.getHeight()); } }
Pour détecter le double tap, vous pouvez utiliser le GestureDetector.OnDoubleTapListener interface. Pour plus de détails, consultez le Détecter les gestes courants document.
-
Vous devez écouter le
Si vous souhaitez étirer la vidéo sans prendre en compte le rapport hauteur/largeur (sans recadrer la vidéo), vous pouvez essayer ceci :
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);
}
});
Gardez à l'esprit que les valeurs que vous obtenez sont affectées par l'orientation de l'appareil. Pour étirer la vidéo en mode portrait et paysage, procédez comme suit :
-
Remplacer ce qui suit
Activity
:public void onConfigurationChanged(Configuration configuration)
- Réinitialiser la taille de la vidéo.