BrightcoveVideoView
使用適用於Android的Native SDK時。概覽
作為開發人員,您可以更改視頻在視頻視圖中的顯示方式的默認行為。您可以調整/拉伸內部視頻視圖的大小(SurfaceView
/ TextureView
)填寫BrightcoveVideoView
(FrameLayout
)。為此,您可以收聽EventType.VIDEO_SIZE_KNOWN
事件,進行一些數學運算並設置顯示值。
有兩種方法可以更改視頻視圖:
調整容器大小
您可能需要開發一個將視頻視圖設置為適合縱向模式的整個設備屏幕的應用程序。您可以通過調整容器的大小來做到這一點(BaseVideoView
/ FrameLayout
)。
設置容器屬性
如果您發現視頻周圍有黑邊,可以嘗試設置BrightcoveVideoView
layout-height
。
- 打開XML 佈局文件。
- 設置
BrightcoveVideoView layout-height
至wrap_content
。 - 您可能會遇到上述說明中所述的初始閃爍。
設定影片檢視大小
控制視頻視圖的另一種方法是通過編程設置大小。
- 為了最大程度地減少初始閃爍,請嘗試設置
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
進入和退出全屏以及旋轉設備時發生事件。 - 您需要決定何時針對上述條件更新視圖。
一種情況是您將
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)
- 重置視頻大小。