再生コントロールをアプリに追加する

メディアを再生するアプリには、メディアの表示と非表示のためのユーザー インターフェース コンポーネントが必要です。 再生をコントロールします。Media3 ライブラリには、 多くの UI コンポーネントに対応していますUI モジュールに依存するには、次のコードを追加します。 :

Kotlin

implementation("androidx.media3:media3-ui:1.4.0")

Groovy

implementation "androidx.media3:media3-ui:1.4.0"

最も重要なコンポーネントは、メディア再生のビューである 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();

サーフェスのタイプを選択する

PlayerViewsurface_type 属性を使用すると、サーフェスのタイプを設定できます。 使用されます。値 spherical_gl_surface_view( は、球面動画の再生用の特殊な値です)。 video_decoder_gl_surface_view(拡張機能を使用した動画レンダリング用) レンダラなど)を使用する場合、指定できる値は surface_viewtexture_viewnone です。条件 このビューは音声再生専用であるため、追加の手順が不要な場合は 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 コントロールがあり、コマンドを ActivitydispatchKeyEvent(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 }
)

ドローアブルのオーバーライド

PlayerViewPlayerControlView を使用して再生を表示します。 進行状況バーがあります。PlayerControlView で使用されるドローアブルは、 アプリで定義した同じ名前のドローアブルでオーバーライドできます。詳しくは、 コントロール ドローアブルのリストについては、PlayerControlView Javadoc をご覧ください。 オーバーライドできます

さらなるカスタマイズ

上記以外のカスタマイズが必要な場合は、そのアプリが デベロッパーは、用意されているものを使用するのではなく、独自の UI コンポーネントを実装します。 Media3 の UI モジュールで定義できます。