Android ExoPlayer사용하기

김성환·2024년 4월 10일

안드로이드 앱에서 동영상을 틀려면 어떻게 해야할까요?
여러 방법이 있겠지만 그중 Exoplayer에 대해서 말해볼까 합니다.

ExoPlayer는 구글에서 개발한 안드로이드용 오픈 소스 미디어 재생 라이브러리입니다. ExoPlayer는 안드로이드 플랫폼의 다양한 미디어 재생 요구사항을 처리하기 위해 설계되었으며, Android SDK의 MediaPlayer보다 더 유연하고 강력한 기능을 제공합니다. 예를들어 HTTP, HLS, DASH, SmoothStreaming 등 다양한 네트워크 프로토콜을 지원하여 온라인 미디어 스트리밍을 처리할 수 있으며 스텀 기능을 지원하여 Renderer, TrackSelector, LoadControl 등의 구성 요소를 교체하여 미디어 재생 동작을 변경하거나 확장할 수 있습니다.

그렇다면 Exoplayer를 적용해 봅시다.

implementation 'com.google.android.exoplayer:exoplayer:2.19.1'

Exoplayer를 사용할때는 이렇게 Gradle 종속성을 추가해야합니다.

이작업이 완료되면 코드 안에서 ExoPlayer를 사용할수있게 됩니다.

<com.google.android.exoplayer2.ui.PlayerView
    android:id="@+id/playerView"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    app:use_controller="true" />
private var player: ExoPlayer? = null

private fun initExoPlayer() {
	player = ExoPlayer.Builder(this).build()
		.also { exoPlayer ->
			binding.playerView.player = exoPlayer
			exoPlayer.addListener(object : Player.Listener {
				override fun onIsPlayingChanged(isPlaying: Boolean) {
					super.onIsPlayingChanged(isPlaying)
                    if (isPlaying) {

					} else {
                        
					}
				}
			})
		}
}

private fun play(videoUrl: String, videoTitle: String) {
    player?.setMediaItem(MediaItem.fromUri(Uri.parse(videoUrl)))
    player?.prepare()
    player?.play()

    binding.videoTitleTextView.text = videoTitle
}

override fun onStop() {
    super.onStop()
    player?.pause()
}

override fun onDestroy() {
    super.onDestroy()
    player?.release()
}

이런식으로 xml에서 PlayerView를 만들고 코드에서 player를 집어넣어서 해당 플레이어를 이용하여 조작하여 영상을 틀거나 멈추는등 동영상관련되 작업을 수행할수도 있습니다.


이처럼 컨트롤러나 플레이어도 레이아웃을 커스터 하게 집어넣을수도 있습니다.

그렇지만 최근에는 AndroidX Media가 나오면서 2024-04-03부터는 ExoPlayer의 업데이트가 없기 때문에 Media3를 이용해야합니다.


reference
https://velog.io/@jiwon3378/Android-ExoPlayer-%EA%B0%84%EB%8B%A8%ED%95%98%EA%B2%8C-%EC%82%AC%EC%9A%A9%ED%95%B4%EB%B3%B4%EA%B8%B0
https://github.com/google/ExoPlayer?tab=readme-ov-file
https://github.com/androidx/media

0개의 댓글