【Android】ExoPlayerを使用して動画を再生する
はじめに
この記事では、AndroidでExoPlayer
を使用して動画を再生するためのステップバイステップガイドを提供します。ExoPlayer
はAndroidで広く使用されているメディアプレーヤーライブラリで、多くのカスタマイズオプションと広範なフォーマットサポートを備えています。
ExoPlayer
のセットアップ
プロジェクトにExoPlayer
を導入するには、まず以下の依存関係をbuild.gradle
ファイルに追加します。
dependencies {
implementation 'com.google.android.exoplayer:exoplayer:2.X.X'
}
メディアプレーヤーの初期化
PlayerActivity
クラスでプレーヤーを初期化する部分のサンプルコードです。ActivityPlayerBinding
を利用してレイアウトをセットし、ExoPlayer
インスタンスを生成してビデオをロードします。
class PlayerActivity : AppCompatActivity() {
private val viewBinding by lazy(LazyThreadSafetyMode.NONE) {
ActivityPlayerBinding.inflate(layoutInflater)
}
private var player: Player? = null
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
setContentView(viewBinding.root)
}
private fun initializePlayer() {
player = ExoPlayer.Builder(this).build().also { exoPlayer ->
viewBinding.videoView.player = exoPlayer
val mediaItem = MediaItem.fromUri(getString(R.string.media_url_mp4))
exoPlayer.setMediaItems(listOf(mediaItem), 0, 0L)
exoPlayer.prepare()
}
}
}
ビデオの再生とライフサイクル管理
アプリケーションのライフサイクルに合わせて、ビデオの再生と停止を制御します。以下のメソッドで、アクティビティの状態に応じてプレーヤーを初期化および解放します。
public override fun onStart() {
super.onStart()
if (Build.VERSION.SDK_INT > 23) {
initializePlayer()
}
}
public override fun onStop() {
super.onStop()
if (Build.VERSION.SDK_INT > 23) {
releasePlayer()
}
}
UIのカスタマイズ
動画再生中のユーザーインターフェースをカスタマイズし、システムUIを非表示にする方法です。
@SuppressLint("InlinedApi")
private fun hideSystemUi() {
WindowCompat.setDecorFitsSystemWindows(window, false)
WindowInsetsControllerCompat(window, viewBinding.videoView).let { controller ->
controller.hide(WindowInsetsCompat.Type.systemBars())
controller.systemBarsBehavior =
WindowInsetsControllerCompat.BEHAVIOR_SHOW_TRANSIENT_BARS_BY_SWIPE
}
}
ExoPlayer
を使用したアプリケーションでの動画再生において、動画の特定のポイントへのシーク操作や動画の再生準備完了後の自動再生設定は非常に重要です。これらの機能を適切に管理することで、ユーザーにより良いメディア体験を提供できます。ここでは、ExoPlayer
のseekTo
メソッドとplayWhenReady
プロパティについて、その使用方法を詳しく解説します。
playWhenReady
プロパティ
playWhenReady
はExoPlayer
のプロパティで、この値がtrue
に設定されていると、プレーヤーが再生準備ができ次第に自動的に再生を開始します。アプリがビデオコンテンツを即座に再生したい場合や、ユーザーが明示的に再生を再開することを望む場面で役立ちます。
サンプルコードにおいては、以下のようにプレーヤーの初期化時にplayWhenReady
を設定することができます:
private fun initializePlayer() {
player = ExoPlayer.Builder(this).build().also { exoPlayer ->
viewBinding.videoView.player = exoPlayer
val mediaItem = MediaItem.fromUri(getString(R.string.media_url_mp4))
exoPlayer.setMediaItems(listOf(mediaItem), 0, playbackPosition)
exoPlayer.playWhenReady = playWhenReady
exoPlayer.prepare()
}
}
seekTo
メソッド
seekTo
メソッドを使用すると、指定された時間位置(ミリ秒単位)へプレーヤーをシークすることができます。このメソッドは、ユーザーがビデオの特定のシーンに直接ジャンプしたい場合や、ビデオを特定の位置から再生再開したい場合に非常に便利です。
例えば、ビデオを15000ミリ秒(15秒)の位置から再生したい場合は、以下のようにseekTo
を呼び出します:
player?.seekTo(15000)
アクティビティが再開されたときや、ユーザーがビデオを特定の位置から見たいときにこのメソッドを呼び出すことができます。
まとめ
ExoPlayer
を使用することで、Androidアプリケーションで高品質な動画再生機能を簡単に実装できます。このガイドが、あなたのアプリ開発における動画再生の実装に役立つことを願っています。
Discussion