BrightcoveVideoView
sie bei der Arbeit mit dem Native SDK für Android voll ist.Überblick
Als Entwickler können Sie das Standardverhalten für die Anzeige des Videos in der Videoansicht ändern. Sie können die innere Videoansicht skalieren/dehnen (SurfaceView
/TextureView
) um die zu füllen BrightcoveVideoView
(FrameLayout
). Dazu können Sie auf die EventType.VIDEO_SIZE_KNOWN
Ereignis, rechnen Sie etwas nach und stellen Sie die Anzeigewerte ein.
Es gibt zwei Möglichkeiten, die Videoansicht zu ändern:
Größe des Containers ändern
Vielleicht möchten Sie eine App entwickeln, die die Videoansicht so einstellt, dass sie im Hochformat auf den gesamten Gerätebildschirm passt. Sie können dies tun, indem Sie die Größe des Containers ändern (BaseVideoView
/FrameLayout
).
Legen Sie die Containereigenschaft fest
Wenn Sie schwarze Ränder um Ihr Video sehen, können Sie versuchen, die BrightcoveVideoView
layout-height
.
- Öffnen Sie die XML-Datei Layout Datei.
- Stellen Sie die
BrightcoveVideoView layout-height
zuwrap_content
. - Es kann zu einem anfänglichen Flackern kommen, wie im obigen Hinweis beschrieben.
Legen Sie die Größe der Videoansicht fest
Eine andere Möglichkeit, die Videoansicht zu steuern, besteht darin, die Größe programmgesteuert festzulegen.
- Um das anfängliche Flimmern zu minimieren, versuchen Sie die Einstellung
layout_height
auf einen bestimmten Wert (zB 280dp). Das Ziel ist, dass die eingestellte Höhe der berechneten Höhe entspricht. - Hören Sie auf die
EventType.VIDEO_SIZE_KNOWN
Veranstaltung. - Bekommen das
Event.VIDEO_WIDTH
undEvent.VIDEO_HEIGHT
- Bestimmen Sie mit diesen Werten das Seitenverhältnis.
- Verwenden Sie das Seitenverhältnis, um die Breite und Höhe auf dem Display zu berechnen.
Diese Lösung sieht ähnlich aus:
//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));
}
});
Beim Hinzufügen einer Ansicht müssen Sie die Layoutparameter überschreiben. Einzelheiten finden Sie im Android: Ansicht hinzufügen/Layout verwalten dokumentieren.
Größe des Videos ändern
Sie können ein Doppeltippen implementieren, das den Bildschirm ausfüllt. Dies würde ein 16:9-Video aufnehmen und den Bildschirm auf einem 18:9- oder 19:9-Gerät ausfüllen.
Sie können dies tun, indem Sie die Größe des tatsächlichen Videos ändern (SurfaceView
).
-
Wenn Sie die Breite und die Höhe auf die
renderView
Um der Größe des Gerätedisplays zu entsprechen, wird die Größe des Videos an den gesamten Bildschirm angepasst.//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); } });
-
Der folgende Code aktualisiert die zugrunde liegende Videoansicht (z. B.
SurfaceView
) passend zu seinem ElternteilBaseVideoView
(FrameLayout
). Dabei sind mehrere Dinge zu beachten:-
Sie müssen auf die hören
VIDEO_SIZE_KNOWN
Ereignis beim Aufrufen und Verlassen des Vollbildmodus und beim Drehen des Geräts. - Sie müssen entscheiden, wann Ihre Ansicht für die oben genannten Bedingungen aktualisiert werden soll.
Ein Szenario könnte sein, dass Sie die
BaseVideoView layout_height
zu280dp
und dann die Größe ändernSurfaceView
passen280dp
. Das Seitenverhältnis wird geringfügig geändert. Wenn ein Benutzer im Hochformat zum Vollbildmodus wechselt undupdateVideoViewMatchToParent()
heißt, dann sind beideBaseVideoView
undSurfaceView
füllt das Display des Geräts aus und das Video-Seitenverhältnis wird leicht geändert.public void updateVideoViewMatchToParent(@NonNull BaseVideoView brightcoveVideoView) { RenderView renderView = brightcoveVideoView.getRenderView(); if (renderView != null) { renderView.setVideoSize(brightcoveVideoView.getWidth(), brightcoveVideoView.getHeight()); } }
Um das Doppeltippen zu erkennen, können Sie die GestureDetector.OnDoubleTapListener Schnittstelle. Einzelheiten finden Sie im Häufige Gesten erkennen dokumentieren.
-
Sie müssen auf die hören
Wenn Sie das Video strecken möchten, ohne das Seitenverhältnis zu berücksichtigen (ohne das Video zu beschneiden), können Sie Folgendes versuchen:
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);
}
});
Beachten Sie, dass die angezeigten Werte von der Ausrichtung des Geräts beeinflusst werden. Um das Video sowohl im Hoch- als auch im Querformat zu dehnen, müssen Sie Folgendes tun:
-
Folgendes überschreiben
Activity
:public void onConfigurationChanged(Configuration configuration)
- Setzen Sie die Videogröße zurück.