Android 기기에서 재생 속도 설정

이 항목에서는 Android용 Brightcove Native SDK를 사용하여 앱에 가변 속도 재생 기능을 추가하는 방법을 알아봅니다.

서문

일부 앱의 경우 사용자가 비디오를 보는 동안 재생 속도를 변경할 수 있는 기능을 제공할 수 있습니다(예: eLearning 환경). Android용 Native SDK를 사용하여 이 기능을 추가할 수 있습니다.

플레이어 활동 클래스에서 원하는 재생 속도 목록에서 선택하는 대화 상자 메뉴를 만들 수 있습니다.

구현

Android 앱에 가변 속도 재생을 추가하려면 다음 단계를 따르세요.

  1. 먼저 속도를 선택할 수 있는 메뉴를 만듭니다. 여기서는 탭하면 속도 값이 포함된 메뉴가 열리는 를 사용합니다. TextView 다른 메뉴 옵션에는 스피너가 포함됩니다.

    private TextView playbackSpeed;

    그런 다음TextViewActivity레이아웃에 다음을 추가합니다.

    <com.brightcove.player.view.BrightcoveExoPlayerVideoView
       android:id="@+id/brightcove_video_view"
       android:layout_width="match_parent"
       android:layout_height="280dp"
       android:layout_gravity="center_horizontal|top"/>
    
    <LinearLayout
       android:layout_width="match_parent"
       android:layout_height="wrap_content"
       android:orientation="horizontal"
       android:layout_gravity="center_vertical"
       android:layout_below="@id/brightcove_video_view"
       android:padding="20dp">
    
       <TextView
           android:id="@+id/playbackSpeed"
           android:layout_width="match_parent"
           android:layout_height="wrap_content"
           android:gravity="end"
           android:padding="20dp"
           android:text="Change Speed"
           android:textAlignment="textEnd" />
    
    </LinearLayout>
  2. 플레이어에 재생 속도 제어 추가Activity :

    playbackSpeed = (TextView) findViewById(R.id.playbackSpeed);
    playbackSpeed.setVisibility(View.VISIBLE);
  3. 다음에onClick리스너를 설정하십시오TextView .

    playbackSpeed.setOnClickListener(new View.OnClickListener() {
       @Override
       public void onClick(View v) {
           showPlayerSpeedDialog();
       }
    });
    
  4. 플레이어 속도 대화 상자를 표시하는 방법을 추가합니다.

    private void showPlayerSpeedDialog() {
       String[] playerSpeedArrayLabels = {"0.8x", "1.0x", "1.2x", "1.5x", "1.8x", "2.0x"};
    
       PopupMenu popupMenu = new PopupMenu(MainActivity.this, playbackSpeed);
       for (int i = 0; i < playerSpeedArrayLabels.length; i++) {
           popupMenu.getMenu().add(i, i, i, playerSpeedArrayLabels[i]);
       }
       popupMenu.setOnMenuItemClickListener(item -> {
           int id = item.getItemId();
           CharSequence itemTitle = item.getTitle();
           float playbackSpeed = Float.parseFloat(itemTitle.subSequence(0, 3).toString());
           changePlayerSpeed(playbackSpeed, itemTitle.subSequence(0, 3).toString());
           return false;
       });
       popupMenu.show();
    }
    
  5. 플레이어 속도를 메뉴에서 선택한 값으로 변경하는 방법을 추가합니다. 또한 메서드는 선택한 값을TextView다음과 같은 레이블로 설정할 수 있습니다.

    private void changePlayerSpeed(float speed, String speedLabel) {
       // Set playback speed
       ((ExoPlayerVideoDisplayComponent) brightcoveVideoView.getVideoDisplay()).getExoPlayer().setPlaybackParameters(new PlaybackParameters(speed, 1.0f));
       // Set playback speed label
       playbackSpeed.setText("Speed: " + speedLabel + "x");
    }
    

재생 문제 처리

더 높거나 더 낮은 재생 속도를 설정하는 데 문제가 있는 경우 다음을 기준으로 재생 속도 제어 표시 여부를 제한하거나 사용 가능한 속도를 제한하는 것을 고려하십시오.

  • 다음을 사용하는 OS 수준:

    Build.VERSION_CODES.<API_LEVEL>
  • 제조업체 사용: (신뢰성은 보장되지 않음)

    Build.MANUFACTURER
    or
    Build.BRAND
    
  • 다음의 부울 값을 확인하여 하드웨어 프로필(TV 또는 전화/모바일):

    BrightcoveMediaController.checkTvMode(Context context)

제한 사항

ExoPlayer 및 Android용 Brightcove Native SDK를 사용하여 재생 속도를 설정할 수 있지만 지정된 재생 속도 설정이 원활한 보기 및 듣기 경험을 제공한다고 보장하지 않는다는 점에 유의해야 합니다.

테스트 결과 이전 OS 버전 및 저사양 장치가 허용할 수 없는 오디오 및 비디오 품질 저하 없이 처리하기에는 너무 높은 재생 속도를 설정할 수 있는 것으로 나타났습니다.

재생 속도 제어를 구현하려면 다음을 고려하는 것이 좋습니다.

  • 내 애플리케이션이 대상으로 하는 가장 오래된 Android OS 레벨은 무엇입니까?
    • 이전 OS에는 정상보다 높거나 낮은 재생 속도에 대한 적절한 코덱 지원이 없을 수 있습니다.
    • 이전 OS에는 성능 방식으로 비디오 및 오디오 데이터를 처리할 수 없는 이전 칩셋이 있을 수 있습니다.
  • 내 콘텐츠가 DRM으로 보호되나요?
    • 테스트 결과 재생 속도와 관련된 일부 DRM 관련 문제가 밝혀졌으므로 정상 속도보다 높거나 낮은 속도로 플레이할 때 암호 해독 문제가 발생할 가능성을 배제하고 싶지 않습니다.
  • 내 콘텐츠에서 자막 또는 여러 오디오 트랙을 사용합니까?
    • 캡션을 활성화 또는 비활성화하거나 특히 이전 장치 또는 OS 수준에서 캡션 간 전환은 고려해야 할 상황입니다.