Dev.YoungKyu
YoungKyu's Devlog
전체 방문자
오늘
어제
  • 분류 전체보기 N
    • 부스트캠프
    • iOS N
    • visionOS
    • Backend
    • 알고리즘
    • CS
    • Git
    • Python
    • 끄적끄적

블로그 메뉴

  • 홈
  • 🌝 티스토리 홈
  • ⭐️ 깃허브
  • 태그

공지사항

인기 글

최근 댓글

최근 글

태그

  • image
  • AVAudioSession
  • Python
  • 소프트웨어 테스트
  • Optional
  • 모듈화
  • jekyll
  • 오블완
  • 부스트캠프
  • 티스토리챌린지
  • 알고리즘
  • MVC
  • swift
  • Concurrency
  • alamofire
  • 백준
  • SwiftUI
  • authenticationinterceptor
  • constraint
  • Git
  • Swift5.7
  • ios
  • AutoLayout
  • 소프트웨어 공학
  • ImageResource
  • 소프트웨어공학
  • guard
  • if let
  • CS
  • boj

티스토리

hELLO · Designed By 정상우.
Dev.YoungKyu
MPNowPlayingInfoCenter 제어센터 초기세팅 및 갱신하는 방법
iOS

MPNowPlayingInfoCenter 제어센터 초기세팅 및 갱신하는 방법

2023. 5. 16. 23:05

뮤직플레이어앱을 개발하면서 제어센터를 사용하기 위해 코드를 짰지만 webview에서 동영상을 재생하는 방식인 우리 앱에선 동작하지 않아 버리기엔 아까워 코드를 공유하고자 남깁니다.

저는 실패했지만 이 글을 보는 분들은 도움이 되기를

 

// 제어센터 초기세팅
import MediaPlayer

func MPNowPlayingInfoCenterSetting() {
        // 제어 센터 이벤트 수신 시작
        // Info.plist에
        // UIBackgroundModes : audio 또는
        // Required background modes : App plays audio or streams audio/video using AirPlay 해주어야 합니다.

        UIApplication.shared.beginReceivingRemoteControlEvents()

        let center = MPRemoteCommandCenter.shared()

        center.skipForwardCommand.isEnabled = true
        center.skipBackwardCommand.isEnabled = true

        center.playCommand.addTarget { [weak self] _ in
            self?.play()
            return .success
        }
        center.pauseCommand.addTarget { [weak self] _ in
            self?.pause()
            return .success
        }
        center.skipForwardCommand.addTarget { [weak self] _ in
            self?.forward()
            return .success
        }
        center.skipBackwardCommand.addTarget { [weak self] _ in
            self?.backward()
            return .success
        }
    }
// 제어센터 갱신
import MediaPlayer
import Kingfisher

func updateMPNowPlayingInfoCenter(song: SongEntity, progress: PlayProgress) {
        var nowPlayingInfo = center.nowPlayingInfo ?? [String: Any]()

        nowPlayingInfo[MPMediaItemPropertyTitle] = song.title
        nowPlayingInfo[MPMediaItemPropertyArtist] = song.artist

        let thumbnailURLString = "thumbnail.com/thumbnail_1"
        let placeholderImage = UIImage(named: "placeholder")

        if let thumbnailURL = URL(string: thumbnailURLString) {
            let resource = ImageResource(downloadURL: thumbnailURL)
            KingfisherManager.shared.retrieveImage(with: resource) { result in
                switch result {
                case .success(let imageResult):
                    let artwork = MPMediaItemArtwork(boundsSize: imageResult.image.size) { size in
                        return imageResult.image
                    }
                case .failure(let error):
                    DEBUG_LOG("이미지를 불러오는데 실패했습니다. Error: \(error)")
                    nowPlayingInfo[MPMediaItemPropertyArtwork] = placeholderImage
                }
            }

        } else {
            nowPlayingInfo[MPMediaItemPropertyArtwork] = placeholderImage
        }

        // 재생 중이면 1.0, 일시정지 등 재생 중이 아닐 때는 0.0
        nowPlayingInfo[MPNowPlayingInfoPropertyPlaybackRate] = self.state == .playing ? 1.0 : 0.0

        // 현재재생시간 (초를 정수형태로)
        nowPlayingInfo[MPNowPlayingInfoPropertyElapsedPlaybackTime] = Int(progress.currentProgress)

        // 총 길이 (초를 정수형태로)
        nowPlayingInfo[MPMediaItemPropertyPlaybackDuration] = Int(progress.endProgress)

        center.nowPlayingInfo = nowPlayingInfo
    }
저작자표시 (새창열림)

'iOS' 카테고리의 다른 글

XCode15+ Image Color Assets 관리 방법의 변화  (0) 2024.03.05
XCode Archive 시 has no member Error 발생  (0) 2024.03.04
UITableView 로 가사 기능(트래킹, 하이라이팅, 탐색) 개발 기록  (0) 2023.04.21
Tuist Project 'Could not build Objective-C module' 오류 해결법  (0) 2023.01.12
[SwiftUI] 사라질 때 transition이 적용안되는 경우 (SwiftUI removal transition not animated)  (0) 2022.11.29
    'iOS' 카테고리의 다른 글
    • XCode15+ Image Color Assets 관리 방법의 변화
    • XCode Archive 시 has no member Error 발생
    • UITableView 로 가사 기능(트래킹, 하이라이팅, 탐색) 개발 기록
    • Tuist Project 'Could not build Objective-C module' 오류 해결법
    Dev.YoungKyu
    Dev.YoungKyu
    iOS를 공부하고 있습니다

    티스토리툴바