0

Я создаю приложение, использующее 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 
} 

Любые идеи?

ответ

0

Я понял, что проблема. Я добавлял несколько экземпляров наблюдателей в AVQueuePlayer/AVPlayerItems, которые мешали этому.

 Смежные вопросы

  • Нет связанных вопросов^_^