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。
我正在寻找制作功能的解决方案,例如每次用户点击按钮时转发 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。