2016-11-24 2 views
4

Bonjour, j'ai défini ma valeur minimale de UISlider à 0.00. Ensuite, je définis sa valeur maximale de cette façon.Comment faire pour détecter AVPlayer effectivement commencé à jouer dans rapide

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 

Mais je reçois cette exception

*** 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 

Je sais après prepareForPlay() à jouer réelle, il faut un certain temps pour vraiment jouer la vidéo. Alors, comment puis-je détecter quand le lecteur a vraiment commencé à lire la vidéo? S'il vous plaît aidez-moi. Merci

+1

de Hope this helps: http://stackoverflow.com/questions/5401437/knowing-when-avplayer-object-is -play-to-play – nynohu

+0

Player.play() est une méthode qui lit votre fichier afin que vous puissiez le suivre –

+0

@HimanshuMoradiya yeas. Je veux détecter quand le joueur commence à jouer réellement. Parce que cela prend du temps à jouer après le chargement de la vidéo – user1960169

Répondre

1

Vous pouvez ajouter un observateur sur l'objet de votre AVPlayer comme celui-ci

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

et vous pouvez vérifier le changement d'état avec votre AVPlayer comme celui-ci

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

player .status == AVPlayerStatusReadyToPlay est-ce que cela signifie que la vidéo a commencé à être lue? – user1960169

+0

cela signifie que les joueurs commenceront à jouer maintenant. – Rajat

+0

Il suffit d'imprimer comme AVPlayerStatus – user1960169

1

Voici ce que je faisais pour savoir quand la vidéo a commencé (pas quand il est seulement prêt à démarrer).

Swift 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

Est-ce que cela peut marcher sur 4? –

0

De docs d'Apple: 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