Größenänderung der Videoansicht mit dem Native SDK für Android

In diesem Thema erfahren Sie, wie Sie die innere Videoansicht verkleinern/dehnen, sodass 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.

  1. Öffnen Sie die XML-Datei Layout Datei.
  2. Stellen Sie die BrightcoveVideoView layout-height zu wrap_content.
  3. 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.

  1. 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.
  2. Hören Sie auf die EventType.VIDEO_SIZE_KNOWN Veranstaltung.
  3. Bekommen das Event.VIDEO_WIDTH und Event.VIDEO_HEIGHT
  4. Bestimmen Sie mit diesen Werten das Seitenverhältnis.
  5. 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).

  1. 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);
      }
    });
    
  2. Der folgende Code aktualisiert die zugrunde liegende Videoansicht (z. B. SurfaceView ) passend zu seinem Elternteil BaseVideoView (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 zu 280dp und dann die Größe ändern SurfaceView passen 280dp. Das Seitenverhältnis wird geringfügig geändert. Wenn ein Benutzer im Hochformat zum Vollbildmodus wechselt und updateVideoViewMatchToParent() heißt, dann sind beide BaseVideoView und SurfaceView 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.

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:

  1. Folgendes überschreiben Activity:

    public void onConfigurationChanged(Configuration configuration)
    
  2. Setzen Sie die Videogröße zurück.