티스토리 뷰
[iOS 앱개발] MPNowPlayingInfoPropertyElapsedPlaybackTime 오류 해결 방법
Dev_Pingu 2021. 2. 2. 23:57안녕하세요 Pingu입니다! 🐧
오늘은 동영상이나 음악을 백그라운드에서 재생 할 때 사용할 수 있는 제어센터에 존재하는 정보중 컨텐츠의 현재 재생 시간을 알려주는MPNowPlayingInfoPropertyElapsedPlaybackTimer가 있는데요, 얘가 참 말을 안듣습니다;
그래서 열심히 찾아서 해결한 방법을 정리해보려고 합니다.
누군가 동일한 문제가 발생하시면 이 글을 보고 해결하셨으면 좋겠어요 ^~^
일단 간단하게 MPNowPlayingInfoPropertyElapsedPlaybackTime를 사용할 때 발생하는 문제입니다.
위와 같이 일시정지를 하고 좀 있다가 재생을 누르면 현재 시간이 자기맘대로 흘러있는것을 볼 수 있어요.
이게 실제 콘텐츠의 재생시간이 흐른게 아닌 그냥 저기 보이는 시간만 흐릅니다.
13초에서 멈췄고 재생을 눌렀으면 14초가 되어야하는데 바로 17초가 되는 이상한 일이 발생해요.
계속해서 값을 업데이트 해주면 되지 않나? 라고 생각하실수 있는데
애플은 그럴필요가 없다고 합니다.
실제로 제가 값을 계속 변화시켜줘봤는데 그래도 이상하게 나와요 ㅠ
일단 저 같은 경우엔 nowPlayingInfo를 아래와 같이 정의해줬습니다.
여기서 이러한 오류를 발생시키는 녀석은 MPNowPlayingInfoPropertyPlaybackRate 입니다.
얘는 1초에 now Playing item를 얼마나 경과시킬것인가에 대한 값인데요, 지금 저는 이 값으로 player.rate를 넣어놨기 때문에 문제가 발생하는 거에요.
player는 AVAudioPlayer인데, player의 rate는 default 값이 1입니다.
즉 1초에 1초만큼 재생하겠다는 당연한 말? 입니다.
어쨌든 음악을 정지해줄때 이 값도 함께 정지해줘야지 원하는 값을 얻을 수 있는거죠!
그렇지 않으면 AVAudioPlayer는 정지되는데 NowPlaying Item은 정지가 되지않고 아까 설정한 1초에 1초씩 계속 진행하는 상황인거에요.
그러니까 재생을 하더라도 그 값이 계속 흐르고 있었기 때문에 시간이 점프한것 처럼 보이게 되는 것이죠.
따라서 재생과 정지를 할 때 이 값을 적절히 설정해줘야합니다.
저는 위와 같이 처리해줬고 결과는 위와 같이 잘 나오는 것을 볼 수 있습니다. 9초에서 멈추고 다시 재생해도 9초에서 시작하는 것을 볼 수 있어요. 또한 MPNowPlayingInfoPropertyElapsedPlaybackTime를 처음에 한 번만 초기화 해줬고 그 뒤론 한번도 업데이트를 해주지 않았아요. 즉 애플이 설명한 대로 이 값을 계속해서 변화하지 않더라도 잘 작동하는것이 사실이었어요.
이렇게 MPNowPlayingInfoPropertyElapsedPlaybackTime가 일시정지하더라도 혼자 막 진행하던것을 해결해봤습니다.
감사합니다!
'iOS > iOS_Memo' 카테고리의 다른 글
[iOS 앱개발] Application의 Life Cycle 알아보기 (0) | 2021.02.05 |
---|---|
[iOS 앱개발] View Controller의 Life Cycle (0) | 2021.02.04 |
[iOS 앱개발] CALayer 알아보기 1 (0) | 2021.01.28 |
[iOS 앱개발] Foreground, Background 알아보기 (0) | 2021.01.24 |
[iOS 앱개발] 네비게이션 컨트롤러에서 뷰들을 한 번에 pop하기 (0) | 2021.01.05 |
- Total
- Today
- Yesterday
- 테이블뷰
- mac
- 백준
- Xcode
- document
- pattern
- 앱개발
- 프로그래밍
- 동시성
- 문법
- System
- 코테
- dfs
- 스위프트
- design
- OSTEP
- 자료구조
- operator
- Publisher
- 알고리즘
- operating
- 아이폰
- IOS
- BFS
- Combine
- Swift
- OS
- 코딩테스트
- DP
- Apple
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | |||||
3 | 4 | 5 | 6 | 7 | 8 | 9 |
10 | 11 | 12 | 13 | 14 | 15 | 16 |
17 | 18 | 19 | 20 | 21 | 22 | 23 |
24 | 25 | 26 | 27 | 28 | 29 | 30 |