ご利用にあたって

単純なユースケースの場合、ExoPlayer の使用を開始するには、以下の実装を行います。 次のとおりです。

  1. ExoPlayer を依存関係としてプロジェクトに追加します。
  2. ExoPlayer インスタンスを作成します。
  3. プレーヤーをビューにアタッチします(動画出力とユーザー入力用)。
  4. プレイする MediaItem をプレーヤーに用意します。
  5. 完了したらプレーヤーを放します。

以下では、これらの手順について詳しく説明します。詳細な例については、 メインのデモアプリ内の PlayerActivity

ExoPlayer を依存関係として追加する

ExoPlayer モジュールを追加する

AndroidX Media3 の使用を開始する最も簡単な方法は Gradle を追加すること アプリの build.gradle ファイルにある、必要なライブラリの依存関係 説明します。

たとえば、DASH 再生サポートと UI コンポーネントを ExoPlayer に任せることができます。 次のように、モジュールへの依存関係を追加できます。

Kotlin

implementation("androidx.media3:media3-exoplayer:1.4.1")
implementation("androidx.media3:media3-exoplayer-dash:1.4.1")
implementation("androidx.media3:media3-ui:1.4.1")

Groovy

implementation "androidx.media3:media3-exoplayer:1.4.1"
implementation "androidx.media3:media3-exoplayer-dash:1.4.1"
implementation "androidx.media3:media3-ui:1.4.1"

ここで、1.4.1 が推奨バージョンです(最新バージョンは リリースノートをご覧ください)。すべてのモジュールが同じバージョンであること。

AndroidX Media3 には、 外部ライブラリを使用して追加機能を提供します。一部の広告には、 Maven リポジトリから利用できますが、その他は手動でビルドする必要があります。 詳細については、ライブラリ ディレクトリを参照して各 README をご覧ください。

利用可能なライブラリ モジュールについて詳しくは、 Google Maven AndroidX Media のページ

Java 8 のサポートを有効にする

まだ有効になっていない場合は、すべての build.gradle で Java 8 サポートを有効にする必要があります ExoPlayer に依存するファイルには、android セクションに次の行を追加します。

compileOptions {
  targetCompatibility JavaVersion.VERSION_1_8
}

Multidex を有効にする

Gradle の minSdkVersion が 20 以下の場合は、 順番に Multidex を有効にする ビルドエラーを防止できます。

プレーヤーを作成する

ExoPlayer.Builder を使用して ExoPlayer インスタンスを作成できます。これにより、 カスタマイズオプションが用意されています。次のコードは、Cloud Functions の インスタンスを作成します。

Kotlin

val player = ExoPlayer.Builder(context).build()

Java

ExoPlayer player = new ExoPlayer.Builder(context).build();

スレッド化に関する注意事項

ExoPlayer インスタンスには、単一のアプリスレッドからアクセスする必要があります。対象: をアプリケーションのメインスレッドにする必要があります。 ExoPlayer の UI コンポーネントを使用する場合は、アプリのメインスレッドが必要 または IMA 拡張機能を 使用する必要があります

ExoPlayer インスタンスにアクセスするスレッドは、明示的に プレーヤーの作成時に Looper を渡して指定する必要があります。Looper がない場合、 指定されている場合、プレーヤーが作成されるスレッドの Looper が そのスレッドに Looper がない場合は、そのスレッドの Looper メインスレッドが使用されます。いずれの場合も、送信元のスレッドの Looper プレーヤーはどのリソースにアクセスする必要があるかを、 Player.getApplicationLooper

ExoPlayer のスレッドモデルについて詳しくは、 「スレッドモデル」セクション(ExoPlayer Javadoc)をご覧ください

プレーヤーをビューにアタッチする

ExoPlayer ライブラリには、メディア用に事前に構築されたさまざまな UI コンポーネントが用意されている おすすめします。これには、値をカプセル化する PlayerView が含まれます。 動画が追加された PlayerControlViewSubtitleViewSurface 表示されます。PlayerView はアプリのレイアウト xml に含めることができます。 たとえば、プレーヤーをビューにバインドするには、次のようにします。

Kotlin

// Bind the player to the view.
playerView.player = player

Java

// Bind the player to the view.
playerView.setPlayer(player);

また、PlayerControlView をスタンドアロン コンポーネントとして使用することもできます。 音声のみのユースケースに有用です。

ExoPlayer のビルド済み UI コンポーネントの使用は任意です。動画アプリの場合 (ターゲット SurfaceViewTextureViewSurfaceHolder または Surface は、ExoPlayer の setVideoSurfaceViewsetVideoTextureViewsetVideoSurfaceHoldersetVideoSurface メソッドを使用します。ExoPlayer の addTextOutput メソッドは、 を使用して、再生中にレンダリングする必要がある字幕を受け取ります。

プレイリストにデータを入力し、プレーヤーを準備する

ExoPlayer では、すべてのメディアが MediaItem で表現されます。Google Pixel を 対応する MediaItem を作成し、それを プレーヤーを作成し、play を呼び出して再生を開始します。

Kotlin

// Build the media item.
val mediaItem = MediaItem.fromUri(videoUri)
// Set the media item to be played.
player.setMediaItem(mediaItem)
// Prepare the player.
player.prepare()
// Start the playback.
player.play()

Java

// Build the media item.
MediaItem mediaItem = MediaItem.fromUri(videoUri);
// Set the media item to be played.
player.setMediaItem(mediaItem);
// Prepare the player.
player.prepare();
// Start the playback.
player.play();

ExoPlayer はプレイリストを直接サポートしているため、プレーヤーを準備して、 複数のメディア アイテムを順番に再生する場合:

Kotlin

// Build the media items.
val firstItem = MediaItem.fromUri(firstVideoUri)
val secondItem = MediaItem.fromUri(secondVideoUri)
// Add the media items to be played.
player.addMediaItem(firstItem)
player.addMediaItem(secondItem)
// Prepare the player.
player.prepare()
// Start the playback.
player.play()

Java

// Build the media items.
MediaItem firstItem = MediaItem.fromUri(firstVideoUri);
MediaItem secondItem = MediaItem.fromUri(secondVideoUri);
// Add the media items to be played.
player.addMediaItem(firstItem);
player.addMediaItem(secondItem);
// Prepare the player.
player.prepare();
// Start the playback.
player.play();

再生中に再生リストを更新できるため、 再度開きます。再生リストの入力と操作について詳しくは、 再生リストページ。利用可能なさまざまなオプションの詳細 クリッピングや字幕ファイルの添付などのメディア アイテムを メディア アイテム ページ

プレーヤーを操作する

プレーヤーを準備したら、メソッドを呼び出して再生を制御できる 発生します。よく使用される方法をいくつか紹介します。

  • playpause が再生の開始と一時停止を行います。
  • seekTo: メディア内のシークを許可します。
  • hasPrevioushasNextpreviousnext は、 おすすめします。
  • setRepeatMode は、メディアをループするかどうかとその方法を制御します。
  • setShuffleModeEnabled は再生リストのシャッフルを制御します。
  • setPlaybackParameters: 再生速度と音声のピッチを調整します。

プレーヤーが PlayerView または PlayerControlView にバインドされている場合、 ユーザーがこれらのコンポーネントを操作すると、 呼び出すプレーヤーを指定します。

プレーヤーを解放する

不要になったらプレーヤーを解放し、解放するように 他のアプリケーションで使用する動画デコーダなどの限られたリソースを消費します。この これを行うには、ExoPlayer.release を呼び出します。