💬

【Android】ExoPlayerを使用して動画を再生する

2024/05/06に公開

はじめに

この記事では、AndroidでExoPlayerを使用して動画を再生するためのステップバイステップガイドを提供します。ExoPlayerはAndroidで広く使用されているメディアプレーヤーライブラリで、多くのカスタマイズオプションと広範なフォーマットサポートを備えています。

https://developer.android.com/media/media3/exoplayer?hl=ja

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を使用したアプリケーションでの動画再生において、動画の特定のポイントへのシーク操作や動画の再生準備完了後の自動再生設定は非常に重要です。これらの機能を適切に管理することで、ユーザーにより良いメディア体験を提供できます。ここでは、ExoPlayerseekToメソッドとplayWhenReadyプロパティについて、その使用方法を詳しく解説します。

playWhenReadyプロパティ

playWhenReadyExoPlayerのプロパティで、この値が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