メディアを再生するアプリには、メディアの表示と非表示のためのユーザー インターフェース コンポーネントが必要です。 再生をコントロールします。Media3 ライブラリには、 多くの UI コンポーネントに対応していますUI モジュールに依存するには、次のコードを追加します。 :
Kotlin
implementation("androidx.media3:media3-ui:1.4.1")
Groovy
implementation "androidx.media3:media3-ui:1.4.1"
最も重要なコンポーネントは、メディア再生のビューである PlayerView
です。
PlayerView
: 再生中に動画、画像、字幕、アルバムアートを表示します。
再生コントロールを設定できます
PlayerView
には setPlayer
メソッドがあり、
(null
など)のプレーヤー インスタンスを渡しています。
プレーヤー ビュー
PlayerView
は、動画、画像、音声の再生の両方に使用できます。レンダリング
動画再生の場合は動画と字幕、画像再生の場合はビットマップ
音声ファイルにメタデータとして含まれるアートワークを表示できます。含めても
レイアウトファイルに記述しますたとえば、PlayerView
次の XML に含めることができます。
<androidx.media3.ui.PlayerView
android:id="@+id/player_view"
android:layout_width="match_parent"
android:layout_height="match_parent"
app:show_buffering="when_playing"
app:show_shuffle_button="true"/>
上記のスニペットは、PlayerView
に複数のルールがあることを示しています。
属性です。これらの属性を使用すると、ビューの動作をカスタマイズできます。たとえば、
視覚的にアピールできますこれらの属性のほとんどには、対応するセッターがあります。
メソッドを使って、実行時にビューをカスタマイズできます。「
PlayerView
Javadoc では、これらの属性とセッター メソッドのリストを
詳しく見ていきます。
ビューをレイアウト ファイルで宣言したら、そのビューを
アクティビティの onCreate
メソッド:
Kotlin
override fun onCreate(savedInstanceState: Bundle?) { super.onCreate(savedInstanceState) // ... playerView = findViewById(R.id.player_view) }
Java
@Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); // ... playerView = findViewById(R.id.player_view); }
プレーヤーの初期化が完了したら、
setPlayer
:
Kotlin
// Instantiate the player. val player = ExoPlayer.Builder(context).build() // Attach player to the view. playerView.player = player // Set the media item to be played. player.setMediaItem(mediaItem) // Prepare the player. player.prepare()
Java
// Instantiate the player. player = new ExoPlayer.Builder(context).build(); // Attach player to the view. playerView.setPlayer(player); // Set the media item to be played. player.setMediaItem(mediaItem); // Prepare the player. player.prepare();
サーフェスのタイプを選択する
PlayerView
の surface_type
属性を使用すると、サーフェスのタイプを設定できます。
使用されます。値 spherical_gl_surface_view
(
は、球面動画の再生用の特殊な値です)。
video_decoder_gl_surface_view
(拡張機能を使用した動画レンダリング用)
レンダラなど)を使用する場合、指定できる値は surface_view
、texture_view
、none
です。条件
このビューは音声再生専用であるため、追加の手順が不要な場合は none
を使用する必要があります。
費用がかかる可能性があるためです
通常の動画再生用のビューの場合、surface_view
または texture_view
使用します。SurfaceView
には TextureView
よりも多くのメリットがあります
動画再生:
- 大幅に消費電力を低下 消費する できます。
- フレーム時間の精度が向上し、動画の再生がスムーズになります。
- 対応デバイスでの高画質 HDR 動画出力のサポート。
- DRM 保護で保護されたコンテンツの再生時のセキュアな出力をサポートします。
- 動画コンテンツをディスプレイのフル解像度でレンダリングする機能 UI レイヤをアップスケールする Android TV デバイス。
そのため、可能であれば TextureView
よりも SurfaceView
を優先する必要があります。
TextureView
は、SurfaceView
がニーズを満たさない場合にのみ使用してください。1 本
例: 動画サーフェスのスムーズなアニメーションやスクロールが必要な場合
Android 7.0(API レベル 24)より前のバージョンにアップグレードする必要があります。対象
この場合、SDK_INT
がより小さい場合にのみ TextureView
を使用することをおすすめします。
24(Android 7.0)よりも高く、それ以外は SurfaceView
です。
Android TV の D-pad ナビゲーション
Android TV のリモコンには D-pad コントロールがあり、コマンドを
Activity
の dispatchKeyEvent(KeyEvent)
にキーイベントとして到着します。これらの
プレーヤー ビューに委任する必要があります。
Kotlin
override fun dispatchKeyEvent(event: KeyEvent?): Boolean{ return playerView.dispatchKeyEvent(event!!) || super.dispatchKeyEvent(event) }
Java
@Override public boolean dispatchKeyEvent(KeyEvent event) { return playerView.dispatchKeyEvent(event) || super.dispatchKeyEvent(event); }
プレーヤー ビューのフォーカスのリクエストは再生の操作に重要
広告をスキップできます。onCreate
にフォーカスをリクエストすることを検討してください。
Activity
:
Kotlin
override fun onCreate(savedInstanceState: Bundle?) { super.onCreate(savedInstanceState) // ... playerView.requestFocus() // ... }
Java
@Override public void onCreate(@Nullable Bundle savedInstanceState) { super.onCreate(savedInstanceState); // ... playerView.requestFocus(); // ... }
Android TV で Compose を使用している場合は、AndroidView
を
フォーカス可能な状態になり、イベントをデリゲートするには、修飾子パラメータを
適切に AndroidView
する必要があります。
AndroidView(
modifier = modifier
.focusable()
.onKeyEvent { playerView.dispatchKeyEvent(it.nativeKeyEvent) },
factory = { playerView }
)
ドローアブルのオーバーライド
PlayerView
は PlayerControlView
を使用して再生を表示します。
進行状況バーがあります。PlayerControlView
で使用されるドローアブルは、
アプリで定義した同じ名前のドローアブルでオーバーライドできます。詳しくは、
コントロール ドローアブルのリストについては、PlayerControlView
Javadoc をご覧ください。
オーバーライドできます
さらなるカスタマイズ
上記以外のカスタマイズが必要な場合は、そのアプリが デベロッパーは、用意されているものを使用するのではなく、独自の UI コンポーネントを実装します。 Media3 の UI モジュールで定義できます。