Я некоторое время искал, как правильно это сделать.Я посмотрел здесь и здесь .И воспользовался верхним ответом здесь , чтобы попытаться выполнить это, однако для меня записанное видео даже не начинает зацикливаться.Первый кадр отображается, но не воспроизводит видео, поэтому мне интересно, что не так.
func playRecordedVideo(video: URL) {
thumbImage = nil
playerQueue = AVQueuePlayer(playerItem: AVPlayerItem(url: video))
playerLayer = AVPlayerLayer(player: playerQueue)
playerLayer.frame = (camBaseLayer?.bounds)!
playerLayer?.layoutIfNeeded()
playerLayer.videoGravity = AVLayerVideoGravity.resizeAspectFill
playerLayer.isHidden = false
camBaseLayer?.layer.insertSublayer(playerLayer, above: previewLayer)
playerItem1 = AVPlayerItem(url: video)
playerLooper = AVPlayerLooper(player: playerQueue, templateItem: playerItem1)
self.playerQueue?.play()
}
В приведенной выше функции я попытался выполнить следующее:
var num = 0
if num == 0 {
self.playerQueue?.play()
num+=1
} else {
NotificationCenter.default.addObserver(forName: NSNotification.Name.AVPlayerItemDidPlayToEndTime, object: self.playerQueue.currentItem, queue: nil, using: { (_) in
DispatchQueue.main.async {
self.playerQueue.seek(to: CMTime.zero)
self.playerQueue.play()
}
})
}
Однако это только приводит к тому, что видео даже не воспроизводится, когда оно появляется.
цель состоит в том, чтобы предотвратить "пробел", который вы видите при зацикливании видео
Обновление :
Хорошо, так что фактически переменная num должна быть вне функции, которая затемзаставить код NS работать, но это приводит к зависанию представления, как это было раньше.
Обновление 2:
Мне пока не удалось найти решение этой проблемы.Но то, что наверняка, это то, что
` NotificationCenter.default.addObserver(forName: NSNotification.Name.AVPlayerItemDidPlayToEndTime, object: self.playerQueue.currentItem, queue: nil, using: { (_) in
DispatchQueue.main.async {
self.playerQueue.seek(to: CMTime.zero)
self.playerQueue.play()
}
})
`Вызывает видео даже не зацикливаться.Любая причина, почему это происходит?