如何解决完成后如何使用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()
}
解决方法
经过大量研究和测试,我使它正常工作。 我所做的就是更改重新启动功能,首先从播放器中删除所有项目,然后遍历playerItems数组并将它们添加回队列中,然后让播放器从头开始。
func restartPlayer(){
player.removeAllItems()
playerItems.forEach{
player.insert($0,after:nil)
}
player.seek(to: .zero)
}
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。