<p>This post is based on implementing Exoplayer Library to play media files on Android.</p>



<div class="wp-block-buttons is-content-justification-center is-layout-flex wp-block-buttons-is-layout-flex">
<div class="wp-block-button"><a class="wp-block-button__link has-white-color has-text-color has-background" href="https://github.com/arunk7839/ExoPlayerDemo" style="background-color:#210e61" target="_blank" rel="noreferrer noopener"><strong>DOWNLOAD CODE</strong></a></div>
</div>



<figure class="wp-block-embed is-type-video is-provider-youtube wp-block-embed-youtube wp-embed-aspect-16-9 wp-has-aspect-ratio"><div class="wp-block-embed__wrapper">
<span class="embed-youtube" style="text-align:center; display: block;"><amp-youtube data-videoid="CEWGCvjEnmA" data-param-rel="1" data-param-showsearch="0" data-param-showinfo="1" data-param-iv_load_policy="1" data-param-fs="1" data-param-hl="en-US" data-param-autohide="2" data-param-wmode="transparent" width="1200" height="675" layout="responsive"><a href="https://www.youtube.com/watch?v=CEWGCvjEnmA" placeholder><amp-img src="https://i.ytimg.com/vi/CEWGCvjEnmA/hqdefault.jpg" alt="YouTube Poster" layout="fill" object-fit="cover"><noscript><img src="https://i.ytimg.com/vi/CEWGCvjEnmA/hqdefault.jpg" loading="lazy" decoding="async" alt="YouTube Poster"></noscript></amp-img></a></amp-youtube></span>
</div></figure>



<h3 class="wp-block-heading"><strong><span style="color: #000080;">ExoPlayer</span></strong> ;</h3>



<ul class="wp-block-list"><li><span style="color: #008000;"><strong> ExoPlayer</strong></span> is an open source library maintained by Google.</li><li>It ; supports a wide range of media files including DASH and HLS streaming which is not supported by the <span style="color: #0000ff;"><strong>MediaPlayer</strong></span>.</li><li>It provides you the ability to customize your media player according to your requirements.</li><li>ExoPlayer provides the support for the playlist and also provides smooth encryption and streaming of video and audio files.</li></ul>



<p>Let&#8217;s create a simple video player app in which we will be fetching a video from a URL and play that video inside our ExoPlayer. ;</p>



<h3 class="wp-block-heading"><strong><span style="color: #000080;">Creating new Project</span></strong></h3>



<p>1 . Create a new project by going to ;<span style="color: #008000;"><b>File ;</b><span class="s1"><b>⇒</b></span></span><b><span style="color: #008000;"> ;New Android Project</span>,</b> ;select ;<span style="color: #339966;"><strong>Empty Activity</strong></span>, provide ;<span style="color: #008000;"><strong>app name</strong></span>, ;select language to ;<strong><span style="color: #008000;">kotlin</span> ;</strong>and then finally click on ;<span style="color: #0000ff;"><strong>finish</strong></span>.</p>



<p>2 . Open app-level ;<span style="color: #008000;"><strong>build.gradle</strong></span> ;file, add the dependency of<span style="color: #008000;"><strong> ExoPlayer</strong></span> ;in the dependencies section, and ;<span style="color: #000080;"><strong>sync</strong></span> ;the project.</p>



<p><span style="color: #0000ff;"><strong>build.gradle</strong></span></p>



<pre class="wp-block-preformatted">dependencies {<br> <strong><span style="color: #008000;">//ExoPlayer dependency</span></strong><br> implementation 'com.google.android.exoplayer:exoplayer:2.15.0'<br>}</pre>



<p>3. Go to <strong><span style="color: #008000;">AndroidManifest.xml</span></strong> and add the internet permission above <span style="color: #000080;"><strong><;application>;</strong></span> tag as shown below:</p>



<p><strong><span style="color: #0000ff;">AndroidManifest.xml</span></strong></p>



<pre class="wp-block-preformatted"><;uses-permission android:name="android.permission.INTERNET"/>;</pre>



<p>4. Open the layout file <strong><span style="color: #008000;">activity_main.xml </span></strong>and add the <strong><span style="color: #000080;">PlayerView</span></strong> as shown below:</p>



<p><strong><span style="color: #008000;"><span style="color: #0000ff;">activity_main.xml</span> </span></strong></p>



<pre class="wp-block-preformatted"><;?xml version="1.0" encoding="utf-8"?>;<br><;androidx.constraintlayout.widget.ConstraintLayout xmlns:android="http://schemas.android.com/apk/res/android"<br> xmlns:app="http://schemas.android.com/apk/res-auto"<br> xmlns:tools="http://schemas.android.com/tools"<br> android:layout_width="match_parent"<br> android:layout_height="match_parent">;<br><br> <;com.google.android.exoplayer2.ui.PlayerView<br> android:id="@+id/playerView"<br> android:layout_width="match_parent"<br> android:layout_height="match_parent" />;<br><br><;/androidx.constraintlayout.widget.ConstraintLayout>;</pre>



<p>5. Open <strong><span style="color: #008000;">MainActivity.kt</span></strong> and add the below code:</p>
<!-- WP QUADS Content Ad Plugin v. 2.0.98.1 -->
<div class="quads-location quads-ad2" id="quads-ad2" style="float:none;margin:0px;">

</div>




<p><span style="color: #0000ff;"><strong>MainActivity.kt</strong></span></p>



<pre class="wp-block-preformatted">package com.c1ctech.exoplayerdemo<br><br>import androidx.appcompat.app.AppCompatActivity<br>import android.os.Bundle<br>import com.google.android.exoplayer2.*<br>import com.google.android.exoplayer2.source.MediaSource<br>import com.google.android.exoplayer2.ui.PlayerView<br>import com.google.android.exoplayer2.util.Util<br>import com.google.android.exoplayer2.source.ProgressiveMediaSource<br>import com.google.android.exoplayer2.upstream.*<br>import com.google.android.exoplayer2.upstream.DefaultHttpDataSource<br><br>class MainActivity : AppCompatActivity(), Player.Listener {<br><br> private var mPlayer: SimpleExoPlayer? = null<br> private lateinit var playerView: PlayerView<br><br> private val videoURL =<br> "https://commondatastorage.googleapis.com/gtv-videos-bucket/sample/BigBuckBunny.mp4"<br><br> override fun onCreate(savedInstanceState: Bundle?) {<br> super.onCreate(savedInstanceState)<br> setContentView(R.layout.activity_main)<br><br> <strong><span style="color: #008000;"> //get PlayerView by its id</span></strong><br> playerView = findViewById(R.id.playerView)<br><br> }<br><br> private fun initPlayer() {<br><br><span style="color: #008000;"><strong> // Create a player instance.</strong></span><br> mPlayer = SimpleExoPlayer.Builder(this).build()<br><br><span style="color: #008000;"><strong> // Bind the player to the view.</strong></span><br> playerView.player = mPlayer<br><br><span style="color: #008000;"><strong> //setting exoplayer when it is ready.</strong></span><br> mPlayer!!.playWhenReady = true<br><br><strong><span style="color: #008000;"> // Set the media source to be played.</span></strong><br> mPlayer!!.setMediaSource(buildMediaSource())<br><br><strong><span style="color: #008000;"> // Prepare the player.</span></strong><br> mPlayer!!.prepare()<br><br> }<br><br> override fun onStart() {<br> super.onStart()<br> if (Util.SDK_INT >;= 24) {<br> initPlayer()<br> }<br> }<br><br> override fun onResume() {<br> super.onResume()<br> if (Util.SDK_INT <; 24 || mPlayer == null) {<br> initPlayer()<br> }<br> }<br><br> override fun onPause() {<br> super.onPause()<br> if (Util.SDK_INT <; 24) {<br> releasePlayer()<br> }<br> }<br><br> override fun onStop() {<br> super.onStop()<br> if (Util.SDK_INT >;= 24) {<br> releasePlayer()<br> }<br> }<br><br><br> private fun releasePlayer() {<br> if (mPlayer == null) {<br> return<br> }<br><strong><span style="color: #008000;"> //release player when done</span></strong><br> mPlayer!!.release()<br> mPlayer = null<br> }<br><br><strong><span style="color: #008000;"> //creating mediaSource</span></strong><br> private fun buildMediaSource(): MediaSource {<br><strong><span style="color: #008000;"> // Create a data source factory.</span></strong><br> val dataSourceFactory: DataSource.Factory = DefaultHttpDataSource.Factory()<br><br><strong><span style="color: #008000;"> // Create a progressive media source pointing to a stream uri.</span></strong><br> val mediaSource: MediaSource = ProgressiveMediaSource.Factory(dataSourceFactory)<br> .createMediaSource(MediaItem.fromUri(videoURL))<br><br> return mediaSource<br> }<br>}</pre>



<p>In the above code, getting started with <span style="color: #008000;"><strong>ExoPlayer</strong></span> ;consists of implementing the following steps:</p>



<ol class="wp-block-list"><li>Create a <span style="color: #008000;"><strong>SimpleExoPlayer</strong></span> ;instance.</li><li>Attach the player to a <strong><span style="color: #008000;">PlayerView</span></strong>.</li><li>Set player with <strong><span style="color: #008000;">MediaSource</span></strong> and then <span style="color: #008000;"><strong>prepare</strong></span> the player.</li><li><strong><span style="color: #008000;">Release</span></strong> the player when done.</li></ol>



<p>6. When you run the app it will look like this as shown below:</p>



<div class="wp-block-image"><figure class="aligncenter"><img src="https://c1ctech.com/wp-content/uploads/2021/09/Screenshot_20210923-155316_ExoPlayerDemo-498x1024.jpg" alt="" class="wp-image-2790"/></figure></div>


