Skip to content
Franken Zeng edited this page May 15, 2017 · 4 revisions

播放跳转seek

缓存内Seek是指用户Seek的目标位置在播放器的缓存内时,可直接Seek值目标位置

金山云播放SDK默认支持cache内seek

1. 缓存内seek

下面简单对比普通Seek缓存内Seek的特点

1.1 普通Seek

播放器原有的Seek操作大致分为以下三个步骤:

  1. 清除已经缓存的数据
  2. 找到离Seek目标位置最近的关键帧,以该关键帧为最终Seek的目标位置
  3. 请求最终Seek目标位置的数据

点播场景下,播放器会缓存较多数据,这样操作可能会重复下载部分数据,在网络较差的情况下会引发卡顿,用户体验并不是非常好。

1.2 缓存内Seek

该功能可大致分为两个步骤:

  1. Seek目标位置在播放器的缓存内,则会使用缓存内Seek
  2. 反之则如同普通Seek

2. seek的两个接口

播放点播文件时可以通过以下方式调整播放进度和位置。当前提供两种seek方式:

  • 普通seek,在指定seek点前寻找关键帧。seek位置和起播位置会有误差,误差最大在一个gop。
  • 精准seek,拖动到哪就从哪开播,但是seek过程略耗时,没有普通seek反应快

3. 普通seek

与MPMoviePlayerController相同的属性 @property (nonatomic) NSTimeInterval currentPlaybackTime

3.1 示例代码

if (_player) {
     _player.currentPlaybackTime = 200;        //播放进度跳转到200s处
}

4. 精确定位

– seekTo:accurate:

因为currentPlaybackTime属性进行跳转定位时依赖的是视频关键帧,当文件总时长较小或视频关键帧间隔较大时,无法做到精确定位,所以v1.9.1版本SDK中新增一个跳转函数。

  • accurate设置为YES时为精确定位
  • accurate设置为NO时功能等同于currentPlaybackTime

4.1 示例代码

if (_player) {
     [_player seekTo:10 accurate:YES];		//播放进度跳转到10s处
}
Clone this wiki locally