parent
d77b83033d
commit
bfcb5798bd
|
@ -105,8 +105,8 @@ extension ContentPlayManager {
|
||||||
UIApplication.shared.beginReceivingRemoteControlEvents()
|
UIApplication.shared.beginReceivingRemoteControlEvents()
|
||||||
}
|
}
|
||||||
|
|
||||||
self.registerNowPlayingInfoCenter()
|
|
||||||
self.registerRemoteControlEvents()
|
self.registerRemoteControlEvents()
|
||||||
|
self.fetchAlbumArtAndUpdateNowPlayingInfo()
|
||||||
} catch {
|
} catch {
|
||||||
DispatchQueue.main.async {
|
DispatchQueue.main.async {
|
||||||
self.showError()
|
self.showError()
|
||||||
|
@ -193,7 +193,39 @@ extension ContentPlayManager {
|
||||||
self.resetAudioData()
|
self.resetAudioData()
|
||||||
}
|
}
|
||||||
|
|
||||||
private func registerNowPlayingInfoCenter() {
|
private func fetchAlbumArtAndUpdateNowPlayingInfo() {
|
||||||
|
guard let url = URL(string: coverImage) else {
|
||||||
|
print("잘못된 이미지 URL")
|
||||||
|
registerNowPlayingInfoCenter(with: nil) // 앨범 아트 없이 업데이트
|
||||||
|
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
|
||||||
|
}
|
||||||
|
|
||||||
|
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?) {
|
||||||
let center = MPNowPlayingInfoCenter.default()
|
let center = MPNowPlayingInfoCenter.default()
|
||||||
var nowPlayingInfo = center.nowPlayingInfo ?? [String: Any]()
|
var nowPlayingInfo = center.nowPlayingInfo ?? [String: Any]()
|
||||||
|
|
||||||
|
|
|
@ -106,6 +106,17 @@ final class ContentPlayerPlayManager: NSObject, ObservableObject {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
.store(in: &cancellables)
|
.store(in: &cancellables)
|
||||||
|
|
||||||
|
do {
|
||||||
|
let audioSession = AVAudioSession.sharedInstance()
|
||||||
|
try audioSession.setCategory(.playback, mode: .moviePlayback)
|
||||||
|
try audioSession.setActive(true)
|
||||||
|
|
||||||
|
self.registerRemoteControlEvents()
|
||||||
|
self.fetchAlbumArtAndUpdateNowPlayingInfo()
|
||||||
|
} catch {
|
||||||
|
DEBUG_LOG("Audio Session 설정 실패: \(error.localizedDescription)")
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
private func checkPlaybackStart(bufferedTime: Double, isLikelyToKeepUp: Bool) {
|
private func checkPlaybackStart(bufferedTime: Double, isLikelyToKeepUp: Bool) {
|
||||||
|
@ -247,16 +258,47 @@ final class ContentPlayerPlayManager: NSObject, ObservableObject {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
private func registerNowPlayingInfoCenter() {
|
private func fetchAlbumArtAndUpdateNowPlayingInfo() {
|
||||||
|
guard let url = URL(string: coverImageUrl) else {
|
||||||
|
print("잘못된 이미지 URL")
|
||||||
|
registerNowPlayingInfoCenter(with: nil) // 앨범 아트 없이 업데이트
|
||||||
|
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
|
||||||
|
}
|
||||||
|
|
||||||
|
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?) {
|
||||||
let center = MPNowPlayingInfoCenter.default()
|
let center = MPNowPlayingInfoCenter.default()
|
||||||
var nowPlayingInfo = center.nowPlayingInfo ?? [String: Any]()
|
var nowPlayingInfo = center.nowPlayingInfo ?? [String: Any]()
|
||||||
|
|
||||||
nowPlayingInfo[MPMediaItemPropertyTitle] = title
|
nowPlayingInfo[MPMediaItemPropertyTitle] = title
|
||||||
nowPlayingInfo[MPMediaItemPropertyArtist] = nickname
|
nowPlayingInfo[MPMediaItemPropertyArtist] = nickname
|
||||||
if let artworkURL = URL(string: coverImageUrl), let imageData = try? Data(contentsOf: artworkURL), let artworkImage = UIImage(data: imageData) {
|
|
||||||
let artwork = MPMediaItemArtwork(boundsSize: artworkImage.size) { size in
|
if let image = albumArtImage {
|
||||||
return artworkImage
|
let artwork = MPMediaItemArtwork(boundsSize: image.size) { _ in image }
|
||||||
}
|
|
||||||
nowPlayingInfo[MPMediaItemPropertyArtwork] = artwork
|
nowPlayingInfo[MPMediaItemPropertyArtwork] = artwork
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -275,21 +317,25 @@ final class ContentPlayerPlayManager: NSObject, ObservableObject {
|
||||||
private func registerRemoteControlEvents() {
|
private func registerRemoteControlEvents() {
|
||||||
let center = MPRemoteCommandCenter.shared()
|
let center = MPRemoteCommandCenter.shared()
|
||||||
|
|
||||||
|
center.playCommand.isEnabled = true
|
||||||
center.playCommand.addTarget { [unowned self] (commandEvent) -> MPRemoteCommandHandlerStatus in
|
center.playCommand.addTarget { [unowned self] (commandEvent) -> MPRemoteCommandHandlerStatus in
|
||||||
self.playOrPause()
|
self.playOrPause()
|
||||||
return .success
|
return .success
|
||||||
}
|
}
|
||||||
|
|
||||||
|
center.pauseCommand.isEnabled = true
|
||||||
center.pauseCommand.addTarget { [unowned self] (commandEvent) -> MPRemoteCommandHandlerStatus in
|
center.pauseCommand.addTarget { [unowned self] (commandEvent) -> MPRemoteCommandHandlerStatus in
|
||||||
self.playOrPause()
|
self.playOrPause()
|
||||||
return .success
|
return .success
|
||||||
}
|
}
|
||||||
|
|
||||||
|
center.skipForwardCommand.isEnabled = true
|
||||||
center.skipForwardCommand.addTarget { [unowned self] (commandEvent) -> MPRemoteCommandHandlerStatus in
|
center.skipForwardCommand.addTarget { [unowned self] (commandEvent) -> MPRemoteCommandHandlerStatus in
|
||||||
self.playNextContent()
|
self.playNextContent()
|
||||||
return .success
|
return .success
|
||||||
}
|
}
|
||||||
|
|
||||||
|
center.skipBackwardCommand.isEnabled = true
|
||||||
center.skipBackwardCommand.addTarget { [unowned self] (commandEvent) -> MPRemoteCommandHandlerStatus in
|
center.skipBackwardCommand.addTarget { [unowned self] (commandEvent) -> MPRemoteCommandHandlerStatus in
|
||||||
self.playPreviousContent()
|
self.playPreviousContent()
|
||||||
return .success
|
return .success
|
||||||
|
|
Loading…
Reference in New Issue