0

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 
} 

아이디어가 있으십니까?

답변

0

문제를 발견했습니다. 나는 이것을 방해하고있는 AVQueuePlayer/AVPlayerItems에 여러 관찰자 인스턴스를 추가하고있었습니다.

관련 문제