728x90
ExoPlayer 라이브러리를 사용하여 영상 플레이어를 만들어보겠습니다.
ExoPlayer 란?
오디오 및 비디오 관련 작업을 처리하는 Google에서 제공하는 라이브러리입니다.
참고)
https://exoplayer.dev/hello-world.html
라이브러리 추가
먼저, build.gradle 파일 안에 ExoPlayer 라이브러리를 사용하기 위해 아래 화면처럼
추가해주시고 Sync Now 버튼을 누르시면 라이브러리가 추가됩니다.
implementation 'com.google.android.exoplayer:exoplayer:2.11.8'
인터넷권한 추가
다른 사이트에서 영상파일을 가져와서 사용하기 위해 권한을 추가해줍니다.
<uses-permission android:name="android.permission.INTERNET" />
다음 예제에 사용할 화면을 만들어보겠습니다.
<activity_main.xml>
<?xml version="1.0" encoding="utf-8"?>
<androidx.constraintlayout.widget.ConstraintLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
tools:context=".MainActivity">
<com.google.android.exoplayer2.ui.PlayerView
android:id="@+id/video_player_view"
android:layout_width="match_parent"
android:layout_height="match_parent"/>
</androidx.constraintlayout.widget.ConstraintLayout>
다음 예제에 사용할 코드를 작성하겠습니다.
<MainActivity.kt>
1. 예제에 사용할 변수 생성
아래 사진을 보시면 에러가 발생하고 있는데 이 부분은 다음 코드를 추가하면 해결 됩니다.
import com.google.android.exoplayer2.SimpleExoPlayer
import com.google.android.exoplayer2.ui.PlayerView
class MainActivity : AppCompatActivity() {
private var videoPlayer: SimpleExoPlayer? = null
private var sampleUrl = "https://www.learningcontainer.com/wp-content/uploads/2020/05/sample-mp4-file.mp4"
private lateinit var video_player_view: PlayerView
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
setContentView(R.layout.activity_main)
video_player_view = findViewById(R.id.video_player_view);
// ExoPlayer 인스턴스를 생성하고 소스를 플레이에 할당하여 비디오 플레이어 초기화
videoPlayer = SimpleExoPlayer.Builder(this).build()
video_player_view?.player = videoPlayer
buildMediaSource()?.let {
videoPlayer?.prepare(it)
}
}
}
2. 영상 플레이어 컨트롤 기능 생성
스틱코드를 활용한다면, 클래스에서 'ex' 까지만 작성했을 때 'ExoPlayer 영상 컨트롤 기능 생성' 이벤트가 나타납니다.
'ExoPlayer 영상 컨트롤 기능 생성' 이벤트를 누를 경우 코드가 자동으로 완성됩니다.
코드들이 생기면서 에러가 사라지는 것을 확인할 수 있습니다.
<최종코드>
import androidx.appcompat.app.AppCompatActivity
import android.os.Bundle
import com.google.android.exoplayer2.source.MediaSource
import com.google.android.exoplayer2.source.ProgressiveMediaSource
import com.google.android.exoplayer2.upstream.DefaultDataSourceFactory
import android.net.Uri
import com.google.android.exoplayer2.SimpleExoPlayer
import com.google.android.exoplayer2.ui.PlayerView
class MainActivity : AppCompatActivity() {
private var videoPlayer: SimpleExoPlayer? = null
private var sampleUrl = "https://www.learningcontainer.com/wp-content/uploads/2020/05/sample-mp4-file.mp4"
private lateinit var video_player_view: PlayerView
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
setContentView(R.layout.activity_main)
video_player_view = findViewById(R.id.video_player_view);
// ExoPlayer 인스턴스를 생성하고 소스를 플레이에 할당하여 비디오 플레이어 초기화
videoPlayer = SimpleExoPlayer.Builder(this).build()
video_player_view?.player = videoPlayer
buildMediaSource()?.let {
videoPlayer?.prepare(it)
}
}
// MediaSource: 영상에 출력할 미디어 정보를 가져오는 클래스
private fun buildMediaSource(): MediaSource? {
val dataSourceFactory = DefaultDataSourceFactory(this, "sample")
return ProgressiveMediaSource.Factory(dataSourceFactory)
.createMediaSource(Uri.parse(sampleUrl))
}
// 일시중지
override fun onResume() {
super.onResume()
videoPlayer?.playWhenReady = true
}
// 정지
override fun onStop() {
super.onStop()
videoPlayer?.playWhenReady = false
if (isFinishing) {
releasePlayer()
}
}
// 종료
private fun releasePlayer() {
videoPlayer?.release()
}
}
프로젝트를 실행하면 아래 사진과 같이 영상이 나오는 것을 확인할 수 있습니다.
'안드로이드 코틀린' 카테고리의 다른 글
[Kotlin][Android] 화면 넘기기 구현하기 (0) | 2021.07.20 |
---|---|
[Kotlin][Android] 수평 측정기 앱을 만들어 보자 (0) | 2021.07.16 |
[Kotlin][Android] 구글맵 빠르게 적용하기 (1) | 2021.07.12 |
[Kotlin][Android] 검색어 자동완성 기능 만들기 (0) | 2021.07.02 |
[Kotlin][Android] QR 코드 리더기 (0) | 2021.07.01 |