2016-11-24 27 views
4

您好,我已將我的UISlider最小值設置爲0.00。然後我以這種方式設置它的最大值。如何檢測AVPlayer實際開始快速播放

self.viewPlayer.layer.addSublayer(playerLayer) 
    let duration : CMTime = avPlayer.avPlayer.currentItem!.asset.duration 
    let seconds : Float64 = CMTimeGetSeconds(duration) 

    sliderBar.maximumValue=Float(seconds) 
    sliderBar!.isContinuous = false 
    sliderBar!.tintColor = UIColor.green 

但我得到這個例外

*** Terminating app due to uncaught exception 'NSInternalInconsistencyException', reason: 'Attempting to set a slider's minimumValue (0.000000) to be larger than the maximumValue (nan)' 
enter code here 

我知道prepareForPlay()實際播放後需要一定的時間才能真正播放視頻。那麼,我該如何檢測玩家真正開始播放視頻的時間? 請幫幫我。 感謝

+1

希望這有助於: http://stackoverflow.com/questions/5401437/knowing-when-avplayer-object-is已經播放 – nynohu

+0

Player.play()是播放文件的方法,因此您可以跟蹤它 –

+0

@HimanshuMoradiya yeas。我想要檢測玩傢什麼時候開始玩遊戲。因爲加載視頻後需要一些時間才能播放 – user1960169

回答

1

您可以AVPlayer的對象上添加一個觀察者這樣

player.addObserver(self, forKeyPath: "status", options: NSKeyValueObservingOptions.new, context: nil) 

,你可以檢查你的AVPlayer狀態變化這樣

func observeValueForKeyPath(keyPath: String?, ofObject object: AnyObject?, change: [String : AnyObject]?, context: UnsafeMutableRawPointer) { 
    if keyPath == "status" { 
     print(player.status) 
    } 
} 
+0

player .status == AVPlayerStatusReadyToPlay是否意味着視頻開始播放? – user1960169

+0

這意味着avplayer現在就開始玩了。 – Rajat

+0

這只是打印爲AVPlayerStatus – user1960169

1

這裏是我做過什麼以實際知道視頻何時開始(而不是僅當它準備好開始時)。

斯威夫特4

player = AVPlayer(url: URL(fileURLWithPath: path)) 
player.addObserver(self, forKeyPath: "rate", options: NSKeyValueObservingOptions.new, context: nil) 

override func observeValue(forKeyPath keyPath: String?, of object: Any?, change: [NSKeyValueChangeKey : Any]?, context: UnsafeMutableRawPointer?) { 
    if keyPath == "rate" { 
     if player.rate > 0 { 
      print("video started") 
     } 
    } 
} 
+0

可以在swift 4上運行嗎? –

0

從蘋果公司的docs You can observe an AVPlayerLayer object’s readyForDisplay property to be notified when the layer has user-visible content. In particular, you might insert the player layer into the layer tree only when there is something for the user to look at and then perform a transition from