서문
일부 앱의 경우 사용자가 비디오를 보는 동안 재생 속도를 변경할 수 있는 기능을 제공할 수 있습니다(예: eLearning 환경). Android용 Native SDK를 사용하여 이 기능을 추가할 수 있습니다.
플레이어 활동 클래스에서 원하는 재생 속도 목록에서 선택하는 대화 상자 메뉴를 만들 수 있습니다.
구현
Android 앱에 가변 속도 재생을 추가하려면 다음 단계를 따르세요.
-
먼저 속도를 선택할 수 있는 메뉴를 만듭니다. 여기서는 탭하면 속도 값이 포함된 메뉴가 열리는 를 사용합니다.
TextView
다른 메뉴 옵션에는 스피너가 포함됩니다.private TextView playbackSpeed;
그런 다음
TextView
Activity
레이아웃에 다음을 추가합니다.<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>
-
플레이어에 재생 속도 제어 추가
Activity
:playbackSpeed = (TextView) findViewById(R.id.playbackSpeed); playbackSpeed.setVisibility(View.VISIBLE);
-
다음에
onClick
리스너를 설정하십시오TextView
.playbackSpeed.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { showPlayerSpeedDialog(); } });
-
플레이어 속도 대화 상자를 표시하는 방법을 추가합니다.
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(); }
-
플레이어 속도를 메뉴에서 선택한 값으로 변경하는 방법을 추가합니다. 또한 메서드는 선택한 값을
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 수준에서 캡션 간 전환은 고려해야 할 상황입니다.