반응형
ExoPlayer
설명
- 구글에서 만든 오픈 소스 미디어 플레이 라이브러리
- MediaPlayer보다 작고 유연하며 안정적이므로 많은 개발자들이 사용하고 있다.
- 유튜브와 구글 무비도 ExoPlyer를 사용해서 만들어졌다.
예제
동영상 파일 추가- 아래 경로에 영상 추가
- ~/src/main/assets/video/intro1.mp4
- ~/src/main/assets/video/intro2.mp4
dependencies {
...
implementation "com.google.android.exoplayer:exoplayer-core:2.13.0"
implementation "com.google.android.exoplayer:exoplayer-ui:2.13.0"
}
res/layout/activity_main.xml
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical">
<com.google.android.exoplayer2.ui.PlayerView
android:id="@+id/playerView"
android:layout_width="match_parent"
android:layout_height="400dp"
app:fastforward_increment="5000"
app:rewind_increment="5000"
app:use_controller="true" />
<Button
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:onClick="onClickPlay"
android:text="play" />
<Button
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:onClick="onClickRelease"
android:text="release" />
</LinearLayout>
MainActivity
class MainActivity : AppCompatActivity() {
companion object {
const val TAG = "[TAG]"
}
private lateinit var playerView: PlayerView
private var player: ExoPlayer? = null
private val listener = PlayerStateListener()
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
setContentView(R.layout.activity_main)
playerView = findViewById(R.id.playerView)
}
fun onClickPlay(view: View) {
if (player == null) {
player = SimpleExoPlayer.Builder(this).build()
playerView.player = player
}
player?.apply {
if (isPlaying) {
stop()
}
setMediaItem(MediaItem.fromUri("asset:///video/intro1.mp4"))
addMediaItem(MediaItem.fromUri("asset:///video/intro2.mp4"))
addListener(listener)
prepare()
play()
seekTo(2000L)
}
}
fun onClickRelease(view: View) {
player?.apply {
stop()
release()
removeListener(listener)
}
player = null
}
inner class PlayerStateListener : Player.EventListener {
override fun onPlaybackStateChanged(state: Int) {
when (state) {
ExoPlayer.STATE_IDLE -> Log.d(TAG, "STATE_IDLE")
ExoPlayer.STATE_BUFFERING -> Log.d(TAG, "STATE_BUFFERING")
ExoPlayer.STATE_READY -> Log.d(TAG, "STATE_READY")
ExoPlayer.STATE_ENDED -> Log.d(TAG, "STATE_ENDED")
}
}
}
}
참고
반응형
'Development > Android' 카테고리의 다른 글
[Android] Jenkins로 APK 빌드하기 (0) | 2021.02.22 |
---|---|
[Android] Chromecast (0) | 2021.02.16 |
[Android] ViewTreeObserver (0) | 2021.02.10 |
[Android] LifecycleObserver (0) | 2021.02.10 |
[Android] BuildConfig (0) | 2021.02.09 |