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(), если это помогает


person Garret Kaye    schedule 06.04.2016    source источник
comment
попробуйте selectedTimescale:10000 и оставьте все остальное без изменений   -  person amergin    schedule 09.04.2016


Ответы (2)


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

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

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

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

person Hernan Arber    schedule 12.04.2016

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

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

Вот мой пример кода, который я поместил в пользовательский рендерер, унаследованный от 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.

person Vic Finney    schedule 09.09.2016