2016-02-13 6 views
7

Meine iOS-App verwendet eine , um Medien aus dem Internet zu streamen. Ich verwende KVO, um Ereignisse wie die Pufferung (playbackBufferEmpty) zu erkennen und aufgehalten zu werden (playbackLikelyToKeepUp). Ich habe jedoch einen unheimlich spezifischen Fehler bemerkt. Obwohl während der meisten Netzwerk-Verlangsamungen die playbackBufferEmpty KVO getroffen wird, und wenn es erholt, die playbackLikelyToKeepUp KVO wie erwartet getroffen wird, habe ich festgestellt, dass (mit einer gewissen Häufigkeit) diewird Puffer für eine gewisse Zeit, erholen, die playbackLikelyToKeepUp wird getroffen , das Audio wird für vielleicht 1-3 Sekunden abgespielt, und dann hört das Audio wieder auf, als ob es puffern würde - ohne schlägt das playbackBufferEmpty KVO wieder. Und es erholt sich nicht davon.AVPlayer wird nach Pufferung nicht wiederhergestellt

TL; DR: playbackBufferEmpty (10-20 Sekunden) ->playbackLikelyToKeepUp -> spielt für 1-3 s -> hört auf zu spielen, aber kein KVO wird getroffen.

Das Schlimmste ist, wenn dies geschieht, wird die AVPlayer nicht automatisch starten wieder zu spielen, wie es funktioniert, wenn sie von Puffern erholt, und die App ist still, bis die AVPlayer manuell gestoppt/wieder gestartet. Es passiert mehr oder weniger jedes Mal, wenn ich streame. Ist das ein bekanntes Problem mit ? Ist das ein drittes KVO-Event, auf das ich achten kann? Oder irgendwelche Tipps, wie man das debuggt? Vielen Dank!

EDIT: Zusätzliche Informationen: Die AVPlayer ‚s error Eigenschaft ist nil wenn dies geschieht, die status Eigenschaft bereit zu spielen, und die rate Eigenschaft ist 1. AKA Nichts anderes seltsam los ist, so weit ich kann sagen.

Antwort

0

Ich habe auch Probleme erlebt mit AVPlayer von Puffern/Netzwerkproblemen erholt, und ich habe auch genau das gleiche Szenario, in dem avPlayer.status.readyToPlay ist, avPlayer.error ist nil und avPlayer.rate ist 1. Sprich über unzuverlässig! Ich habe auch die errorLog() überprüft und das bietet nichts anderes als einen allgemeinen Internetverbindungsfehler relevant.

Ich versuche, diesen Zustand zu erkennen, indem ich einen Timer habe, der beim Timeout die aktuelle Videozeit und die Zeit, zu der der Timer gestartet wurde, überprüft und wenn es gleich ist (Video ist nicht fortgeschritten), können wir annehmen das Video spielt wirklich nicht, wenn es behauptet, dass es ist.

Dann behandle ich dies als einen nicht behebbaren Zustand und neu laden Sie den gesamten Stream durch Erstellen eines neuen AVPlayerItem.