単純なユースケースの場合、ExoPlayer
の使用を開始するには、以下の実装を行います。
次のとおりです。
- ExoPlayer を依存関係としてプロジェクトに追加します。
ExoPlayer
インスタンスを作成します。- プレーヤーをビューにアタッチします(動画出力とユーザー入力用)。
- プレイする
MediaItem
をプレーヤーに用意します。 - 完了したらプレーヤーを放します。
以下では、これらの手順について詳しく説明します。詳細な例については、
メインのデモアプリ内の 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
が含まれます。
動画が追加された PlayerControlView
、SubtitleView
、Surface
表示されます。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 コンポーネントの使用は任意です。動画アプリの場合
(ターゲット SurfaceView
、TextureView
、
SurfaceHolder
または Surface
は、ExoPlayer の
setVideoSurfaceView
、setVideoTextureView
、setVideoSurfaceHolder
、
setVideoSurface
メソッドを使用します。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();
再生中に再生リストを更新できるため、 再度開きます。再生リストの入力と操作について詳しくは、 再生リストページ。利用可能なさまざまなオプションの詳細 クリッピングや字幕ファイルの添付などのメディア アイテムを メディア アイテム ページ。
プレーヤーを操作する
プレーヤーを準備したら、メソッドを呼び出して再生を制御できる 発生します。よく使用される方法をいくつか紹介します。
play
とpause
が再生の開始と一時停止を行います。seekTo
: メディア内のシークを許可します。hasPrevious
、hasNext
、previous
、next
は、 おすすめします。setRepeatMode
は、メディアをループするかどうかとその方法を制御します。setShuffleModeEnabled
は再生リストのシャッフルを制御します。setPlaybackParameters
: 再生速度と音声のピッチを調整します。
プレーヤーが PlayerView
または PlayerControlView
にバインドされている場合、
ユーザーがこれらのコンポーネントを操作すると、
呼び出すプレーヤーを指定します。
プレーヤーを解放する
不要になったらプレーヤーを解放し、解放するように
他のアプリケーションで使用する動画デコーダなどの限られたリソースを消費します。この
これを行うには、ExoPlayer.release
を呼び出します。