完成后如何使用AVQueuePlayer循环播放视频

时间:2020-10-31 21:30:52

标签: ios swift avplayer avkit avqueueplayer

我有一个URL数组,然后将其转换为AVPlayerItems数组,并使用AVQueuePlayer遍历视频-通常一次播放1-7个视频。但是,当它停止时,我不确定在用户切换到其他视图控制器之前如何再次启动它以播放相同的视频阵列。


in viewDidLoad this creates the array of playerItems 
    //creates playerItems to play videos in a queue
       postURLs?.forEach{(url) in
           let asset = AVAsset(url: url)
           let playerItem = AVPlayerItem(asset: asset)
           playerItems.append(playerItem)  
       }


   public func playVideo() {
           player = AVQueuePlayer(items: playerItems)
           player.seek(to: CMTime.init(value: 0, timescale: 1))
           playerLayer = AVPlayerLayer(player:player)
           playerLayer.frame = self.lifieView.frame
           lifieView.layer.addSublayer(playerLayer)
           player.play()
           //restart video maybe? Tested but did not work - hits function 
           NotificationCenter.default.addObserver(
               forName: .AVPlayerItemDidPlayToEndTime,
               object: nil,
               queue: nil) { [weak self] _ in self?.restart2() }
       
   }

//this is test function to restart (works with AVPlayer with single video)
private func restart2(){
    player.seek(to: CMTime.zero)
    player.play()
   }

1 个答案:

答案 0 :(得分:0)

经过大量研究和测试,我使它正常工作。 我所做的就是更改重新启动功能,首先从播放器中删除所有项目,然后遍历playerItems数组并将它们添加回队列中,然后让播放器从头开始。

func restartPlayer(){
        player.removeAllItems()
        playerItems.forEach{
            player.insert($0, after:nil)
        }
        player.seek(to: .zero)
        
    }