2016-07-28 39 views
1

Ich verwende den folgenden Code, um ein Video aus meiner Bibliothek zu laden und danach abzuspielen. Mein Problem ist, dass es sehr langsam ist und so muss ich ungefähr 10 Sekunden auf die Wiederholung warten und selbst dann funktioniert es nicht gut.Swift Video-Wiedergabe dauert lange

func showVideo(obj: AnyObject!) { 
    manager.requestAVAssetForVideo(obj as! PHAsset, options: videoOptions, resultHandler: {(avAsset: AVAsset?, audioMix: AVAudioMix?, info: [NSObject : AnyObject]?) -> Void in 
     self.url = (avAsset as! AVURLAsset).URL 
     self.playVideo() 
    }) 
} 

// plays the video 
private func playVideo() { 
    asset = AVAsset(URL: url!) 
    playerItem = AVPlayerItem(asset: asset!) 

    player = AVPlayer(playerItem: self.playerItem!) 

    playerLayer = AVPlayerLayer(player: self.player) 
    playerLayer.frame = view.frame 
    view.layer.addSublayer(self.playerLayer!) 

    player!.play() 
} 

Und ich bekomme das Objekt aus:

let allVideo = PHAsset.fetchAssetsWithMediaType(.Video, options: fetchOptions) 
showVideo(allVideo.lastObject) 

Antwort

0

Um Schleife Video verwende ich die Meldung:

NSNotificationCenter.defaultCenter().addObserver(self 
    , selector: #selector(playerItemDidReachEnd(_:)) 
    , name: AVPlayerItemDidPlayToEndTimeNotification 
    , object: player.currentItem) 

und die Funktion:

func playerItemDidReachEnd(notification: NSNotification) { 
    if let playerItem = notification.object { 
     playerItem.seekToTime(kCMTimeZero) 
    } 
} 
+0

und wo sollte ich den NSNotificationCenter-Code hinzufügen? – mafioso

+0

Sie könnten es in playVideo() setzen, aber vergessen Sie nicht, den Beobachter zu entfernen, wenn Sie playVideo() mehr als einmal aufrufen möchten – richy