2013-04-16 13 views
13

Więc wiem, że AVPlayerItemDidPlayToEndTimeNotification jest wysyłany, gdy film "has played to its end time".Co dokładnie wyzwala AVPlayerItemDidPlayToEndTimeNotification?

Moje pytanie brzmi: w jaki sposób gracz wie, czy przedmiot osiąga swój czas końcowy? Odtwarzałem strumień na żywo wygenerowany przez generator innej firmy. Utrzymuje aktualizację M3U8 i tworzenie nowych plików TS, które powinny być transmitowane na żywo. Ale w pewnym momencie mój odtwarzacz otrzymuje AVPlayerItemDidPlayToEndTimeNotification i tym samym wywołuje moje metody wyjścia i kończy działanie. Generator strumienia innej firmy nadal działa poprawnie. Mogę ponownie uruchomić odtwarzacz i oglądać strumienie. Ponieważ pozycja odtwarzania jest transmitowana na żywo, playerItem.duration nie jest czytelnym czasem trwania, co sprawia, że ​​znalezienie Czasu Końcowego bardziej przypomina mi czarną magię ...

Naprawdę zdezorientowany, jak gracz myśli, że to koniec. Zgaduję, że może plik TS był problematyczny i sprawił, że gracz pomyślał, że cała gra się skończyła? Ale jeśli tak, to czy gracz powinien zmienić swój status, by powiedzieć "coś", zamiast milczeć, aby zakończyć grę?

P.S. Próbowałem też na różne sposoby, jak na przykład, że brakuje jednego ts na liście m3u8, lub przestań generować nowe, aby odtwarzacz mógł odtwarzać bieżące m3u8 i grać po ostatnich ts, nic nie uczyniło magii AVPlayerItemDidPlayToEndTimeNotification ....

I zarejestrował powiadomienie w następujący sposób: [[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(playerItemDidReachEnd:) name:AVPlayerItemDidPlayToEndTimeNotification object:self.playerItem];

+0

Czy jesteś pewien, że to nie tylko auto-podpinania do nowego strumienia na wylocie? – CodaFi

+1

"Co dokładnie uruchamia AVPlayerItemDidPlayToEndTimeNotification?" - umieść punkt przerwania w metodzie, która jest dla niego zarejestrowana, uruchom w debugggerze, poczekaj na punkt przerwania, 'backtrace',' frame 1', zysk. –

+0

@CodaFi Dziękujemy za odpowiedź! Tak, jestem pewien, odtwarzacz przestaje grać i nie czyta niczego z serwera, z którego pochodzi m3u8. – Ooops

Odpowiedz

5

Okazuje się, że problem pochodzi z generatora strumienia innej firmy. To miało sth ("IV", jak w Initialiation Vector) złe podczas przesyłania strumieniowego treści TS, więc w pewnym momencie AVPlayer odczytał jakieś miejsce na TS, następnie rozważ film jest skończony, a tym samym wysyłając AVPlayerItemDidPlayToEndTimeNotification .... Nie naprawdę cel -C problem chyba.

Ale moje pytanie, w jakim stanie jest AVPlayer wysłać AVPlayerItemDidPlayToEndTimeNotification jest wciąż nieznany. Jeśli ktoś zna jakieś szczegóły na ten temat, zaktualizuj tutaj. Dzięki!

-3

ostatni argument powinien być self.player nie playerItem

[[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(playerItemDidReachEnd:) name:AVPlayerItemDidPlayToEndTimeNotification object:self.playerItem]; 
+5

To nie jest poprawne. Powiadomienie jest częścią klasy AVPlayerItem. – martinjbaker

Powiązane problemy