Я создаю приложение, использующее AVQueuePlayer для потоковой передачи звука. У меня есть AVAudioSession, настроенный с категорией AVAudioSessionCategoryPlayback, и я могу получать события от remoteControlReceivedWithEvent :. Однако, когда я приостанавливаю сеанс аудио, значок в строке состояния не исчезает, и кнопка паузы/воспроизведения в App Switcher не переключается на воспроизведение. Звук приостанавливается, но значки никогда не меняются. Вы знаете, почему это может произойти?AVQueuePlayer приостанавливается, но значок воспроизведения не исчезнет
Я также использую MPMusicPlayerController для воспроизведения музыки с музыкального плеера iPod. Оба игрока всегда инициализируются, однако одновременно воспроизводится только один. Когда приложение откроется, если я сначала что-то воспроизведу из MPMusicPlayerController, у AVQueuePlayer больше нет этого конфликта паузы. У этого есть только эта проблема, когда вы сначала играете с AVQueuePlayer. Я включил код, чтобы показать вам, что я делаю.
FYI- My MPMusicController - это самолюбивый плеер. Мой 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
}
Любые идеи?