Wie bekomme ich einen Rückruf von AVQueuePlayer / AVPlayerItem, wenn das Netzwerk aktiv wird (und bereit ist)?

8

Ich habe einen AVQueuePlayer basierten Audio Streaming Player, der im Hintergrund laufen muss. Der Player muss weiterlaufen, bis die Wiedergabe der gesamten Liste abgeschlossen ist. Natürlich muss es angehalten werden, wenn die Netzwerkverbindung schlecht wird, aber es sollte automatisch fortgesetzt werden, wenn die Netzwerkverbindung zurückkommt.

Dafür überwache ich

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

mit KVO. Wenn beispielsweise die Netzwerkverbindung von einem temporären Fehler wiederhergestellt wird, erwarte ich, dass currentAVPlayerItem.status zu AVPlayerStatusItemReadyToPlay wird, was meinem Player gemeldet wird, und ich kann [AVQueuePlayer play] an diesem Punkt ausgeben.

Dieser Mechanismus (Logik) scheint in einigen Fällen zu funktionieren, aber in der Offline-Umgebung wird AVPlayerItem.status zu AVPlayerItemStatusFailed , wobei der Gegenstand AVQueuePlayer automatisch zu überspringen scheint. Daher wird die Warteschlange leer und es kann kein Rückruf von AVPlayerItem empfangen werden.

Ich hatte gehofft, dass sich eine Eigenschaft in AVPlayer ändert, wenn die Netzwerkverbindung schlecht wird / sich wieder erholt, aber nichts scheint sich zu ändern ( status , error etc).

Natürlich kann ich Reachability überwachen, aber das funktioniert nicht, wenn die App im Hintergrund läuft.

Wie kann ich wissen, wann das Netzwerk wieder hochfährt und AVQueuePlayer in dieser Situation wieder spielbar ist?

Ich bin vielleicht gerade ein Novize in diesem Bereich. Wenn irgendjemand mir eine generelle Vorstellung davon geben kann, wie er / sie kontinuierliche Spielerfahrung erreicht, ohne durch vorübergehende Probleme mit der Netzwerkverbindung komplett gestoppt zu werden, wäre das auch eine großartige Hilfe!

    
barley 21.11.2012, 19:30
quelle

1 Antwort

0

Sie können AVPlayerItemPlaybackStalledNotification überwachen, um zu wissen, wann das Objekt seinen Puffer aber nicht die gesamte Datei abgespielt hat:

%Vor%

Sobald genügend Puffer vorhanden ist, um fortzufahren, sollten Sie eine Benachrichtigung an playbackLikelyToKeepUp senden, die sich so anhört, als würden Sie bereits überwachen.

    
Oren 02.02.2015 17:47
quelle