naprawdę mi się pomysły więc muszę prosić was znowu ...AVPlayer nie zsynchronizowane
buduję aplikacji iPhone, które wykorzystuje trzy instancje AVPlayer. Wszystkie grają w tym samym czasie i bardzo ważne jest, aby to robili. Zwykłem uruchamiać ten kod:
CMClockRef syncTime = CMClockGetHostTimeClock();
CMTime hostTime = CMClockGetTime(hostTime);
[self.playerOne setRate:1.0f time:kCMTimeInvalid atHostTime:hostTime];
[self.playerTwo setRate:1.0f time:kCMTimeInvalid atHostTime:hostTime];
[self.playerThree setRate:1.0f time:kCMTimeInvalid atHostTime:hostTime];
który działał idealnie. Ale kilka dni temu po prostu przestało działać, trzej gracze są opóźnieni o około 300-400ms (co jest dużo, wszystko poniżej 100ms byłoby w porządku). Dwa z tych odtwarzaczy AVP mają trochę przetwarzania dźwięku, co zajmuje trochę więcej czasu niż "normalny" odtwarzacz AVPlayer, ale wcześniej działało, a właściwość currentTime mówi mi, że ci gracze są opóźnieni, więc synchronizacja wydaje się nie udać.
Nie mam pojęcia, dlaczego to przestało działać, tak naprawdę nic nie zmieniłem, ale używam obserwatora, w którym mogę zadać właściwość self.playerX.currentTime, co daje mi opóźnienie około .3- .4 sekundy ... Próbowałem już zsynchronizować graczy, jeśli opóźnienie wynosi> .1f, ale opóźnienie nadal istnieje. Myślę więc, że przetwarzanie dźwięku odtwarzacza 1 i 2 nie może być odpowiedzialne za opóźnienie, ponieważ właściwość currentTime wie, że są opóźnione (mam nadzieję, że wiesz o co mi chodzi). Może ktoś z was wie, dlaczego mam tak straszne opóźnienie, lub jest w stanie podać mi inny pomysł.
Z góry dziękuję!
Dzięki za udostępnienie, to rozwiązanie było bardzo pomocne. –
Czy to też działa z zasobami zdalnymi? – zevarito
Dzięki Max, możesz edytować swoją odpowiedź, aby dołączyć oryginalny kod? Nie rozumiem, czy setRate wymaga od każdego gracza w module obsługi zakończenia prerollAtRate? –