From f78545baf900d8d4918d8d6834a23a8b4b957589 Mon Sep 17 00:00:00 2001 From: Arkadiusz Fal Date: Thu, 8 Jun 2023 12:22:34 +0200 Subject: [PATCH] Fix issue with AVPlayer rate restore --- Model/Player/Backends/AVPlayerBackend.swift | 9 +++++++-- Model/Player/PlayerModel.swift | 4 ++++ 2 files changed, 11 insertions(+), 2 deletions(-) diff --git a/Model/Player/Backends/AVPlayerBackend.swift b/Model/Player/Backends/AVPlayerBackend.swift index 21aaabde..a848d59b 100644 --- a/Model/Player/Backends/AVPlayerBackend.swift +++ b/Model/Player/Backends/AVPlayerBackend.swift @@ -160,7 +160,7 @@ final class AVPlayerBackend: PlayerBackend { return } - avPlayer.playImmediately(atRate: Float(model.currentRate)) + avPlayer.play() model.objectWillChange.send() } @@ -643,7 +643,12 @@ final class AVPlayerBackend: PlayerBackend { if player.timeControlStatus == .playing { self.model.objectWillChange.send() - if player.rate != Float(self.model.currentRate) { + if let rate = self.model.rateToRestore, player.rate != rate { + player.rate = rate + self.model.rateToRestore = nil + } + + if player.rate > 0, player.rate != Float(self.model.currentRate) { if self.model.avPlayerUsesSystemControls { self.model.currentRate = Double(player.rate) } else { diff --git a/Model/Player/PlayerModel.swift b/Model/Player/PlayerModel.swift index 628c9f50..4cba3b8d 100644 --- a/Model/Player/PlayerModel.swift +++ b/Model/Player/PlayerModel.swift @@ -183,6 +183,7 @@ final class PlayerModel: ObservableObject { var onPresentPlayer = [() -> Void]() var onPlayStream = [(Stream) -> Void]() + var rateToRestore: Float? private var remoteCommandCenterConfigured = false init() { @@ -542,6 +543,9 @@ final class PlayerModel: ObservableObject { if !self.backend.canPlayAtRate(currentRate) { currentRate = self.backend.suggestedPlaybackRates.last { $0 < currentRate } ?? 1.0 } + + self.rateToRestore = Float(currentRate) + self.backend.didChangeTo() if wasPlaying {