2016-03-21 9 views
1

URLから音楽を再生するこのiOSアプリで作業しています。アプリがフォアグラウンド、バックグラウンド、またはロックされる前にアプリがフォアグラウンドになっている場合にのみ画面がロックされている間でも、現在プレイリストで再生するのに問題はありません。iOS AVPlayerは、アプリケーションがバックグラウンドで再生リスト内の次の曲を再生しないときに画面がロックされます

アプリがバックグラウンドである場合は、画面がロックされている場合、次の曲が読み込まれますが再生されません。

私の質問は:アプリがバックグラウンドにあり、画面がロックされている間にAVPlayerにリストの次の曲を再生させるにはどうすればよいですか?以下は

、私は[self.playerプレイ]ことを確認した

- (void)loadNextSong { 
    if (self.playlistIndex < self.playlist.count-1) { //check to see if the next track is in bounds of the playlist array 
     self.playlistIndex++; 
     [self.player pause]; 
     [self serviceDidFetchSong:self.playlist[self.playlistIndex]]; 
     [self.player play]; 

    } else { //play the first song if we reach the end of the playlist 
     self.playlistIndex = 0; 
     [self.player pause]; 
     [self serviceDidFetchSong:self.playlist[self.playlistIndex]]; 
     [self.player play]; 
     } 
    } 

- (void)serviceDidFetchSong:(Song *)song { 
    if (song.audioFileURL != nil) { 

     if (![self.song.audioFileURL isEqual:song.audioFileURL]) { 
      if (self.timeIntervalObserver) { 
       [self.player removeTimeObserver:self.timeIntervalObserver]; 
      } 

      AVURLAsset *asset = [[AVURLAsset alloc] initWithURL:song.audioFileURL options:0]; 
      AVPlayerItem *playerItem = [[AVPlayerItem alloc] initWithAsset:asset]; 

      self.player = [[AVPlayer alloc] initWithPlayerItem:playerItem]; 

      //this is just for a visual of the song progress 
      __block __weak SongPlayerViewController *blockSelf = self; 
      self.timeIntervalObserver = [self.player addPeriodicTimeObserverForInterval:CMTimeMakeWithSeconds((1.0f/5.0f), NSEC_PER_SEC) 
                        queue:NULL 
                      usingBlock:^(CMTime time){ 
                       [blockSelf updateProgressBar]; 
                      }]; 
     } 

     self.song = song; 
    } 
} 

いくつかのコンソールログをデバッグし、ポイントを破るしようとした後...私は曲をロードして再生するために使用していたコードです間違いなく呼び出されており、毎回正しいURLが読み込まれています。

私のinfo.plistファイルには、必要なバックグラウンドモードでオーディオとフェッチが有効になっています。

アプリがバックグラウンドで画面がロックされていても、次の曲はまったく再生されないようです。

洞察または提案は非常に高く評価されます。ありがとうございました。

EDIT これは、これはOSに関連していた可能性が信じるように私をリードのiOS 9.3のリリース以来、頻繁にはるかに少ない表示され、断続的な問題のようですか...?

+0

あなたは、サンプルプロジェクトを共有することができますか? –

+0

これははるかに大きなアプリケーションのほんの一部であり、このコードは実際には(少なくとも意図的に)別のプロジェクトに基づいていなかったので、共有するサンプルプロジェクトはありません...他に何かありますか?ソリューションを指すのに役立つでしょうか? –

+0

私は非常によく似た何かを経験しています。 iOS 9.3およびXcode 7.3にアップデートしたときにのみ発生しました。曲が終了し、画面がロックされた状態でアプリがバックグラウンドになると、次の曲が読み込まれ、 'player.play()'が呼び出されますが、 'player.rate'は0のままです。 iOS 9.3でやります。私は、バックグラウンドタスクを開いて、アプリが停止していないことを確認しても、まだ運がない – MikeG

答えて

0

2回再生すると機能します。

プレーヤー?.play()

プレーヤー?.play()

関連する問題