Skip to main content
Version: iOS SDK v1.3.0

State & Events

Every PlayerProtocol implementation keeps its internal state and offers a way to register listener objects to listen to important events.

Player state

The player state can be retrieved with player.state and, similar to our recorder component, matches one of the constants in the PlayerState class:

StateDescriptionHas contentIs playing
PlayerState.idlePlayer has no Video content.falsefalse
PlayerState.paused(buffering: Bool)Player has content, which might be ready to play depending on the buffering flag. However, player is currently paused - use play() or toggle() to change.truefalse
PlayerState.playing(buffering: Bool)Player has content and was asked to play it. Depending on the buffering flag, it might be downloading more data or not.truecheck the Bool flag

Player events

All PlayerProtocol events are dispatched to a PlayerObserver that was previously registered using addObserver or similar function.

player.addObserver(observer) // start listening (weak reference)
player.removeObserver(observer) // stop listening

Observers are very important to be up-to-date about the player state, handle errors and create a responsive UI. We describe the observer interface as comments in the interface description below.

class CustomPlayerObserver : PlayerObserver {

func playerStateChanged(_ state: PlayerState) {
// Player state has changed

func playerError(_ error: Error) {
// Some error was encountered. Likely playback was stopped as a consequence.

func playerPlaybackReady() {
// Player content is ready to be played using play()

func playerPlaybackFinished() {
// The playback has reached the end of the content.

func playerSubtitleChanged(_ text: String?) {
// Called for subtitled videos when player asks to show the given string of text.

func playerVideoChanged(video: Video?) {
// The current video being played has changed.

func playerDurationChanged(duration: TimeInterval) {
// The content duration has changed, likely because content itself
// has changed. This can be used to display a duration UI element.

func playerPositionChanged(position: TimeInterval) {
// The playback position has changed. This is invoked many times during
// playback to implement a smooth UI seekbar, for example.

func playerMutedChanged(muted: Bool) {
// The player.muted value has been changed. Useful for reactive UI.

func playerAspectModeChanged(aspectMode: AspectMode) {
// The player.aspectMode value has been changed. Useful for reactive UI.