AVPlayer seekToTime无法正常工作

时间:2016-04-06 23:33:33

标签: swift avplayer seek cmtime

我遇到了使用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 个答案:

答案 0 :(得分:8)

也许你之前的宽容是不对的。尝试以下:

代替您的代码:

  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

希望这有助于: - )

答案 1 :(得分:0)

嘿,我使用Octane.Xam.Videoplayer在Xamarin项目中尝试了上述代码: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);
    }

请记住,您必须使用Octane.Xam.VideoPlayer的1.1.4版才能访问VideoPlayerRenderer的NativeVideoPlayer属性。将来,此属性可能会重命名为PlayerControl。