AVPlayer seekToTime не работает должным образом

У меня возникла проблема с поиском с AVPlayer.seekToTime, у меня есть индекс времени, который я хочу искать внутри метода scrollViewDidScroll следующим образом:

func scrollViewDidScroll(scrollView: UIScrollView) {
    let offsetTime = scrollView.contentOffset.y * 0.1

    self.playerController.player?.seekToTime(CMTime(seconds: Double(offsetTime), preferredTimescale: 10), toleranceBefore: kCMTimePositiveInfinity, toleranceAfter: kCMTimeZero)

}

Но видео не течет красиво. Например, когда вы прокручиваете, я хочу, чтобы видео двигалось только вперед на 0,01 секунды (у меня видео очень короткое, всего около 2,0 секунд), но когда вы прокручиваете достаточно далеко, вместо этого видео движется вперед почти на целую секунду., Это действительно изменчиво, и я не уверен, почему я не могу стремиться к тому, чтобы сказать, например, от 1,00 секунды до 1,01 секунды и получить изображение, представляющее индекс времени при движении игрока. Это возможно? Что я делаю неправильно? Пожалуйста помоги!

PS: я никогда не вызываю self.playerController.player?.Play(), если это помогает

2 ответа

Решение

Может быть, ваша терпимость раньше не установлена ​​правильно. попробуйте следующее:

вместо вашего кода:

  let offsetTime = scrollView.contentOffset.y * 0.1
  let seekTime : CMTime = CMTimeMake(Double(offsetTime), 1000)
self.playerController.player?.seekToTime(seekTime, toleranceBefore: kCMTimeZero, toleranceAfter: kCMTimeZero)
  • шкала времени показывает, сколько единиц у вас в секунду
  • Кроме того, допуск перед должен также быть kCMTimeZero

надеюсь это поможет:-)

Привет, я попробовал приведенный выше код в проекте Xamarin, используя Octane.Xam.Videoplayer: https://components.xamarin.com/view/video-player

Это сработало очень хорошо!

Вот мой пример кода, который я поместил в Custom Renderer, унаследованный от VideoPlayerRenderer, который можно найти в пространстве имен Octane.Xam.VideoPlayer.iOS.Renderers:

public void CustomSeek(int seekTime)
    {
        CMTime tm = new CMTime(seekTime, 10000);
        if(NativeVideoPlayer.Player != null)
            NativeVideoPlayer.Player.Seek(tm, CMTime.Zero, CMTime.Zero);
    }

Помните, что вам придется использовать версию 1.1.4 Octane.Xam.VideoPlayer, чтобы получить доступ к свойству NativeVideoPlayer объекта VideoPlayerRenderer. В будущем это свойство может быть переименовано в PlayerControl.

Другие вопросы по тегам