안드로이드 용 네이티브 SDK로 비디오보기 크기 조정

이 항목에서는 내부 비디오 뷰의 크기를 조정 / 확장하여BrightcoveVideoView Android 용 Native SDK로 작업 할 때.

개요

개발자는 비디오가 비디오보기에 표시되는 방식에 대한 기본 동작을 변경할 수 있습니다. 내부 비디오보기 ( SurfaceView / TextureView ) 채우기 위해BrightcoveVideoView ( FrameLayout ). 이렇게하려면EventType.VIDEO_SIZE_KNOWN이벤트, 약간의 수학을 수행하고 디스플레이 값을 설정합니다.

비디오보기를 변경하는 방법에는 두 가지가 있습니다.

컨테이너 크기 조정

세로 모드에서 전체 장치 화면에 맞게 비디오보기를 설정하는 앱을 개발할 수 있습니다. 컨테이너 ( BaseVideoView / FrameLayout ).

컨테이너 속성 설정

동영상 주위에 검은 색 여백이 보이면BrightcoveVideoViewlayout-height .

  1. XML 열기형세파일.
  2. 설정BrightcoveVideoView layout-height ...에wrap_content .
  3. 위의 참고 사항에 설명 된대로 초기 깜박임이 발생할 수 있습니다.

비디오보기 크기 설정

비디오보기를 제어하는 또 다른 방법은 프로그래밍 방식으로 크기를 설정하는 것입니다.

  1. 초기 깜박임을 최소화하려면layout_height특정 값 (예 : 280dp)으로. 목표는 설정된 높이가 계산 된 높이에 가까워지는 것입니다.
  2. 들어 봐EventType.VIDEO_SIZE_KNOWN행사.
  3. 얻기Event.VIDEO_WIDTHEvent.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));
  }
});

보기를 추가 할 때 레이아웃 매개 변수를 재정의해야합니다. 자세한 내용은기계적 인조 인간: 보기 추가 / 레이아웃 관리문서.

비디오 크기 조정

화면을 채우는 두 번 탭을 구현할 수 있습니다. 이것은 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전체 화면 진입 및 종료 및 장치 회전시 이벤트.
    • 위 조건에 대해보기를 업데이트 할시기를 결정해야합니다.

    한 가지 시나리오는BaseVideoView layout_height ...에280dp그런 다음SurfaceView일치시키다280dp . 종횡비가 약간 수정됩니다. 사용자가 세로 모드에서 전체 화면으로 이동하고updateVideoViewMatchToParent()호출되면 둘 다BaseVideoViewSurfaceView장치의 디스플레이를 채우고 비디오 종횡비가 약간 수정됩니다.

    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. 비디오 크기를 재설정하십시오.