diff --git a/Model/Player/Backends/AVPlayerBackend.swift b/Model/Player/Backends/AVPlayerBackend.swift index 88af160d..844e828e 100644 --- a/Model/Player/Backends/AVPlayerBackend.swift +++ b/Model/Player/Backends/AVPlayerBackend.swift @@ -62,7 +62,10 @@ final class AVPlayerBackend: PlayerBackend { var aspectRatio: Double { #if os(iOS) - videoWidth! / videoHeight! + guard let videoWidth, let videoHeight else { + return VideoPlayerView.defaultAspectRatio + } + return videoWidth / videoHeight #else VideoPlayerView.defaultAspectRatio #endif @@ -170,6 +173,11 @@ final class AVPlayerBackend: PlayerBackend { avPlayer.replaceCurrentItem(with: nil) } + func cancelLoads() { + asset?.cancelLoading() + composition.cancelLoading() + } + func seek(to time: CMTime, seekType _: SeekType, completionHandler: ((Bool) -> Void)?) { guard !model.live else { return } diff --git a/Model/Player/Backends/MPVBackend.swift b/Model/Player/Backends/MPVBackend.swift index bb48dee3..8fbbb6a5 100644 --- a/Model/Player/Backends/MPVBackend.swift +++ b/Model/Player/Backends/MPVBackend.swift @@ -353,6 +353,10 @@ final class MPVBackend: PlayerBackend { isPlaying ? pause() : play() } + func cancelLoads() { + stop() + } + func stop() { client?.stop() } diff --git a/Model/Player/Backends/PlayerBackend.swift b/Model/Player/Backends/PlayerBackend.swift index 221205f9..d36dced7 100644 --- a/Model/Player/Backends/PlayerBackend.swift +++ b/Model/Player/Backends/PlayerBackend.swift @@ -69,6 +69,8 @@ protocol PlayerBackend { func setNeedsDrawing(_ needsDrawing: Bool) func setSize(_ width: Double, _ height: Double) + + func cancelLoads() } extension PlayerBackend { diff --git a/Model/Player/PlayerModel.swift b/Model/Player/PlayerModel.swift index f03f9a92..4c9202c5 100644 --- a/Model/Player/PlayerModel.swift +++ b/Model/Player/PlayerModel.swift @@ -498,6 +498,9 @@ final class PlayerModel: ObservableObject { let fromBackend: PlayerBackend = from == .appleAVPlayer ? avPlayerBackend : mpvBackend let toBackend: PlayerBackend = to == .appleAVPlayer ? avPlayerBackend : mpvBackend + toBackend.cancelLoads() + fromBackend.cancelLoads() + if !self.backend.canPlayAtRate(currentRate) { currentRate = self.backend.suggestedPlaybackRates.last { $0 < currentRate } ?? 1.0 }