如何在 Xcode swift 5 中制作视频循环?

How to make a video loop in Xcode swift 5?

我想在我的应用程序中获取视频背景,并且我编写了以下代码。它运行一次然后停止。如何让视频永远重复播放?提前致谢。

@IBOutlet weak var videoLayer: UIView!
override func viewDidLoad() {
    super.viewDidLoad()
    playBackgroundVideo()
}
func playBackgroundVideo(){
   guard let path = Bundle.main.path(forResource: "City", ofType: "MOV") 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()
}

@objc func playerItemDidReachEnd(notification: Notification) {
        let p: AVPlayerItem = notification.object as! AVPlayerItem
    p.seek(to: .zero)
    }


}

尝试添加一个 notification 侦听器来触发 playerItemDidReachEnd 代码。
您可以通过在设置中加入 NotificationCenter.default.addObserver 来做到这一点。

没有测试你的代码,但你想要像这个例子这样的设置:

@IBOutlet weak var videoLayer: UIView!

var player: AVPlayer!

override func viewDidLoad() 
{
    super.viewDidLoad()
    playBackgroundVideo()
}

func playBackgroundVideo()
{
    guard let path = Bundle.main.path(forResource: "City", ofType: "MOV") else{ return }

    player = AVPlayer(url: URL(fileURLWithPath: path))
    let playerLayer = AVPlayerLayer(player: player)

    //# add a Listener 
    NotificationCenter.default.addObserver( self,
                                            selector: #selector(playerItemDidReachEnd),
                                            name: NSNotification.Name.AVPlayerItemDidPlayToEndTime,
                                            object: nil)

    playerLayer.frame = self.view.bounds
    playerLayer.videoGravity = .resizeAspectFill
    self.videoLayer.layer.addSublayer(playerLayer)
    player.play()
}

@objc func playerItemDidReachEnd(notification: Notification) 
{
    player.seek(to: CMTime.zero)
    player.play()
}