lateinit var player: SimpleExoPlayer
player = SimpleExoPlayer.Builder(context)
.setTrackSelector(trackSelector)
.build()
위의 player instance는 SimpleExoPlayer를 리턴받는다.
ExoPlayer.release
를 사용해서 해제하는 것이 중요하다. 위에서 ExoPlayer instance를 생성할 때,
SimpleExoPlayer.Builder(context)
.setTrackSelector(trackSelector)
.build()
아래와 같이 TrackSelector 인스턴스를 넣은 걸 기억해보자.
아래와 같은 방법으로 TrackSelector의 인스턴스를 구할 수 있다.
val trackSelector = DefaultTrackSelector(context)
ExoPlayer.prepare(MediaSource mediaSource)
private fun buildMediaSource(track: TrackData): MediaSource {
val dataSourceFactory: DataSource.Factory = DefaultDataSourceFactory(context, userAgent) //userAgent = applicationName
val mediaSourceFactory = ProgressiveMediaSource.Factory(dataSourceFactory)
return mediaSourceFactory.createMediaSource(Uri.parse(track.url))
}
val dataSourceFactory: DataSource.Factory = DefaultDataSourceFactory(context, userAgent) //userAgent = applicationName
player = SimpleExoPlayer.Builder(this)
.setTrackSelector(trackSelector)
.setLoadControl(defaultLoadControl) //이렇게
.build()
✅ 영상 재생을 하고 싶은 경우 & 음악 재생 화면을 보이고 싶은 경우
<com.google.android.exoplayer2.ui.PlayerView
android:id="@+id/audio_player_view"
android:layout_width="wrap_content"
android:layout_height="wrap_content" />
✅ 음악 재생 컨트롤을 하는 컨트롤러가 필요한 경우
<com.google.android.exoplayer2.ui.PlayerControlView
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:id="@+id/playerControlView"
app:layout_constraintBottom_toBottomOf="parent"
app:controller_layout_id="@layout/custom_audio_player"
android:layout_marginTop="10dp"
/>
위와 같은 코드는 xml에서 작성하게 되고
java or kt 코드에서는
playerControlView.player = player //player는 아까 만들어둔 SimpleExoPlayer instance
이렇게 작성하여 뷰에 나타낼 수 있다.
lateinit var player : SimpleExoPlayer
val trackSelector = DefaultTrackSelector()
player = SimpleExoPlayer.Builder(this)
.setTrackSelector(trackSelector)
.build()
<com.google.android.exoplayer2.ui.PlayerView
android:id="@+id/playerView"
android:layout_width="match_parent"
android:layout_height="match_parent"
tools:ignore="Overdraw" />
// SimpleExoPlayer instance를 xml에 선언한 player에 넣어주자.
playerView.player = player
// 미디어 데이터가 로드되는 DataSource.Factory 인스턴스 생성
val dataSourceFactory: DataSource.Factory = DefaultDataSourceFactory(this, userAgent)
// Media를 플레이 할 미디어 소스를 생성.
val mediaSourceFactory = ProgressiveMediaSource.Factory(dataSourceFactory)
val mediaSource = mediaSourceFactory.createMediaSource(Uri.parse(track.url))
// MediaSource로 플레이 할 미디어를 준비했으면 player에 넣어주자
player.prepare(mediaSource)
// media를 재생 시키자!
player.playWhenReady = true
override fun onDestroy() {
super.onDestroy()
player.release()
}
물론, 위와 같은 모든 기능을 사용하기 위해선
build.gradle에 추가해주자.
implementation "com.google.android.exoplayer:exoplayer-core:2.11.3" //exoPlayer를 쓰기 위해 무조건 추가해줘야 하는 핵심 기능.
implementation "com.google.android.exoplayer:exoplayer-ui:2.11.3" // PlayerView와 같은 뷰를 추가하기 위해 추가.