Skip to content

Instantly share code, notes, and snippets.

@kyo504
Forked from netgfx/addObservers.swift
Created January 20, 2022 17:03
Show Gist options
  • Save kyo504/2a7c757d7dfc01573ee73dd11ba5c45e to your computer and use it in GitHub Desktop.
Save kyo504/2a7c757d7dfc01573ee73dd11ba5c45e to your computer and use it in GitHub Desktop.

Revisions

  1. Michael Dobekidis revised this gist Feb 23, 2018. 1 changed file with 10 additions and 6 deletions.
    16 changes: 10 additions & 6 deletions addObservers.swift
    Original file line number Diff line number Diff line change
    @@ -3,27 +3,33 @@ self.audioQueueObserver = self.playerQueue?.observe(\.currentItem, options: [.ne
    [weak self] (player, _) in
    print("media item changed...")
    }

    // listening for current item status change
    self.audioQueueStatusObserver = self.playerQueue?.currentItem?.observe(\.status, options: [.new, .old], changeHandler: {
    (playerItem, change) in
    if playerItem.status == .readyToPlay {
    print("current item status is ready")
    }

    })

    // listening for buffer is empty
    self.audioQueueBufferEmptyObserver = self.playerQueue?.currentItem?.observe(\.playbackBufferEmpty, options: [.new]) {
    [weak self] (_, _) in
    print("buffering...")
    }
    // listening for event that buffer is almost full
    self.audioQueueBufferAlmostThereObserver = self.playerQueue?.currentItem?.observe(\.playbackLikelyToKeepUp, options: [.new]) {
    [weak self] (_, _) in
    print("buffering ends...")
    }

    // listening for event that buffer is full
    self.audioQueueBufferFullObserver = self.playerQueue?.currentItem?.observe(\.playbackBufferFull, options: [.new]) {
    [weak self] (_, _) in
    print("buffering is hidden...")
    }

    // listening for event about the status of the playback
    self.audioQueueStallObserver = self.playerQueue?.observe(\.timeControlStatus, options: [.new, .old], changeHandler: {
    (playerItem, change) in
    if #available(iOS 10.0, *) {
    @@ -36,20 +42,18 @@ self.audioQueueStallObserver = self.playerQueue?.observe(\.timeControlStatus, op
    print("Media Waiting to play at specific rate!")
    }
    }

    else {
    // Fallback on earlier versions
    }

    })

    // listening for change event when player stops playback
    self.audioQueueWaitingObserver = self.playerQueue?.observe(\.reasonForWaitingToPlay, options: [.new, .old], changeHandler: {
    (playerItem, change) in
    if #available(iOS 10.0, *) {
    print("REASON FOR WAITING TO PLAY: ", playerItem.reasonForWaitingToPlay?.rawValue as Any)
    }

    else {
    // Fallback on earlier versions
    }

    })
    })
  2. Michael Dobekidis created this gist Feb 23, 2018.
    55 changes: 55 additions & 0 deletions addObservers.swift
    Original file line number Diff line number Diff line change
    @@ -0,0 +1,55 @@
    // listening for current item change
    self.audioQueueObserver = self.playerQueue?.observe(\.currentItem, options: [.new]) {
    [weak self] (player, _) in
    print("media item changed...")
    }
    // listening for current item status change
    self.audioQueueStatusObserver = self.playerQueue?.currentItem?.observe(\.status, options: [.new, .old], changeHandler: {
    (playerItem, change) in
    if playerItem.status == .readyToPlay {
    print("current item status is ready")
    }

    })
    // listening for buffer is empty
    self.audioQueueBufferEmptyObserver = self.playerQueue?.currentItem?.observe(\.playbackBufferEmpty, options: [.new]) {
    [weak self] (_, _) in
    print("buffering...")
    }
    self.audioQueueBufferAlmostThereObserver = self.playerQueue?.currentItem?.observe(\.playbackLikelyToKeepUp, options: [.new]) {
    [weak self] (_, _) in
    print("buffering ends...")
    }
    self.audioQueueBufferFullObserver = self.playerQueue?.currentItem?.observe(\.playbackBufferFull, options: [.new]) {
    [weak self] (_, _) in
    print("buffering is hidden...")
    }
    self.audioQueueStallObserver = self.playerQueue?.observe(\.timeControlStatus, options: [.new, .old], changeHandler: {
    (playerItem, change) in
    if #available(iOS 10.0, *) {
    switch (playerItem.timeControlStatus) {
    case AVPlayerTimeControlStatus.paused:
    print("Media Paused")
    case AVPlayerTimeControlStatus.playing:
    print("Media Playing")
    case AVPlayerTimeControlStatus.waitingToPlayAtSpecifiedRate:
    print("Media Waiting to play at specific rate!")
    }
    }

    else {
    // Fallback on earlier versions
    }

    })
    self.audioQueueWaitingObserver = self.playerQueue?.observe(\.reasonForWaitingToPlay, options: [.new, .old], changeHandler: {
    (playerItem, change) in
    if #available(iOS 10.0, *) {
    print("REASON FOR WAITING TO PLAY: ", playerItem.reasonForWaitingToPlay?.rawValue as Any)
    }

    else {
    // Fallback on earlier versions
    }

    })