2016-04-06 23 views
2

Im ein Problem mit der Suche nach mit AVPlayer.seekToTime hat, habe ich den Zeitindex, den ich wie diese in einer scrollViewDidScroll Methode suchen will:AVPlayer seekToTime nicht ordnungsgemäß funktionieren

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) 

} 

Aber das Video nicht fließt nett. Zum Beispiel, wenn Sie scrollen, möchte ich, dass das Video nur um 0,01 Sekunden vorwärts bewegt wird (das Video, das ich habe, ist wirklich kurz, nur etwa 2,0 Sekunden lang), aber wenn Sie weit genug scrollen, bewegt sich das Video fast eine ganze Sekunde vorwärts . Es ist wirklich abgehackt und ich bin mir nicht sicher, warum ich nicht sagen kann, sagen wir 1,00 Sekunden bis 1,01 Sekunden und haben das Bild, das den Zeitindex des Spielers darstellt. Ist das möglich? Was mache ich falsch? Bitte helfen Sie!

PS: Ich habe nie self.playerController.player nennen .play(), wenn dies hilft

+0

versuchen bevorzugteTimescale: 10000 und halten Sie alles andere gleich – amergin

Antwort

2

Vielleicht vor Ihrer Toleranz nicht richtig eingestellt ist. Versuchen Sie Folgendes:

statt Code:

let offsetTime = scrollView.contentOffset.y * 0.1 
    let seekTime : CMTime = CMTimeMake(Double(offsetTime), 1000) 
self.playerController.player?.seekToTime(seekTime, toleranceBefore: kCMTimeZero, toleranceAfter: kCMTimeZero) 
  • der Zeitskala zeigt, wie viele Einheiten Sie
  • Auch pro Sekunde haben, sollten toleranceBefore AUCH sein kCMTimeZero

Hoffnung das hilft :-)

0

Hey Ich habe den obigen Code in einem Xamarin-Projekt mit O versucht ctane.Xam.Videoplayer: https://components.xamarin.com/view/video-player

Es funktionierte wirklich gut!

Hier ist mein Beispielcode, die ich in einem benutzerdefinierten Renderer stellen, die von VideoPlayerRenderer geerbt, die in den Namensraum Octane.Xam.VideoPlayer.iOS.Renderers gefunden werden kann:

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

Beachten Sie, dass Sie müssen Version 1.1.4 des Octane.Xam.VideoPlayers verwenden, um auf die NativeVideoPlayer-Eigenschaft des VideoPlayerRenderer zugreifen zu können. In Zukunft kann diese Eigenschaft in PlayerControl umbenannt werden.