From 815d0b3ae895ae40d62145bcc0d4454100d896ff Mon Sep 17 00:00:00 2001 From: Arkadiusz Fal Date: Sun, 13 Nov 2022 13:28:25 +0100 Subject: [PATCH] Cancel loading assets on switching backend --- Model/Player/Backends/AVPlayerBackend.swift | 10 +++++++++- Model/Player/Backends/MPVBackend.swift | 4 ++++ Model/Player/Backends/PlayerBackend.swift | 2 ++ Model/Player/PlayerModel.swift | 3 +++ 4 files changed, 18 insertions(+), 1 deletion(-) 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 }