2016-04-06 15 views
2

ImはAVPlayer.seekToTimeを求めているとの問題を抱えて動作していない、私はこのようなscrollViewDidScrollメソッド内に模索したい時間インデックスがあります。AVPlayer seekToTime適切

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秒前に移動します。それは本当に不安定で、なぜ私は1.00秒から1.01秒と言うのが好きではなく、プレーヤーの時間インデックスを表す画像を動かすことができないのか分かりません。これは可能ですか?私は間違って何をしていますか?助けてください!

PS:?私はself.playerController.playerを呼び出すことはありません.playは()これは

+0

tryTimescale:10000と他のすべてを同じに保つ – amergin

答えて

2

は多分前に、あなたの許容範囲が右に設定されていない場合に役立ちます。次のことを試してください:

代わりにあなたのコードの:

let offsetTime = scrollView.contentOffset.y * 0.1 
    let seekTime : CMTime = CMTimeMake(Double(offsetTime), 1000) 
self.playerController.player?.seekToTime(seekTime, toleranceBefore: kCMTimeZero, toleranceAfter: kCMTimeZero) 
  • 時間スケールはまた、toleranceBeforeもkCMTimeZero

希望する必要がありますあなたが

  • 秒あたりに持っているどのように多くのユニット伝えますこれは助けてくれます:-)

    0

    ちょっと、Oを使ってXamarinプロジェクトで上記のコードを試しましたctane.Xam.Videoplayer:https://components.xamarin.com/view/video-player

    本当にうまくいった!ここで

    は、私は、名前空間のOctane.Xam.VideoPlayer.iOS.Renderersで見つけることができVideoPlayerRendererから継承されたカスタムレンダラに入れ、私のサンプルコードです:

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

    は、あなたが意志を覚えておいてくださいVideoPlayerRendererのNativeVideoPlayerプロパティにアクセスするには、Octane.Xam.VideoPlayerのバージョン1.1.4を使用する必要があります。将来、このプロパティの名前をPlayerControlに変更することができます。