2017-07-16 4 views
0

Je cherche une solution pour faire une fonction, qui transfère la vidéo dans AVPlayer par exemple 10% de la vidéo chaque fois que l'utilisateur clique sur le bouton (10% + 10% d'un autre clic) + un autre 10% cliquez sur etc) à partir de l'état actuel de la vidéo. Jusqu'à présent, j'ai trouvé un seek(to:CMTimeMakeWithSeconds(seconds: Float64, preferredTimescale: Int32), mais il déplace la vidéo à une heure spécifique à chaque fois, pas à un moment précis.AVPlayer sauter à un moment précis

Des suggestions, s'il vous plaît?

Répondre

1

Vous avez juste besoin de faire quelques étapes simples de mathématiques, à Swift 3 devrait quelque chose comme ceci:

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) 
} 

Pour un excellent exemple d'un AVPlayer en action, voir l'open source, développé par la communauté, non officielle WWDC app.