8

バックグラウンドで実行する必要があるAVQueuePlayerベースのオーディオストリーミングプレーヤーがあります。プレーヤーは、すべてのリストの再生が終了するまで実行を続ける必要があります。もちろん、ネットワーク接続が悪くなった場合は一時停止する必要がありますが、ネットワーク接続が回復すると自動的に再開するはずです。

このために、私は監視しています

  • AVPlayerItem.status
  • AVPlayerItem.playbackLikelyToKeepUp
  • AVPlayer.currentItem
  • AVPlayer.status
  • AVPlayer.error

KVOを使用します。たとえば、ネットワーク接続が一時的なエラーから回復した場合、はにcurrentAVPlayerItem.statusなると予想AVPlayerStatusItemReadyToPlayされます。これはプレーヤーに報告され、[AVQueuePlayer play]その時点で発行できます。

このメカニズム(ロジック)は場合によっては機能するように見えますが、オフライン環境では非常に頻繁にAVPlayerItem.statusなりAVPlayerItemStatusFailed、この項目AVQueuePlayerは自動的にスキップされるようです。その結果、キューは空になり、からコールバックを受信できなくなりますAVPlayerItem

AVPlayerネットワーク接続が悪くなったり回復したりすると、の一部のプロパティが変更されることを期待していましたが、何も変更されていないようですstatuserrorなど)。

明らかに私は監視できますReachabilityが、アプリがバックグラウンドで実行されている場合は機能しません。

AVQueuePlayerネットワークが復旧し、この状況で再び再生可能になる時期を知るにはどうすればよいですか?

私はこの地域の初心者に過ぎないかもしれません。AVQueuePlayer一時的なネットワーク接続の問題に完全にとらわれることなく、どのようにして継続的なプレイ体験を実現するかについて、誰かが私に一般的な考えを教えてくれるなら、それも素晴らしい助けになるでしょう!

4

1 に答える 1

0

AVPlayerItemPlaybackStalledNotificationファイル全体ではなく、アイテムがバッファの再生をいつ終了したかを監視できます。

[[NSNotificationCenter defaultCenter] 
       addObserver:self
       selector:@selector(AVPlayerItemPlaybackStalledNotification:)                                                 
       name:AVPlayerItemPlaybackStalledNotification object:playerItem];

続行するのに十分なバッファーがあれば、playbackLikelyToKeepUp既に監視しているように聞こえる通知が送信されます。

于 2015-02-02T17:47:20.300 に答える