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 {