From 0d5a907517f9b9295dcb4b178a4b4c609c737c6c Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Toni=20F=C3=B6rster?= Date: Wed, 1 May 2024 17:01:54 +0200 Subject: [PATCH] preserve time on stream change fixes #371 --- Model/Player/Backends/AVPlayerBackend.swift | 14 ++++++++------ Model/Player/Backends/MPVBackend.swift | 2 +- 2 files changed, 9 insertions(+), 7 deletions(-) diff --git a/Model/Player/Backends/AVPlayerBackend.swift b/Model/Player/Backends/AVPlayerBackend.swift index 7e71208f..2b22cba5 100644 --- a/Model/Player/Backends/AVPlayerBackend.swift +++ b/Model/Player/Backends/AVPlayerBackend.swift @@ -134,7 +134,7 @@ final class AVPlayerBackend: PlayerBackend { _ stream: Stream, of video: Video, preservingTime: Bool, - upgrading _: Bool + upgrading: Bool ) { isLoadingVideo = true @@ -145,7 +145,7 @@ final class AVPlayerBackend: PlayerBackend { _ = url.startAccessingSecurityScopedResource() } - loadSingleAsset(url, stream: stream, of: video, preservingTime: preservingTime) + loadSingleAsset(url, stream: stream, of: video, preservingTime: preservingTime, upgrading: upgrading) } else { model.logger.info("playing stream with many assets:") model.logger.info("composition audio asset: \(stream.audioAsset.url)") @@ -219,7 +219,8 @@ final class AVPlayerBackend: PlayerBackend { _ url: URL, stream: Stream, of video: Video, - preservingTime: Bool = false + preservingTime: Bool = false, + upgrading: Bool = false ) { asset?.cancelLoading() asset = AVURLAsset(url: url) @@ -228,7 +229,7 @@ final class AVPlayerBackend: PlayerBackend { switch self?.asset?.statusOfValue(forKey: "duration", error: &error) { case .loaded: DispatchQueue.main.async { [weak self] in - self?.insertPlayerItem(stream, for: video, preservingTime: preservingTime) + self?.insertPlayerItem(stream, for: video, preservingTime: preservingTime, upgrading: upgrading) } case .failed: DispatchQueue.main.async { [weak self] in @@ -303,7 +304,8 @@ final class AVPlayerBackend: PlayerBackend { private func insertPlayerItem( _ stream: Stream, for video: Video, - preservingTime: Bool = false + preservingTime: Bool = false, + upgrading: Bool = false ) { removeItemDidPlayToEndTimeObserver() @@ -387,7 +389,7 @@ final class AVPlayerBackend: PlayerBackend { } if preservingTime { - if model.preservedTime.isNil { + if model.preservedTime.isNil || upgrading { model.saveTime { replaceItemAndSeek() startPlaying() diff --git a/Model/Player/Backends/MPVBackend.swift b/Model/Player/Backends/MPVBackend.swift index c8457946..ed85aa60 100644 --- a/Model/Player/Backends/MPVBackend.swift +++ b/Model/Player/Backends/MPVBackend.swift @@ -330,7 +330,7 @@ final class MPVBackend: PlayerBackend { } if preservingTime { - if model.preservedTime.isNil { + if model.preservedTime.isNil || upgrading { model.saveTime { replaceItem(self.model.preservedTime) }