2016-04-06 1 views
2

Im un problème avec la recherche avec AVPlayer.seekToTime, je l'index de temps que je veux chercher à l'intérieur d'une méthode scrollViewDidScroll comme ceci:AVPlayer seekToTime ne fonctionne pas correctement

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) 

} 

Mais la vidéo ne coule pas agréable. Par exemple, lorsque vous faites défiler, je veux que la vidéo n'avance que de 0,01 seconde (la vidéo que je possède n'est réellement longue que d'environ 2 secondes) mais lorsque vous faites défiler assez loin, la vidéo avance presque toute seconde . C'est vraiment saccadé et je ne suis pas sûr pourquoi je ne peux pas chercher à dire dire 1.00 secondes à 1.01 secondes et avoir l'image représentant l'index de temps sur le joueur bouge. Est-ce possible? Qu'est-ce que je fais mal? S'il vous plaît aider!

PS: Je n'appelle self.playerController.player .play() si cela aide

+0

essayez preferredTimescale: 10000 et gardez tout le reste identique – amergin

Répondre

2

Peut-être que votre tolérance avant est réglée ne va pas. effectuez les opérations suivantes:

au lieu de votre code:

let offsetTime = scrollView.contentOffset.y * 0.1 
    let seekTime : CMTime = CMTimeMake(Double(offsetTime), 1000) 
self.playerController.player?.seekToTime(seekTime, toleranceBefore: kCMTimeZero, toleranceAfter: kCMTimeZero) 
  • l'échelle de temps indique combien d'unités vous avez par seconde
  • En outre, toleranceBefore devrait également être kCMTimeZero

espoir cela aide :-)

0

Hey j'ai essayé le code ci-dessus dans un projet Xamarin en utilisant O ctane.Xam.Videoplayer: https://components.xamarin.com/view/video-player

Cela a très bien fonctionné!

Voici mon exemple de code que je mets dans un moteur de rendu personnalisé qui a hérité de VideoPlayerRenderer qui se trouve dans l'espace de noms 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); 
    } 

Gardez à l'esprit que vous devez utiliser la version 1.1.4 de Octane.Xam.VideoPlayer pour accéder à la propriété NativeVideoPlayer de VideoPlayerRenderer. À l'avenir, cette propriété peut être renommée en PlayerControl.