Home > Mobile >  Is there a way to make a video repeat in swift?
Is there a way to make a video repeat in swift?

Time:12-31

I added a video to my viewController() as a background and I want to loop it or in other words make it repeat itself forever. Here is all the code:

import UIKit
import AVKit
import AVFoundation

class ViewController: UIViewController {

override func viewDidLoad() {
    super.viewDidLoad()
    // Do any additional setup after loading the view.
}
override func viewDidAppear(_ animated: Bool) {
    super.viewDidAppear(true)
    let player = AVPlayer(url: URL(fileURLWithPath: Bundle.main.path(forResource: "background", ofType: "mp4")!))
    let layer = AVPlayerLayer(player: player)
    layer.frame = view.bounds
    layer.videoGravity = .resizeAspectFill
    layer.repeatCount = .greatestFiniteMagnitude
    layer.repeatDuration = .greatestFiniteMagnitude
    
    view.layer.addSublayer(layer)
    player.play()

}

}

When I run the app It only plays once and never repeats itself. Any suggestions? Thanks.

CodePudding user response:

One solution is to observe AVPlayerItemDidPlayToEndTime and then simply restart the video.

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

Don't forget to detach this observer whenever it's no longer necessary.

CodePudding user response:

Use an AVPlayerLooper. Its name tells you that this is exactly what it's for.

https://developer.apple.com/documentation/avfoundation/avplayerlooper

  • Related