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