CADisplayLink с AVQueuePlayer, как бороться с циклом видео? - PullRequest
0 голосов
/ 08 октября 2019

Я пытаюсь получить доступ к кадрам видео, которое я играю. В настоящее время это работает, используя 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, но это не сработало. Есть идеи?

...