AVPlayer 跳过特定时间

AVPlayer skip by a specific time

我正在寻找制作功能的解决方案,例如每次用户点击按钮时转发 AVPlayer 中视频的 10%(10% + 下一次点击另外 10% + 另外 10%下一次点击等)从视频的当前状态。到目前为止,我已经找到了一个 seek(to:CMTimeMakeWithSeconds(seconds: Float64, preferredTimescale: Int32) ,但是它每次都会将视频移动到特定时间,而不是特定时间。

有什么建议吗?

你只需要做几个简单的数学步骤,在 Swift 3 它应该像这样:

private func skipBy(percentage: Float64) {

    guard let durationTime = player.currentItem?.duration else { return }

    // Percentage of duration
    let percentageTime = CMTimeMultiplyByFloat64(durationTime, percentage)

    guard percentageTime.isValid && percentageTime.isNumeric else { return }

    // Percentage plust current time
    var targetTime = player.currentTime() + percentageTime
    targetTime = targetTime.convertScale(durationTime.timescale, method: .default)

    // Sanity checks
    guard targetTime.isValid && targetTime.isNumeric else { return }

    if targetTime > durationTime {
        targetTime = durationTime // seek to end
    }

    player.seek(to: targetTime)
}

有关 AVPlayer 的一个很好的例子,请参阅社区开发的开源非官方 WWDC app