BrightcoveVideoView
Android用ネイティブSDKを使用する場合。概要
開発者は、ビデオビューでのビデオの表示方法のデフォルトの動作を変更できます。内側のビデオビュー ( SurfaceView
/ TextureView
) のサイズを変更/ストレッチして () BrightcoveVideoView
を塗りつぶすことができます。FrameLayout
これを行うには、EventType.VIDEO_SIZE_KNOWN
イベントをリッスンし、いくつかの数学を行い、表示値を設定します。
ビデオ表示を変更するには、次の 2 つの方法があります。
コンテナのサイズを変更する
ポートレートモードでデバイス画面全体に合うようにビデオ表示を設定するアプリを開発することもできます。これを行うには、コンテナ ( BaseVideoView
/ FrameLayout
) のサイズを変更します。
コンテナプロパティを設定する
動画の周囲に黒い余白が表示される場合は、BrightcoveVideoView
layout-height
。
- XML レイアウトファイルを開きます。
BrightcoveVideoView layout-height
をに設定しますwrap_content
。- 上記の注で説明したように、最初のちらつきが発生することがあります。
ビデオビューのサイズを設定する
ビデオビューを制御するもう 1 つの方法は、プログラムを使用してサイズを設定することです。
- 最初のちらつきを最小限に抑えるには、
layout_height
を特定の値(280dp など)に設定してみてください。目標は、設定された高さが計算された高さに近づくことです。 EventType.VIDEO_SIZE_KNOWN
イベントを聞いて。Event.VIDEO_WIDTH
とを取得Event.VIDEO_HEIGHT
- これらの値を使用して、アスペクト比を決定します。
- 縦横比を使用して、ディスプレイの幅と高さを計算します。
このソリューションは次のようになります。
//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
)。
-
デバイスのディスプレイのサイズに合わせて幅と高さをに設定した場合、画面全体に合わせてビデオのサイズが変更されます。
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); } });
-
以下のコードは、その親(
SurfaceView
)と一致するように基になるビデオビューBaseVideoView
(例えばFrameLayout
)を更新します。覚えておいておくべきことはいくつかあります。-
フルスクリーンに出入りするとき、およびデバイスを回転するときは、
VIDEO_SIZE_KNOWN
イベントを聴く必要があります。 - 上記の条件で、ビューを更新するタイミングを決定する必要があります。
1つのシナリオは、
BaseVideoView layout_height
に280dp
次に、サイズを変更します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);
}
});
取得する値は、デバイスの向きによって影響を受けることに注意してください。縦向きと横の両方のビデオを引き伸ばすには、次の操作を実行する必要があります。
-
Activity
次の項目を上書きします。public void onConfigurationChanged(Configuration configuration)
- ビデオサイズをリセットします。