How do you loop AVPlayer in Swift?

后端 未结 8 2046
后悔当初
后悔当初 2020-12-02 15:15

Simple question I can\'t seem to find an answer to for some reason.

How do you loop AVPlayer in Swift?

numberOfLoops = -1 only works for AVAudioPlayer

<
8条回答
  •  盖世英雄少女心
    2020-12-02 15:53

    Swift 5 (iOS 10.0+)

    var playerLooper: AVPlayerLooper! // should be defined in class
    var queuePlayer: AVQueuePlayer!
    ...
    
    let asset: AVAsset = ... // AVAsset with its 'duration' property value loaded
    let playerItem = AVPlayerItem(asset: asset)
    self.queuePlayer = AVQueuePlayer(playerItem: playerItem)
    
    // Create a new player looper with the queue player and template item
    self.playerLooper = AVPlayerLooper(player: queuePlayer, templateItem: playerItem)
    

    < iOS 10.0

    All above works in any iOS version. But, for < iOS 10.0 it's the only solution.

    Swift 4

    var player: AVPlayer!
    
    ...
    
    NotificationCenter.default.addObserver(forName: .AVPlayerItemDidPlayToEndTime, object: self.player.currentItem, queue: .main) { [weak self] _ in
        self?.player?.seek(to: CMTime.zero)
        self?.player?.play()
    }
    

    Swift 3

    NotificationCenter.default.addObserver(forName: .AVPlayerItemDidPlayToEndTime, object: self.player.currentItem, queue: .main) { [weak self] _ in
        self?.player?.seek(to: kCMTimeZero)
        self?.player?.play()
    }
    

    Swift 2

    After AVPlayerItem is configured and player is created:

    var player: AVPlayer!
    
    ...
    
    // Invoke after player is created and AVPlayerItem is specified
    NSNotificationCenter.defaultCenter().addObserver(self,
        selector: "playerItemDidReachEnd:",
        name: AVPlayerItemDidPlayToEndTimeNotification,
        object: self.player.currentItem)
    
    ...
     
    func playerItemDidReachEnd(notification: NSNotification) {
        self.player.seekToTime(kCMTimeZero)
        self.player.play()
    }
    

    Don't forget to import AVFoundation

提交回复
热议问题