我遇到了使用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()
答案 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)
希望这有助于: - )
答案 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。