AVPlayer seekToTime 无法正常工作

AVPlayer seekToTime not working properly

我在使用 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()

可能是你之前的容忍度没设置好。尝试以下操作:

而不是您的代码:

  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

希望这对您有所帮助:-)

嘿,我使用 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。