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-heightzuwrap_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_heightauf 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_KNOWNVeranstaltung.
- Bekommen das Event.VIDEO_WIDTHundEvent.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 renderViewUm 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_KNOWNEreignis 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_heightzu280dpund dann die Größe ändernSurfaceViewpassen280dp. Das Seitenverhältnis wird geringfügig geändert. Wenn ein Benutzer im Hochformat zum Vollbildmodus wechselt undupdateVideoViewMatchToParent()heißt, dann sind beideBaseVideoViewundSurfaceViewfü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.
