Issue looping video non-stop | Swift

Viewed 48

Essentially I have the following function that plays through the footage once and stops - how can I continue to loop the playback non-stop. What can be done in this use case?

Below is what I currently have for playback:

func playVideo() {
    guard let path = Bundle.main.path(forResource: "intro", ofType: "mp4") else {
        return
    }
    
    let player = AVPlayer(url: URL(fileURLWithPath: path))
    let playerLayer = AVPlayerLayer(player: player)
    playerLayer.frame = self.view.bounds
    playerLayer.videoGravity = .resizeAspectFill
    self.videoLayer.layer.addSublayer(playerLayer)
    
    player.play()

}
1 Answers

You could use the AVPlayerLooper and AVQueuePlayer to loop your media. The trick here is that you need the reference to AVPlayerLooper as an instance variable.

class ViewController: UIViewController {

    var playerLooper: AVPlayerLooper! // needs to be defined here

    func playVideo() {
        guard let path = Bundle.main.path(forResource: "intro", ofType: "mp4") else {
            return
        }
        
        let asset: AVAsset = AVAsset(url: URL(fileURLWithPath: path))
        let playerItem = AVPlayerItem(asset: asset)
        let queuePlayer = AVQueuePlayer(playerItem: playerItem)

        self.playerLooper = AVPlayerLooper(player: queuePlayer, templateItem: playerItem)
        let playerLayer = AVPlayerLayer(player: queuePlayer)
        playerLayer.frame = self.view.bounds
        playerLayer.videoGravity = .resizeAspectFill
        self.view.layer.addSublayer(playerLayer)
        
        queuePlayer.play()
    }
}
Related