<?xml version="1.0" encoding="UTF-8"?><rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	>

<channel>
	<title>Jetpack</title>
	<atom:link href="https://techgrowup.net/tag/jetpack/feed/" rel="self" type="application/rss+xml" />
	<link>https://techgrowup.net</link>
	<description>エンジニアを強くする</description>
	<lastBuildDate>Mon, 03 Jan 2022 13:34:37 +0000</lastBuildDate>
	<language>ja</language>
	<sy:updatePeriod>
	hourly	</sy:updatePeriod>
	<sy:updateFrequency>
	1	</sy:updateFrequency>
	<generator>https://wordpress.org/?v=6.9.4</generator>

<image>
	<url>https://techgrowup.net/wp-content/uploads/2021/05/hp-icon-150x150.png</url>
	<title>Jetpack</title>
	<link>https://techgrowup.net</link>
	<width>32</width>
	<height>32</height>
</image> 
	<item>
		<title>【Androidアプリ開発】JetpackライブラリMedia3で動画をローカル再生する</title>
		<link>https://techgrowup.net/android-jetpack-media3/</link>
					<comments>https://techgrowup.net/android-jetpack-media3/?noamp=mobile#respond</comments>
		
		<dc:creator><![CDATA[techgrowup]]></dc:creator>
		<pubDate>Mon, 03 Jan 2022 13:34:37 +0000</pubDate>
				<category><![CDATA[プログラミング]]></category>
		<category><![CDATA[Android]]></category>
		<category><![CDATA[Androidアプリ開発]]></category>
		<category><![CDATA[Jetpack]]></category>
		<category><![CDATA[Kotlin]]></category>
		<category><![CDATA[Media3]]></category>
		<guid isPermaLink="false">https://techgrowup.net/?p=1444</guid>

					<description><![CDATA[Media3について 　Media3はJetpackライブラリの１つで、2021年10月27日にバージョン1.0.0-alpha01が公開されています。主な用途としてはメディア（動画、配信）周りのサポートをしてくれるライ [&#8230;]]]></description>
										<content:encoded><![CDATA[
<h2 class="wp-block-heading">Media3について</h2>



<p>　<a rel="noopener" target="_blank" href="https://developer.android.com/jetpack/androidx/releases/media3">Media3<span class="fa fa-external-link external-icon anchor-icon"></span></a>はJetpackライブラリの１つで、2021年10月27日にバージョン1.0.0-alpha01が公開されています。主な用途としてはメディア（動画、配信）周りのサポートをしてくれるライブラリで、元々<a rel="noopener" target="_blank" href="https://github.com/google/ExoPlayer">ExoPlayer<span class="fa fa-external-link external-icon anchor-icon"></span></a>というAndroidで利用されているライブラリがありましたが、それを元に作成されたようです。<br>　現状はMedia3とExoPlayerは別のレポジトリとして開発が行われ、しばらくは並行して行っていくようですが、将来的にはMedia3に置き換わっていくように記載されていました。</p>



<h2 class="wp-block-heading">ローカルファイルの再生</h2>



<p>　今回はアプリ内にあるmp4ファイルを再生する簡単なアプリを作ってみます。Media3はExoPlayerと同様にメディアセッションの管理やDASH、HLSのサポートやエラー処理など幅広い機能がありますが、それらを実装するとソースコードが増えてしまいますので、最低限の実装を記載しつつ必要であればリファレンスなどを参考にしながら実装してみてください。</p>



<p>　まずライブラリをbuild.gradle(app)に足します。以下は最低限のみ記載していますが、他にも多くの<a rel="noopener" target="_blank" href="https://developer.android.com/jetpack/androidx/releases/media3#kts">ライブラリ<span class="fa fa-external-link external-icon anchor-icon"></span></a>がコンポーネントごとに作られていますので、必要そうなのは取ってきても大丈夫です！</p>



<pre class="wp-block-code"><code>    def media3_version = "1.0.0-alpha01"
    implementation "androidx.media3:media3-exoplayer:$media3_version"
    implementation "androidx.media3:media3-ui:$media3_version"
    implementation "androidx.media3:media3-session:$media3_version"
    implementation "androidx.media3:media3-test-utils:$media3_version"</code></pre>



<p>　続いて、xmlにはStyledPlayerViewというコンポーネントを配置しましょう。以前はPlayerViewというのが主流だったように記憶していますが、ここ数年は<meta charset="utf-8">StyledPlayerViewが主流なんですかね。間違っていたらすいません&#8230;</p>



<pre class="wp-block-code"><code>    &lt;androidx.media3.ui.StyledPlayerView
        android:id="@+id/player_view"
        android:layout_width="match_parent"
        android:layout_height="match_parent">
    &lt;/androidx.media3.ui.StyledPlayerView></code></pre>



<p>　最後にアクティビティのコードを記載します。特にこれといったことはしていませんが、createMediaItems関数で再生したいMediaItemのリストとして作成し、initializePlayer関数で作成しています。</p>



<pre class="wp-block-code"><code>class SamplePlayer : AppCompatActivity() {
    private lateinit var binding: ActivitySamplePlayerBinding

    private lateinit var mediaItems: MutableList&lt;MediaItem>
    private var player: ExoPlayer? = null
    private var trackSelectionParameters: DefaultTrackSelector.Parameters? = null
    private lateinit var trackSelector: DefaultTrackSelector

    private var startAutoPlay: Boolean = false
    private var startItemIndex: Int = 0
    private var startPosition: Long = 0L

    override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)
        binding = ActivitySamplePlayerBinding.inflate(layoutInflater)
        val view = binding.root
        setContentView(view)

        binding.playerView.requestFocus()

        trackSelectionParameters =
            DefaultTrackSelector.ParametersBuilder( /* context= */this).build()
        clearStartPosition()
    }

    override fun onStart() {
        super.onStart()
        if (Util.SDK_INT > 23) {
            initializePlayer()
            binding.playerView.onResume()
        }
    }

    private fun initializePlayer() {
        if (player == null) {
            mediaItems = createMediaItems()
            trackSelector = DefaultTrackSelector(this)
            player = ExoPlayer.Builder(this)
                .setTrackSelector(trackSelector)
                .build()

            player?.trackSelectionParameters = trackSelectionParameters!!
            player?.setAudioAttributes(AudioAttributes.DEFAULT, true)
            player?.playWhenReady = startAutoPlay
            binding.playerView.player = player
        }

        val haveStartPosition = startItemIndex != C.INDEX_UNSET
        if (haveStartPosition) {
            player?.seekTo(startItemIndex, startPosition)
        }
        player?.setMediaItems(mediaItems, !haveStartPosition)
        player?.prepare()
    }

    private fun createMediaItems(): MutableList&lt;MediaItem> {
        val mediaItems = mutableListOf&lt;MediaItem>()

        val rawDataSource = RawResourceDataSource(this)
        rawDataSource.open(DataSpec(RawResourceDataSource.buildRawResourceUri(R.raw.&lt;ここにmp4ファイル名>)))
        mediaItems.add(
            MediaItem.fromUri(rawDataSource.uri!!)
        )
        return mediaItems
    }

    private fun clearStartPosition() {
        startAutoPlay = true
        startItemIndex = C.INDEX_UNSET
        startPosition = C.TIME_UNSET
    }
}</code></pre>
]]></content:encoded>
					
					<wfw:commentRss>https://techgrowup.net/android-jetpack-media3/feed/</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		
			</item>
	</channel>
</rss>

<!--
Performance optimized by W3 Total Cache. Learn more: https://www.boldgrid.com/w3-total-cache/?utm_source=w3tc&utm_medium=footer_comment&utm_campaign=free_plugin

Disk: Enhanced  を使用したページ キャッシュ

Served from: techgrowup.net @ 2026-05-14 22:03:08 by W3 Total Cache
-->