2016-07-21 38 views
6

Mam AVPlayer, który ładuje strumień zdalnego nośnika URL (HLS) i czasami odtwarzacz nigdy nie jest gotowy do odtwarzania, ale nie przedstawiono żadnego błędu. Czy jest gdzieś indziej błąd może być lub sposób, aby sprawdzić, czy nadal jest ładowanie AVPlayerItem?AVPlayer nigdy nie jest gotowy do gry

mam KVO dla stopy, statusu i odtwarzanie może nadążyć, które nigdy się nie nazywa, gdy film nie ładuje. Dodałem przycisk, aby sprawdzić błąd odtwarzacza, element odtwarzacza i to, czy odtwarzanie prawdopodobnie będzie kontynuowane. Raporty te są zerowe, zerowe i fałszywe, gdy gracz wydaje się zablokowany. Wydaje się przypadkowe, gdy gracz utknie (nie chce załadować vidoe w ogóle), nie dzieje się to na konkretnym filmie.

Jakie inne kroki mogę podjąć, aby debugować ten problem? Czy są inne miejsca, w których można sprawdzić błędy lub status?

Więcej informacji sprawdzone: bufor Odtwarzanie jest pusty: true bufor Odtwarzanie jest pełny: false

+0

Czy właściwie pytasz gracza, aby zagrał? – matt

+0

Tak, dodałem dodatkowy przycisk, aby upewnić się, że to się dzieje bez powodzenia. Ten sam gracz działa w innych przypadkach, co jest dziwne. Zmieniamy element gracza, aby ponownie go użyć, a obserwatorzy są dodawani do nowego przedmiotu, ale rejestrowanie stanów za pomocą przycisku pokazuje, że KVO działa poprawnie, a przedmiot nigdy nie trafia, aby nadążyć. –

+0

Czy możesz napisać kod? Czy dzieje się tak tylko wtedy, gdy zamienisz elementy gracza i spróbujesz ponownie użyć odtwarzacza? – Msencenb

Odpowiedz

1

Nasze rozwiązanie jest przed ponownym użyciem odtwarzacza, my zwalniane z AVPlayer za pomocą player.replaceCurrentItemWithPlayerItem(nil). Niektóre przyczyny zastąpienia bieżącego elementu czasami powodowały problemy. Zadbaliśmy również o to, aby nasze filmy ładowały się w kolejności, a nie wszystkie naraz. Wyglądało na to, że rozwiązaliśmy nasz problem.

1

Aby móc ładować URL ze zdalnych serwerów z poziomu aplikacji trzeba dodać do swojej Info.plist

<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

nie dodawaj linie dokładnie jak wpisałem. Skonfiguruj je do swoich potrzeb. Zauważ, że domyślną konfiguracją Apple dla iOS jest oczekiwanie połączeń https, a nie http. Musisz go skonfigurować, aby zezwolić na http.