diff --git a/Sora/Utils/MediaPlayer/CustomPlayer/CustomPlayer.swift b/Sora/Utils/MediaPlayer/CustomPlayer/CustomPlayer.swift index 7f0c368..30b8552 100644 --- a/Sora/Utils/MediaPlayer/CustomPlayer/CustomPlayer.swift +++ b/Sora/Utils/MediaPlayer/CustomPlayer/CustomPlayer.swift @@ -190,7 +190,6 @@ class CustomMediaPlayerViewController: UIViewController, UIGestureRecognizerDele view.backgroundColor = .black setupHoldGesture() - setInitialPlayerRate() loadSubtitleSettings() setupPlayerViewController() setupControls() @@ -226,7 +225,6 @@ class CustomMediaPlayerViewController: UIViewController, UIGestureRecognizerDele volumeViewModel.value = Double(audioSession.outputVolume) - volumeObserver = audioSession.observe(\.outputVolume, options: [.new]) { [weak self] session, change in guard let newVol = change.newValue else { return } DispatchQueue.main.async { @@ -240,8 +238,6 @@ class CustomMediaPlayerViewController: UIViewController, UIGestureRecognizerDele playerViewController.allowsVideoFrameAnalysis = false } - player.play() - if let url = subtitlesURL, !url.isEmpty { subtitlesLoader.load(from: url) } @@ -293,16 +289,30 @@ class CustomMediaPlayerViewController: UIViewController, UIGestureRecognizerDele } } + override func viewDidAppear(_ animated: Bool) { + super.viewDidAppear(animated) + player?.play() + setInitialPlayerRate() + } + override func viewWillAppear(_ animated: Bool) { super.viewWillAppear(animated) - NotificationCenter.default.addObserver(self, - selector: #selector(playerItemDidChange), - name: .AVPlayerItemNewAccessLogEntry, - object: nil) - + NotificationCenter.default.addObserver(self, selector: #selector(playerItemDidChange), name: .AVPlayerItemNewAccessLogEntry, object: nil) skip85Button?.isHidden = !isSkip85Visible } + override func viewDidDisappear(_ animated: Bool) { + super.viewDidDisappear(animated) + if let playbackSpeed = player?.rate { + UserDefaults.standard.set(playbackSpeed, forKey: "lastPlaybackSpeed") + } + player?.pause() + if let timeObserverToken = timeObserverToken { + player?.removeTimeObserver(timeObserverToken) + self.timeObserverToken = nil + } + } + override func viewWillDisappear(_ animated: Bool) { super.viewWillDisappear(animated) @@ -1098,7 +1108,7 @@ class CustomMediaPlayerViewController: UIViewController, UIGestureRecognizerDele let finalSkip = holdValue > 0 ? holdValue : 30 currentTimeVal = max(currentTimeVal - finalSkip, 0) player.seek(to: CMTime(seconds: currentTimeVal, preferredTimescale: 600)) { [weak self] finished in - guard let self = self else { return } + guard self != nil else { return } } } } @@ -1109,7 +1119,7 @@ class CustomMediaPlayerViewController: UIViewController, UIGestureRecognizerDele let finalSkip = holdValue > 0 ? holdValue : 30 currentTimeVal = min(currentTimeVal + finalSkip, duration) player.seek(to: CMTime(seconds: currentTimeVal, preferredTimescale: 600)) { [weak self] finished in - guard let self = self else { return } + guard self != nil else { return } } } } @@ -1119,7 +1129,7 @@ class CustomMediaPlayerViewController: UIViewController, UIGestureRecognizerDele let finalSkip = skipValue > 0 ? skipValue : 10 currentTimeVal = max(currentTimeVal - finalSkip, 0) player.seek(to: CMTime(seconds: currentTimeVal, preferredTimescale: 600)) { [weak self] finished in - guard let self = self else { return } + guard self != nil else { return } } } @@ -1128,7 +1138,7 @@ class CustomMediaPlayerViewController: UIViewController, UIGestureRecognizerDele let finalSkip = skipValue > 0 ? skipValue : 10 currentTimeVal = min(currentTimeVal + finalSkip, duration) player.seek(to: CMTime(seconds: currentTimeVal, preferredTimescale: 600)) { [weak self] finished in - guard let self = self else { return } } + guard self != nil else { return } } } @objc func handleDoubleTap(_ gesture: UITapGestureRecognizer) {