From 6c12152f8172600c28ce7858be1fde262a9e6d00 Mon Sep 17 00:00:00 2001 From: Yu Sung Date: Wed, 18 Dec 2024 17:38:07 +0900 Subject: [PATCH] =?UTF-8?q?=EC=9E=A0=EA=B8=88=ED=99=94=EB=A9=B4=20?= =?UTF-8?q?=ED=94=8C=EB=A0=88=EC=9D=B4=EC=96=B4=20-=20=EC=9D=B4=EB=AF=B8?= =?UTF-8?q?=EC=A7=80=20=EB=8B=A4=EC=9A=B4=EB=A1=9C=EB=93=9C=20Kingfisher?= =?UTF-8?q?=EB=A1=9C=20=EB=B3=80=EA=B2=BD=20-=20=EC=8B=9C=EA=B0=84=20?= =?UTF-8?q?=ED=91=9C=EC=8B=9C=20player=EC=97=90=EC=84=9C=20=EB=B6=88?= =?UTF-8?q?=EB=9F=AC=EC=98=A4=EC=A7=80=20=EC=95=8A=EA=B3=A0=20=ED=94=8C?= =?UTF-8?q?=EB=A0=88=EC=9D=B4=EC=96=B4=20=ED=99=94=EB=A9=B4=EC=97=90=20?= =?UTF-8?q?=ED=91=9C=EC=8B=9C=ED=95=98=EB=8A=94=20=ED=94=84=EB=A1=9C?= =?UTF-8?q?=ED=8D=BC=ED=8B=B0=EB=A1=9C=20=EC=8B=9C=EA=B0=84=EC=9D=84=20?= =?UTF-8?q?=ED=91=9C=EC=8B=9C=ED=95=98=EB=8F=84=EB=A1=9D=20=EC=88=98?= =?UTF-8?q?=EC=A0=95?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../Detail/ContentDetailPlayView.swift | 1 - .../Player/ContentPlayerPlayManager.swift | 62 +++++++------------ 2 files changed, 23 insertions(+), 40 deletions(-) diff --git a/SodaLive/Sources/Content/Detail/ContentDetailPlayView.swift b/SodaLive/Sources/Content/Detail/ContentDetailPlayView.swift index db334f5..7a14f8c 100644 --- a/SodaLive/Sources/Content/Detail/ContentDetailPlayView.swift +++ b/SodaLive/Sources/Content/Detail/ContentDetailPlayView.swift @@ -55,7 +55,6 @@ struct ContentDetailPlayView: View { } else if audioContent.releaseDate == nil && !isAlertPreview || (audioContent.isActivePreview && !audioContent.contentUrl.trimmingCharacters(in: .whitespacesAndNewlines).isEmpty) { Image(isPlaying() ? "btn_audio_content_pause" : isAlertPreview ? "btn_audio_content_preview_play" : "btn_audio_content_play") .onTapGesture { - ContentPlayManager.shared.stopAudio() ContentPlayerPlayManager.shared.resetPlayer() if isPlaying() { diff --git a/SodaLive/Sources/Content/Player/ContentPlayerPlayManager.swift b/SodaLive/Sources/Content/Player/ContentPlayerPlayManager.swift index 644e0ec..5f54e26 100644 --- a/SodaLive/Sources/Content/Player/ContentPlayerPlayManager.swift +++ b/SodaLive/Sources/Content/Player/ContentPlayerPlayManager.swift @@ -10,6 +10,8 @@ import AVKit import MediaPlayer import Combine +import Kingfisher + final class ContentPlayerPlayManager: NSObject, ObservableObject { static let shared = ContentPlayerPlayManager() @@ -261,29 +263,23 @@ final class ContentPlayerPlayManager: NSObject, ObservableObject { return } - // URLSession을 사용하여 비동기적으로 이미지 다운로드 - URLSession.shared.dataTask(with: url) { [weak self] data, _, error in - if let error = error { - print("앨범 아트 다운로드 실패: \(error.localizedDescription)") - DispatchQueue.main.async { - self?.registerNowPlayingInfoCenter(with: nil) // 앨범 아트 없이 업데이트 - } - return + let processor = DownsamplingImageProcessor(size: CGSize(width: 240, height: 240)) + + KingfisherManager.shared.retrieveImage( + with: url, + options: [ + .processor(processor), + .scaleFactor(UIScreen.main.scale), + .cacheOriginalImage + ] + ) { [weak self] result in + switch result { + case .success(let value): + self?.registerNowPlayingInfoCenter(with: value.image) + case .failure(let error): + self?.registerNowPlayingInfoCenter(with: nil) } - - guard let data = data, let image = UIImage(data: data) else { - print("이미지 데이터를 가져오지 못했습니다.") - DispatchQueue.main.async { - self?.registerNowPlayingInfoCenter(with: nil) // 앨범 아트 없이 업데이트 - } - return - } - - // 성공적으로 다운로드된 이미지를 사용 - DispatchQueue.main.async { - self?.registerNowPlayingInfoCenter(with: image) - } - }.resume() + } } private func registerNowPlayingInfoCenter(with albumArtImage: UIImage?) { @@ -298,13 +294,12 @@ final class ContentPlayerPlayManager: NSObject, ObservableObject { nowPlayingInfo[MPMediaItemPropertyArtwork] = artwork } + nowPlayingInfo[MPMediaItemPropertyPlaybackDuration] = duration + nowPlayingInfo[MPNowPlayingInfoPropertyElapsedPlaybackTime] = currentTime + if let player = player { - // 콘텐츠 총 길이 - nowPlayingInfo[MPMediaItemPropertyPlaybackDuration] = player.currentItem?.asset.duration.seconds ?? .zero // 콘텐츠 재생 시간에 따른 progressBar 초기화 nowPlayingInfo[MPNowPlayingInfoPropertyPlaybackRate] = player.rate - // 콘텐츠 현재 재생시간 - nowPlayingInfo[MPNowPlayingInfoPropertyElapsedPlaybackTime] = player.currentTime().seconds } center.nowPlayingInfo = nowPlayingInfo @@ -325,25 +320,14 @@ final class ContentPlayerPlayManager: NSObject, ObservableObject { return .success } - center.seekForwardCommand.isEnabled = true - center.seekForwardCommand.addTarget { [unowned self] (commandEvent) -> MPRemoteCommandHandlerStatus in - self.playNextContent() - return .success - } - - center.seekBackwardCommand.isEnabled = true - center.seekBackwardCommand.addTarget { [unowned self] (commandEvent) -> MPRemoteCommandHandlerStatus in - self.playPreviousContent() - return .success - } + center.seekForwardCommand.isEnabled = false + center.seekBackwardCommand.isEnabled = false } private func unRegisterRemoteControlEvents() { let center = MPRemoteCommandCenter.shared() center.playCommand.removeTarget(nil) center.pauseCommand.removeTarget(nil) - center.skipForwardCommand.removeTarget(nil) - center.skipBackwardCommand.removeTarget(nil) UIApplication.shared.endReceivingRemoteControlEvents() } }