Я пытаюсь получить доступ к кадрам видео, которое я играю. В настоящее время это работает, используя CADisplayLink
и AVPlayerItemVideoOutput
. Это выглядит так:
@objc private func readBuffer(_ sender: CADisplayLink) {
print("read buffer was called")
var currentTime = CMTime.invalid
let nextVSync = sender.timestamp + sender.duration
currentTime = videoOutput.itemTime(forHostTime: nextVSync)
print(currentTime)
}
Это работает при первом воспроизведении видео. Однако, как только видео воспроизводится снова (это QueuePlayer, который зацикливает одно видео непрерывно), currentTime возвращает 0 (CMTime(value: 0, timescale: 1, flags: __C.CMTimeFlags(rawValue: 3), epoch: 0)
)
Как я могу справиться с этой ситуацией? Есть ли способ "сбросить" CMTime или что-то? Мне нужен правильный кадр, даже когда видео воспроизводится снова. Я знаю, когда видео перестало воспроизводиться и, следовательно, когда оно начинается снова:
NotificationCenter.default.addObserver(self, selector: #selector(playerDidFinishPlaying), name: .AVPlayerItemDidPlayToEndTime, object: nil)
Здесь я попытался заново запустить CADisplayLink
, но это не сработало. Есть идеи?