2016-07-21 26 views
6

Ich habe eine , die ein Remote-Medium geladen URL (HLS Stream) und manchmal ist der Spieler nie bereit zu spielen, aber kein Fehler angezeigt wird. Gibt es woanders ein Fehler kann sein oder eine Möglichkeit zu überprüfen, ob es immer noch die AVPlayerItem lädt?AVPlayer ist nie bereit zu spielen

Ich habe KVO für Rate, Status und Wiedergabe wahrscheinlich mithalten, die nie aufgerufen werden, wenn das Video nicht geladen wird. Ich habe eine Schaltfläche hinzugefügt, um nach einem Fehler auf dem Player, dem Player-Element und der Wahrscheinlichkeit zu suchen, dass die Wiedergabe mithalten kann. Diese melden nil, nil und false, wenn der Spieler festsitzt. Es erscheint zufällig, wenn der Spieler festsitzt (er weigert sich, Vidoe überhaupt zu laden), es passiert nicht auf einem bestimmten Video.

Welche anderen Schritte kann ich nehmen, um dieses Problem zu debuggen? Gibt es noch andere Orte, die auf Fehler oder Status überprüft werden können?

Weitere Daten verifiziert: Wiedergabe Puffer leer ist: true Wiedergabe Puffer voll ist: false

+0

Fragen Sie tatsächlich den Spieler zu spielen? – matt

+0

Ja, ich habe einen zusätzlichen Knopf hinzugefügt, um sicherzustellen, dass dies ohne Glück geschieht. Derselbe Spieler arbeitet in anderen Fällen, was merkwürdig ist. Wir ändern den Player-Gegenstand, um ihn wiederzuverwenden, und die Beobachter werden zu dem neuen Gegenstand hinzugefügt, aber das Aufzeichnen der Zustände mit einem Knopf zeigt an, dass der KVO richtig funktioniert, der Gegenstand trifft nur wahrscheinlich niemals mit. –

+0

Können Sie Code schreiben? Tritt dies nur auf, wenn Sie Spielergegenstände tauschen und versuchen, den Spieler wiederzuverwenden? – Msencenb

Antwort

1

Unsere Lösung ist vor der Wiederverwendung des Players, wir haben den AVPlayer unter Verwendung von player.replaceCurrentItemWithPlayerItem(nil) freigegeben. Ein Grund, warum der aktuelle Artikel ersetzt wurde, verursachte manchmal Probleme. Wir haben auch dafür gesorgt, dass unsere Videos in Reihenfolge geladen wurden und nicht alle auf einmal. Das schien unser Problem gelöst zu haben.

1

zu können URLs von Remote-Servern innerhalb Ihrer App laden Sie diese zu Ihrem info.plist hinzuzufügen haben

<key>NSAppTransportSecurity</key> 
<dict> 
    <key>NSExceptionDomains</key> 
    <dict> 
     <key>mydomain.com</key> 
     <dict> 
      <key>NSIncludesSubdomains</key> 
      <true/> 
      <key>NSExceptionAllowsInsecureHTTPLoads</key> 
      <true/> 
      <key>NSExceptionRequiresForwardSecrecy</key> 
      <true/> 
      <key>NSExceptionMinimumTLSVersion</key> 
      <string>TLSv1.2</string> 
      <key>NSThirdPartyExceptionAllowsInsecureHTTPLoads</key> 
      <false/> 
      <key>NSThirdPartyExceptionRequiresForwardSecrecy</key> 
      <true/> 
      <key>NSThirdPartyExceptionMinimumTLSVersion</key> 
      <string>TLSv1.2</string> 
      <key>NSRequiresCertificateTransparency</key> 
      <false/> 
     </dict> 
    </dict> 
</dict> 

see the docs

Sie die Zeilen genau nicht hinzufügen, wie ich getippt. Konfigurieren Sie sie für Ihre Bedürfnisse. Beachten Sie, dass Apples Standardkonfiguration für iOS https Verbindungen erwartet, nicht http. Sie müssen es so konfigurieren, dass http zulässig ist.