はじめに
一部のアプリでは、ユーザーがビデオを見ているときに再生速度を変更できる機能を提供したい場合があります(eラーニング環境など)。この機能は、Android用のネイティブ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とBrightcoveNative SDK for Androidを使用して再生速度を設定することは可能ですが、特定の再生速度を設定してもシームレスな視聴体験が提供されるとは限らないことに注意してください。
テストの結果、オーディオとビデオの品質を許容できないほど低下させることなく、古いOSバージョンや低スペックのデバイスでは処理できないほど高速な再生速度を設定できることが明らかになりました。
再生速度制御を実装する場合は、次のことを考慮することをお勧めします。
- 私のアプリケーションが対象としている最も古いAndroidOSレベルは何ですか?
- 古いOSは、通常よりも速いまたは遅い再生速度に対して適切なコーデックをサポートしていない可能性があります
- 古いOSには、ビデオとオーディオのデータをパフォーマンスの高い方法で処理できない古いチップセットが搭載されている場合があります。
- 私のコンテンツはDRMで保護されていますか?
- テストの結果、再生速度に関するDRM関連の問題がいくつか明らかになったため、通常よりも高速または低速で再生する場合の復号化の問題の可能性を排除したくありません。
- 私のコンテンツはクローズドキャプションまたは複数のオーディオトラックを使用していますか?
- 特に古いデバイスやOSレベルでは、キャプションを有効または無効にしたり、キャプションを切り替えたりすることを検討する必要があります。