AVQueuePlayer를 사용하여 오디오를 스트리밍하는 응용 프로그램을 구축하고 있습니다. 내 AVAudioSession을 AVAudioSessionCategoryPlayback 범주로 설정하고 remoteControlReceivedWithEvent :에서 이벤트를 수신 할 수 있습니다. 그러나 오디오 세션을 일시 중지하면 상태 표시 줄의 아이콘이 사라지지 않으며 앱 전환기의 일시 중지/재생 버튼이 재생으로 변경되지 않습니다. 오디오가 일시 중지되었지만 아이콘은 절대로 변경되지 않습니다. 왜 이런 일이 일어날 지 알고 있습니까?AVQueuePlayer가 일시 중지되었지만 재생 아이콘이 사라지지 않습니다.
또한 MPMusicPlayerController를 사용하여 iPod 뮤직 플레이어에서 음악을 재생합니다. 두 플레이어는 항상 초기화되지만 한 번에 하나만 재생됩니다. 앱이 열리면 MPMusicPlayerController에서 먼저 재생하면 AVQueuePlayer에 더 이상 일시 중지 충돌이 발생하지 않습니다. 먼저 AVQueuePlayer에서 재생할 때만이 문제가 발생합니다. 내가하는 일을 보여주는 코드를 포함 시켰습니다.
FYI- 내 MPMusicController는 self.musicPlayer입니다. 내 AVQueuePlayer는 self.radioPlayer입니다. 일시 중지 후 내 AVQueuePlayer의 상태는 AVPlayerStatusReadyToPlay입니다.
- (void)viewDidLoad {
[super viewDidLoad];
self.musicPlayer = [MPMusicPlayerController iPodMusicPlayer];
self.musicPlayer.nowPlayingItem = self.currentSong;
self.musicPlayer.shuffleMode = MPMusicShuffleModeSongs;
self.musicPlayer.repeatMode = MPMusicRepeatModeAll;
[[AVAudioSession sharedInstance] setCategory:AVAudioSessionCategoryPlayback withOptions:nil error:nil];
[[AVAudioSession sharedInstance] setActive:YES error:nil];
[[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(radioItemDidReachEnd:) name:AVPlayerItemDidPlayToEndTimeNotification object:[_radioPlayer currentItem]];
[[UIApplication sharedApplication] beginReceivingRemoteControlEvents];
[self becomeFirstResponder];
}
- (void)viewWillDisappear:(BOOL)animated
{
[self resignFirstResponder];
if (self.source == LIBRARY)
{
[self.parentDelgate reloadInformation];
}
}
- (void)viewDidAppear:(BOOL)animated
{
if (self.source == RADIO)
{
// Code that sets the URLs for the AVQueuePlayer
[self initializeMusicPlayer];
[self prepareRadioPlayer];
}
else if (self.source == LIBRARY) {
if (self.currentSong != self.musicPlayer.nowPlayingItem || self.playlist != nil)
{
[self initializeMusicPlayer];
self.musicPlayer.nowPlayingItem = self.currentSong;
}
}
}
- (void)initializeMusicPlayer {
if (self.source == LIBRARY)
{
[self.musicPlayer setQueueWithItemCollection:[MPMediaItemCollection collectionWithItems:(NSArray *)self.tracks]];
if ([self.radioPlayer rate] != 0.0)
[self.radioPlayer pause];
[self.musicPlayer play];
self.status = PLAYING;
}
else if (self.source == RADIO)
{
if (self.musicPlayer.playbackState == MPMusicPlaybackStatePlaying)
[self.musicPlayer pause];
}
}
- (IBAction)pausePressed:(UIButton *)sender {
if (self.source == LIBRARY)
{
[self.musicPlayer pause];
}
else if (self.source == RADIO)
{
[self.radioPlayer pause];
}
[self onStatePaused];
}
- (void)onStatePaused {
// UI Stuff
}
- (void)endSession {
[self.musicPlayer stop];
[self.radioPlayer pause];
[self.radioPlayer removeAllItems];
// Present different view
}
아이디어가 있으십니까?