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));
}
});
보기를 추가 할 때 레이아웃 매개 변수를 재정의해야합니다. 자세한 내용은기계적 인조 인간: 보기 추가 / 레이아웃 관리문서.
비디오 크기 조정
화면을 채우는 두 번 탭을 구현할 수 있습니다. 이것은 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)
- 비디오 크기를 재설정하십시오.