Как плавно воспроизводить зацикленное видео с переменной скоростью (медленно / быстро) в Swift

Я использую AVQueuePlayer с AVPlayerLooper для зацикливания 2-секундного видео. Это видео движения вентилятора (видео слышно). Я хочу замедлить или ускорить воспроизведение видео и воспроизводить его в цикле без каких-либо задержек между воспроизведениями. В обычном режиме воспроизведение видео плавное, без задержек. Но когда я меняю player.rate на любое значение, кроме 1(в моем случае 0,5 и 1,5), возникает заметное отставание.

func createFanPlayer(videoName: String) -> AVQueuePlayer{
        let videoFormat = "mp4"
        let path = Bundle.main.path(forResource: videoName, ofType: videoFormat)
        let pathURL = URL(fileURLWithPath: path!)
        let fanPlayer = AVQueuePlayer()
        fanPlayerLayer = AVPlayerLayer(player: fanPlayer)
        fanPlayerItem = AVPlayerItem(url: pathURL)
        fanPlayerlayerLooper = AVPlayerLooper(player: fanPlayer, templateItem: fanPlayerItem)
        fanPlayerLayer.frame = fanVideoShowView.bounds
        
        fanPlayerLayer.videoGravity = AVLayerVideoGravity.resizeAspectFill
        fanVideoShowView.layer.insertSublayer(fanPlayerLayer, at: 1)
        
        return fanPlayer
    }

Затем я проигрываю видео с этим кодом

func play(){
        switch tapCount {
        case 0:
            playFanSlowSpeed()
            
        case 1:
            playFanMediumSpeed()
            
        case 2:
            playFanHighSpeed()
            
        default:
            return
        }
    }

пользователь может нажать кнопку несколько раз, чтобы изменить скорость с выключенной на медленную на быструю.

func playFanPlayer(){
        fanPlayer.play()
    }
    
    func playFanSlowSpeed(){
        update()
        playFanPlayer()
        fanPlayer.rate = 0.6
    }
    func playFanMediumSpeed(){
        update()
        fanPlayer.rate = 1
    }
    func playFanHighSpeed(){
        update()
        fanPlayer.rate = 1.4
    }

0 ответов

Другие вопросы по тегам