The Exoplayer is initialized with SimpleExoPlayer in the onCreate(), with DefaultRenderersFactory, DefaultTrackSelector, and DefaultLoadControl. The data source (audio) is initialized using ProgressiveMediaSource with DefaultDataSourceFactory and DefaultExtractorsFactory. The Exoplayey is prepared with this ProgressiveMediaSource. In the onResume(), the playWhenReady property of the Exoplayer is set to true, in the onPause(), the playWhenReady property of the Exoplayer is set to false, and in the onDestroy(), the player is released.
class MainActivity : AppCompatActivity(), Player.EventListener { lateinit var player: SimpleExoPlayer override fun onCreate(savedInstanceState: Bundle?) { super.onCreate(savedInstanceState) setContentView(R.layout.activity_main) val renderersFactory = DefaultRenderersFactory(this) val trackSelectionFactory = AdaptiveTrackSelection.Factory() val trackSelectSelector = DefaultTrackSelector(trackSelectionFactory) val loadControl = DefaultLoadControl() player = ExoPlayerFactory.newSimpleInstance(this, renderersFactory, trackSelectSelector, loadControl) player.addListener(this) val dataSourceFactory = DefaultDataSourceFactory(this, getString(R.string.app_name)) val extractorsFactory = DefaultExtractorsFactory() val mediaSource = ProgressiveMediaSource .Factory(dataSourceFactory, extractorsFactory) .createMediaSource(Uri.parse("https://file-examples.com/wp-content/uploads/2017/11/file_example_MP3_5MG.mp3")) player.prepare(mediaSource) video_view.player = player } override fun onResume() { super.onResume() player.playWhenReady = true } override fun onPause() { super.onPause() player.playWhenReady = false } override fun onDestroy() { super.onDestroy() player.release() } //region Player.EventListener override fun onTracksChanged(trackGroups: TrackGroupArray?, trackSelections: TrackSelectionArray?) { } override fun onLoadingChanged(isLoading: Boolean) { } override fun onPlayerStateChanged(playWhenReady: Boolean, playbackState: Int) { } override fun onPlayerError(error: ExoPlaybackException?) { } override fun onPlaybackParametersChanged(playbackParameters: PlaybackParameters?) { } //endregion }
activity_main.xml
<FrameLayout xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="match_parent" android:layout_height="match_parent" xmlns:app="http://schemas.android.com/apk/res-auto" android:background="#000000"> <com.google.android.exoplayer2.ui.PlayerView android:id="@+id/video_view" android:layout_width="match_parent" android:layout_height="match_parent" app:controller_layout_id="@layout/view_player_controller"/> </FrameLayout>
view_player_controller.xml
<?xml version="1.0" encoding="utf-8"?> <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="match_parent" android:layout_height="wrap_content" android:layout_gravity="bottom" android:layoutDirection="ltr" android:background="#CC000000" android:orientation="vertical"> <LinearLayout android:layout_width="match_parent" android:layout_height="wrap_content" android:gravity="center" android:paddingTop="4dp" android:orientation="horizontal"> <ImageButton android:id="@id/exo_play" style="@style/ExoMediaButton.Play"/> <ImageButton android:id="@id/exo_pause" style="@style/ExoMediaButton.Pause"/> </LinearLayout> </LinearLayout>
No comments:
Post a Comment
Note: only a member of this blog may post a comment.