2014-09-19 172 views
0
func configurePlayer() { 
    player.addPeriodicTimeObserverForInterval(CMTimeMakeWithSeconds(1, 1), queue: dispatch_get_main_queue()) { (CMTime) -> Void in 
    var timeNow = Int(self.player.currentTime().value)/Int(self.player.currentTime().timescale) 
    var currentMins = timeNow/60 
    var currentSec = timeNow % 60 
    var duration: NSString = "\(currentMins):\(currentSec)" 
    self.durationOutlet.text = duration // <<- Green line here 
    self.sliderOutlet.value = Float(timeNow) 
    } 
} 

我正在創建一個音樂播放器,並且一切正常,但是當我嘗試獲取計時器計時器或滑塊進行動畫播放時,它會崩潰。它工作正常2秒,但然後崩潰。我在viewDidLoad中稱這種方法。除了上面指出的綠線外,沒有任何錯誤。音樂播放器計時器

+0

你確定玩家和playerItem已準備好玩嗎? – 2015-06-27 12:34:17

回答

0

我覺得durationOutlet outlet有問題。

因此,請確保durationOutlet從故事板正確連接。

HERE是更多信息的示例項目。

0

當您將time.value(即IntTime爲IntTime的CMTimeValue)轉換爲Int時,它會崩潰。它只會在使用32位設備時崩潰。所以,而不是Int我使用Int64,它爲我工作。不過,我仍然不確定它的工作原理。所以我建議你嘗試這樣的事情:
let timeNow = Int64(time.value)/Int64(time.timescale)

0

很難說沒有看到球員是如何設置的。我不相信你可以使用AVAudioPlayer來流式傳輸託管在遠程服務器上的文件。爲此你將不得不使用AVPlayer。您可能需要添加一些日誌記錄來打印出現在的時間現在,看看它在什麼時候中斷了。如果您使用的是AVPlayer,則需要檢查AVPlayerItem的狀態是ReadyToPlay。嘗試是這樣的:

player.addPeriodicTimeObserverForInterval(CMTimeMakeWithSeconds(1, 1), queue: dispatch_get_main_queue()) { (CMTime) -> Void in 

    if self.player.currentItem?.status == .ReadyToPlay { 

     var timeNow = Int(self.player.currentTime().value)/Int(self.player.currentTime().timescale) 

     var currentMins = timeNow/60 
     var currentSec = timeNow % 60 

     var duration: NSString = "\(currentMins):\(currentSec)" 

     self.durationOutlet.text = duration // <<- Green line here 

     self.sliderOutlet.value = Float(timeNow) 
    } 

} 
0

這裏是一個快速的代碼時,玩家在遊戲模式來更新滑塊。

player.addPeriodicTimeObserverForInterval(CMTimeMakeWithSeconds(1, 1), queue: dispatch_get_main_queue()) { (CMTime) -> Void in 
      if self.player.currentItem?.status == .ReadyToPlay { 
       let thePlayerItem : AVPlayerItem = self.player.currentItem! 
       let duration : Float64 = CMTimeGetSeconds(thePlayerItem.duration); 
       let time : Float64 = CMTimeGetSeconds(self.player.currentTime()); 
       self.sliderVideoPlayer.value = Float (time/duration); 
      } 
     }