Zany-靈活的AVPlayer

??Zany完成了對(duì)播放進(jìn)度、狀態(tài)的監(jiān)聽(tīng),包括了播放完成后的回調(diào),大幅減少代碼量

大家要是有關(guān)于播放器的問(wèn)題可以找我,一起討論哇哈哈哈哈哈??

Email Yvente@163.com

創(chuàng)建一個(gè)Zany實(shí)例

  let player = Zany(url: url)

創(chuàng)建一個(gè)帶有播放進(jìn)度的Zany實(shí)例

  let player = Zany(url: url, observer: { (zany, progress) -> (Void) in
    // DispatchQueue.main
    // update UI about progress

  })

操作這個(gè)實(shí)例

你可以創(chuàng)建一個(gè)Zany實(shí)例作為播放器,在需要播放的時(shí)候調(diào)用 'play()' 方法

  let player = Zany(url: url, observer: { (zany, progress) -> (Void) in
    // DispatchQueue.main
    // update UI about progress

  })
  player.play()

功能包括:

  • play(): 播放一個(gè)已經(jīng)暫停的播放器
  • pause(): 暫停一個(gè)正在播放的播放器
  • reset(_ url: URL?, restart: Bool = true): 重置播放器,替換URL

屬性:

  • .id: 播放器的唯一標(biāo)識(shí)
  • .state: 播放器狀態(tài) (paused,running,finished)

添加/移除 觀察者

你可以為Zany實(shí)例添加進(jìn)度觀察者(單獨(dú)添加的要記得移除,初始化默認(rèn)添加,已經(jīng)在銷(xiāo)毀前作了移除):

let token = player.observe { (zany, progress) -> (Void) in
    // DispatchQueue.main
    // update UI about progress
}
player.play()

你可以通過(guò)token移除對(duì)應(yīng)觀察者:

player.remove(observer: token)

監(jiān)聽(tīng)播放狀態(tài)的改變

您可以通過(guò)分配一個(gè)函數(shù)回調(diào)來(lái)監(jiān)聽(tīng)狀態(tài)更改 - 'onstatechange' 屬性

newState為finished時(shí)表示播放完成,再也不用到處寫(xiě)播放完成的通知了??

 player.onStateChanged = {(zany,newState) in
            
      switch newState {
      case .running:
           //  for example: change button state
           //  the player is running
      case .paused:
           //  the player is paused
                
      case .finished:
           //  the player playFinished
            
       }
 }

你甚至可以為 AVPlayerItem 添加Observer

例如:"status","loadedTimeRanges","playbackBufferEmpty","playbackLikelyToKeepUp"

      let player = Zany(url: url, observer: { (zany, progress) -> (Void) in
            print("\(zany.id)---\(progress)")
        }, ItemAddObserver: { (zany, item) -> (Void) in
            // add observer for AVPlayerItem
            
            item.addObserver(self, forKeyPath: "status", options: NSKeyValueObservingOptions.new, context: nil)
            
        }) { (zany, item) -> (Void) in
            // remove observer
             item.removeObserver(self, forKeyPath: "status")
        }

是不是很方便??

就想要???? 歡迎戳這里 ????

發(fā)現(xiàn)bug或好的建議歡迎 issues or Email Yvente@163.com??????

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書(shū)系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容