サポート問い合わせ先| システムステータス
ページコンテンツ

    Android用ネイティブSDKを使用したビデオビューのサイズ変更

    このトピックでは、内側のビデオビューをサイズ変更/拡大して、BrightcoveVideoView Android用ネイティブSDKを使用する場合。

    概要

    開発者は、ビデオビューでのビデオの表示方法のデフォルトの動作を変更できます。内側のビデオビュー ( SurfaceView / TextureView ) のサイズを変更/ストレッチして () BrightcoveVideoViewを塗りつぶすことができます。FrameLayoutこれを行うには、EventType.VIDEO_SIZE_KNOWNイベントをリッスンし、いくつかの数学を行い、表示値を設定します。

    ビデオ表示を変更するには、次の 2 つの方法があります。

    コンテナのサイズを変更する

    ポートレートモードでデバイス画面全体に合うようにビデオ表示を設定するアプリを開発することもできます。これを行うには、コンテナ ( BaseVideoView / FrameLayout ) のサイズを変更します。

    コンテナプロパティを設定する

    動画の周囲に黒い余白が表示される場合は、BrightcoveVideoViewlayout-height

    1. XML レイアウトファイルを開きます
    2. BrightcoveVideoView layout-heightをに設定しますwrap_content
    3. 上記の注で説明したように、最初のちらつきが発生することがあります。

    ビデオビューのサイズを設定する

    ビデオビューを制御するもう 1 つの方法は、プログラムを使用してサイズを設定することです。

    1. 最初のちらつきを最小限に抑えるには、layout_heightを特定の値(280dp など)に設定してみてください。目標は、設定された高さが計算された高さに近づくことです。
    2. EventType.VIDEO_SIZE_KNOWNイベントを聞いて。
    3. Event.VIDEO_WIDTHとを取得Event.VIDEO_HEIGHT
    4. これらの値を使用して、アスペクト比を決定します。
    5. 縦横比を使用して、ディスプレイの幅と高さを計算します。

    このソリューションは次のようになります。

    //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));
      }
    });
    

    ビューを追加するときは、レイアウトパラメータを上書きする必要があります。詳細については、 Androidを参照してください:ビュー/管理レイアウトドキュメントを追加します

    ビデオのサイズを変更する

    画面いっぱいにダブルタップを実装することもできます。これは、16:9 のビデオを取り、18:9 または 19:9 デバイスで画面いっぱいに表示されます。

    これは、実際のビデオのサイズを変更することによって行うことができます(SurfaceView)。

    1. デバイスのディスプレイのサイズに合わせて幅と高さをに設定した場合、画面全体に合わせてビデオのサイズが変更されます。renderView

      //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. 以下のコードは、その親(SurfaceView)と一致するように基になるビデオビューBaseVideoView(例えばFrameLayout)を更新します。覚えておいておくべきことはいくつかあります。

      • フルスクリーンに出入りするとき、およびデバイスを回転するときは、VIDEO_SIZE_KNOWNイベントを聴く必要があります。
      • 上記の条件で、ビューを更新するタイミングを決定する必要があります。

      1つのシナリオは、BaseVideoView layout_height280dp次に、サイズを変更しますSurfaceView合わせる280dp。縦横比はわずかに変更されます。ユーザーがポートレートモードで全画面表示になり、updateVideoViewMatchToParent()が呼び出されたら、両方BaseVideoViewそしてSurfaceViewデバイスのディスプレイがいっぱいになり、ビデオのアスペクト比がわずかに変更されます。

      public void updateVideoViewMatchToParent(@NonNull BaseVideoView brightcoveVideoView) {
        RenderView renderView = brightcoveVideoView.getRenderView();
        if (renderView != null) {
            renderView.setVideoSize(brightcoveVideoView.getWidth(), brightcoveVideoView.getHeight());
        }
      }
      

      ダブルタップを検出するには、 GestureDetector.ondoubletapListener インターフェイスを使用できます。詳細については、一般的なジェスチャーを検出するドキュメントを参照してください

    縦横比を考慮せずに(ビデオをトリミングせずに)ビデオをストレッチする場合は、これを試すことができます:

    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);
      }
    });
    

    取得する値は、デバイスの向きによって影響を受けることに注意してください。縦向きと横の両方のビデオを引き伸ばすには、次の操作を実行する必要があります。

    1. Activity次の項目を上書きします。

      public void onConfigurationChanged(Configuration configuration)
      
    2. ビデオサイズをリセットします。

    ページの最終更新日04 Oct 2021