parent
d77b83033d
commit
bfcb5798bd
|
@ -105,8 +105,8 @@ extension ContentPlayManager {
|
|||
UIApplication.shared.beginReceivingRemoteControlEvents()
|
||||
}
|
||||
|
||||
self.registerNowPlayingInfoCenter()
|
||||
self.registerRemoteControlEvents()
|
||||
self.fetchAlbumArtAndUpdateNowPlayingInfo()
|
||||
} catch {
|
||||
DispatchQueue.main.async {
|
||||
self.showError()
|
||||
|
@ -193,7 +193,39 @@ extension ContentPlayManager {
|
|||
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()
|
||||
var nowPlayingInfo = center.nowPlayingInfo ?? [String: Any]()
|
||||
|
||||
|
|
|
@ -106,6 +106,17 @@ final class ContentPlayerPlayManager: NSObject, ObservableObject {
|
|||
}
|
||||
}
|
||||
.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) {
|
||||
|
@ -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()
|
||||
var nowPlayingInfo = center.nowPlayingInfo ?? [String: Any]()
|
||||
|
||||
nowPlayingInfo[MPMediaItemPropertyTitle] = title
|
||||
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
|
||||
return artworkImage
|
||||
}
|
||||
|
||||
if let image = albumArtImage {
|
||||
let artwork = MPMediaItemArtwork(boundsSize: image.size) { _ in image }
|
||||
nowPlayingInfo[MPMediaItemPropertyArtwork] = artwork
|
||||
}
|
||||
|
||||
|
@ -275,21 +317,25 @@ final class ContentPlayerPlayManager: NSObject, ObservableObject {
|
|||
private func registerRemoteControlEvents() {
|
||||
let center = MPRemoteCommandCenter.shared()
|
||||
|
||||
center.playCommand.isEnabled = true
|
||||
center.playCommand.addTarget { [unowned self] (commandEvent) -> MPRemoteCommandHandlerStatus in
|
||||
self.playOrPause()
|
||||
return .success
|
||||
}
|
||||
|
||||
center.pauseCommand.isEnabled = true
|
||||
center.pauseCommand.addTarget { [unowned self] (commandEvent) -> MPRemoteCommandHandlerStatus in
|
||||
self.playOrPause()
|
||||
return .success
|
||||
}
|
||||
|
||||
center.skipForwardCommand.isEnabled = true
|
||||
center.skipForwardCommand.addTarget { [unowned self] (commandEvent) -> MPRemoteCommandHandlerStatus in
|
||||
self.playNextContent()
|
||||
return .success
|
||||
}
|
||||
|
||||
center.skipBackwardCommand.isEnabled = true
|
||||
center.skipBackwardCommand.addTarget { [unowned self] (commandEvent) -> MPRemoteCommandHandlerStatus in
|
||||
self.playPreviousContent()
|
||||
return .success
|
||||
|
|
Loading…
Reference in New Issue