이벤트 핸들러

import com.newin.nplayer.sdk.EventHandler
sealed class EventHandler

이벤트 핸들러의 종류와 사용 방법에 대한 설명입니다. 각각 데이터 클래스에 대한 설명은 클래스를, 사용 방법은 addEventHandler()를 참고하시면 됩니다. 이벤트 핸들러를 추가한 후, 해당 이벤트 핸들러가 더 이상 필요 없을 때는 반드시 removeEventHandler() 메서드를 사용해서 제거하세요.
이벤트 핸들러를 대신하여 사용 방법에 따라서 이벤트 리스너를 사용하여 이벤트 처리를 할 수 있습니다. 이벤트 리스너에서 사용되는 파라미터는 이벤트 핸들러의 파라미터와 동일합니다. 이벤트 리스너의 사용 방법은 addEventListener()메서드를 참고하시면 됩니다.


클래스

DurationChange

data class DurationChange(val listener: (Duration) -> Unit) : EventHandler()
파라미터 타입설명
java.time.Duration미디어 길이

미디어의 길이(duration)가 변경되었을 때를 처리하기 위한 핸들러입니다.

이벤트 리스너: onDurationChange()
참고: java.time.Duration

Ended

data class Ended(val listener: () -> Unit) : EventHandler()

재생 목록의 마지막 미디어의 재생이 완료 된 시점에 사용하기 위한 핸들러입니다.

이벤트 리스너: onEnded()

Error

data class Error(val listener: (PlaybackException) -> Unit) : EventHandler()
파라미터 타입설명
PlaybackException재생 오류가 발생했을 때 예외

에러가 발생하여 리소스를 로드할 수 없을 때 사용하기 위한 핸들러입니다.

LoadedData

data class LoadedData(val listener: () -> Unit) : EventHandler()

미디어 트랙이 로드되었을 때 사용하기 위한 핸들러입니다.

이벤트 리스너: onLoadedData()

LoadedMetadata

data class LoadedMetadata(val listener: () -> Unit) : EventHandler()

메타데이터가 로드되었을 때 사용하기 위한 핸들러입니다.

이벤트 리스너: onLoadedMetadata()

LoadStart

data class LoadStart(val listener: () -> Unit) : EventHandler()

미디어 리소스를 로딩하기 시작할 때 사용하기 위한 핸들러입니다.

이벤트 리스너: onLoadStart()

MediaItemTransition

data class MediaItemTransition(val listener: (MediaItem?, @Player.MediaItemTransitionReason Int) -> Unit) : EventHandler()
파라미터 타입설명
MediaItem?교체된 미디어 아이템
@Player.MediaItemTransitionReason Int미디어 아이템 교체 이유

미디어 아이템이 교체 되는 시점에 사용하기 위한 핸들러입니다.
참고: 이벤트 리스너는 Player.Listener에서 제공하는 것을 사용하시면 됩니다.

Pause

data class Pause(val listener: () -> Unit) : EventHandler()

미디어 일시 정지를 요청한 후, 일시 정지 상태로 진입하는 시점에 사용하기 위한 핸들러입니다.

이벤트 리스너: onPause()
비교: Play

Play

data class Play(val listener: () -> Unit) : EventHandler()

미디어가 일시 정지 상태에서 재생 상태로 변경되는 시점에 사용하기 위한 핸들러입니다. 단, 재생 위치가 변경될 때는 포함하지 않습니다.

사용자가 재생 버튼을 클릭하거나 mediaPlayer.play()를 호출하는 등 플레이어에 재생 명령을 내렸을 때 처럼 직접 명령을 했을 때 상황에서 이벤트 처리를 여기서 할 수 있음 EventHandler.Playing과 다른 점은 seekTo() 등을 통해 재생 위치가 변경될 때의 이벤트는 여기서 처리할 수 없다는 것입니다. 중요한 점이 하나 더 있는데, Play와 관련된 이벤트 핸들러가 호출되면, Playing 이벤트는 Play 이벤트 이 후에 언제나 호출됩니다.

이벤트 리스너: onPlay()
비교: Pause
참고: Playing

PlaybackFinish

data class PlaybackFinish(val listener: (MediaItem, Duration, Duration?, PlaybackFinishReason) -> Unit) : EventHandler()
파라미터 타입설명
MediaItem?종료된 미디어 아이템
java.time.Duration마지막 재생 위치
java.time.Duration?미디어 길이
PlaybackFinishReason미디어 종료 원인

미디어가 종료될 때 사용하기 위한 핸들러입니다. 이 때 마지막 재생 위치(position)와 미디어의 길이(duration) 값을 사용할 수 있습니다. 주의할 점은, 미디어가 로드된 후에 종료될 때만 사용할 수 있다는 것입니다. 만약 미디어가 로드되기 전에 종료되는 상황에도 사용하려면, Unload를 참고하세요.

PlaybackStateChange

data class PlaybackStateChange(val listener: (@Player.State Int) -> Unit) : EventHandler()
파라미터 타입설명
@Player.State Int재생 상태

미디어 로딩 상태에 따른 처리, 즉, 버퍼링인지 준비가 된 상태인지, 끝이 났는지, 플레이어를 종료하였는지 등의 상황에 따라 처리하기 위한 핸들러입니다.
참고: 이벤트 리스너는 Player.Listener에서 제공하는 것을 사용하시면 됩니다.

참고: Player.State

Playing

data class Playing(val listener: () -> Unit) : EventHandler()

재생 위치가 변경되어 재생 되는 것을 포함하여, 미디어가 일시 정지 상태에서 재생 상태로 변경되는 시점에 사용하기 위한 핸들러입니다.

즉, seekBack(), seekForward(), seekTo() 등의 호출로 재생 위치가 변경되기 위해, 미디어가 잠시 멈추었다가 다시 재생되는 이벤트를 처리할 수 있다는 것이 EventHandler.Play와 다른 점입니다. Playing과 관련된 이벤트 핸들러는 Play 이벤트 이후에 호출됩니다.

이벤트 리스너: onPlaying()
참고: Play

PositionDiscontinuity

data class PositionDiscontinuity(
    val listener: (MediaPlayer, Duration, Duration) -> Unit
) : EventHandler()
파라미터 타입설명
MediaPlayer미디어 플레이어
java.time.Duration이전 재생 위치
java.time.Duration바뀐 재생 위치

재생 위치가 변경되는 시점에 사용하기 위한 핸들러입니다. 이전 위치와 이동한 위치 모두 접근이 가능합니다.

Progress

data class Progress(val listener: () -> Unit) : EventHandler()

플레이어가 소스를 읽어오기 시작할 때에 사용하기 위한 핸들러입니다.

이벤트 리스너: onProgress()
비교: Suspend

RateChange

data class RateChange(val listener: (Float) -> Unit) : EventHandler()
파라미터 타입설명
Float재생 속도

재생 속도가 변경되는 시점에 사용하기 위한 핸들러입니다. 주의: 재생 속도는 그대로이지만, preservesPitch의 값이 변경될 때도 호출 됨

이벤트 리스너: onRateChange()
참고: playbackRate

RepeatModeChange

data class RepeatModeChange(val listener: (@Player.RepeatMode Int) -> Unit) : EventHandler()
파라미터 타입설명
@Player.RepeatMode Int반복 모드 종류

반복 모드가 변경되는 시점에 사용하기 위한 핸들러입니다.
참고: 이벤트 리스너는 Player.Listener에서 제공하는 것을 사용하시면 됩니다.

RepeatRangeChange

data class RepeatRangeChange(val listener: (MediaPlayer.RepeatRange?) -> Unit) : EventHandler()
파라미터 타입설명
MediaPlayer.RepeatRange?구간 반복에서의 구간

구간 반복 모드가 시작되거나 종료되었을 때, 그리고 구간 반복의 시작 위치 또는 종료 위치가 바뀌었을 때를 처리하기 위한 핸들러입니다.

이벤트 리스너: onRepeatRangeChange()
참고: MediaPlayer.RepeatRange

Seeked

data class Seeked(val listener: () -> Unit) : EventHandler()

seek 작업이 완료된 시점, 또는 재생 위치가 변경되는 시점, 또는 seeking 값이 false로 변경되는 시점에 사용하기 위한 핸들러입니다.

이벤트 리스너: onSeeked()
비교: Seeking

Seeking

data class Seeking(val listener: () -> Unit) : EventHandler()

seek 작업이 시작되는 시점, 또는 seeking 값이 false에서 true로 변경되는 시점에 사용하기 위한 핸들러입니다.

이벤트 리스너: onSeeking()
비교: Seeked

Suspend

data class Suspend(val listener: () -> Unit) : EventHandler()

미디어 로딩이 중지된 시점에 사용하기 위한 핸들러입니다.

이벤트 리스너: onSuspend()
비교: Progress

TimeUpdate

data class TimeUpdate(val listener: (Duration) -> Unit) : EventHandler()
파라미터 타입설명
java.time.Duration현재 재생 위치

currentTime이 변경되는 시점에 사용하기 위한 핸들러입니다. 즉, 미디어가 재생이 되는 동안 수행하려는 작업을 이곳에 구현하시면 됩니다.

이벤트 리스너: onTimeUpdate()
참고: java.time.Duration

Unload

data class Unload(val listener: (MediaItem) -> Unit) : EventHandler()
파라미터 타입설명
MediaItem종료된 미디어 아이템

미디어가 제거된 시점, 즉, 미디어 주소가 변경되기 직전, 기존에 존재하던 미디어를 비울 때를 처리하기 위한 핸들러입니다.

이벤트 리스너: onUnload()
참고: androidx.media3.common.MediaItem

VideoSizeChange

data class VideoSizeChange(val listener: (VideoSize) -> Unit) : EventHandler()
파라미터 타입설명
VideoSize영상 사이즈

영상 크기가 바뀌는 시점에 사용하기 위한 핸들러입니다. 다음 영상으로 이동할 때, 영상 크기가 0x0으로 바뀌었다가 다음 영상의 크기로 바뀌게 되는데, 0x0으로 바뀔 때도 해당 이벤트는 호출됩니다. 즉, 다음 영상으로 이동할 경우, 이 핸들러는 두 번 호출 됩니다.
참고: 이벤트 리스너는 Player.Listener에서 제공하는 것을 사용하시면 됩니다.

참고: VideoSize

VolumeChange

data class VolumeChange(val listener: (Float, Boolean) -> Unit) : EventHandler()
파라미터 타입설명
Float디바이스 음량
Boolean음소거 여부

볼륨이 변경되는 시점에 사용하기 위한 핸들러입니다. 무음(muted) 상태가 변경될 때도 호출됩니다.

주의: Player.Listener의 onVolumeChanged() 메서드는 이 핸들러와 전혀 다릅니다. 메서드 이름과 사용하는 파라미터도 다르니 주의하시기 바랍니다.

이벤트 리스너: onVolumeChange()
참고: deviceVolume

Waiting

data class Waiting(val listener: () -> Unit) : EventHandler()

일시적인 버퍼 부족, 즉 데이터가 충분히 로딩되지 못하거나 데이터가 없어서 재생이 정지된 시점에 사용하기 위한 핸들러입니다.

이벤트 리스너: onWaiting()