YouTube embedded player rozbił się z GPU ReturnNotPermittedKillClient na iOS 8

Zrobiłem aplikację na iOS z UIWebView, która ładuje odtwarzacz iFrame YouTube. Wszystko poszło dobrze i może nawet odtwarzać wideo w tle z tylko jednym problemem.

Ten problem występuje tylko od tego miesiąca i dzieje się nie tylko w najnowszej aktualizacji (iOS 8.3), ale także na iOS 8.1, więc myślę, że ma to coś wspólnego z niedawną modyfikacją na YouTube iFrame API.

Na iOS 8 (Tylko iOS 8 na urządzeniu, nie każdy iOS przed 8, a nawet nie na emulatorze,) po umieszczeniu aplikacji w tle (np. przejść do ekranu głównego, zablokować urządzenie) film odtwarza się normalnie, ale po zakończeniu wideo i aplikacja próbuje załadować następny film na liście odtwarzania aplikacji, aplikacja zawiesza się (w rzeczywistości wydaje się, że iOS wymusza zakończenie go.)

W WebThread znajduje się EXC_BAD_ACCESS z

libGPUSupportMercury.dylib gpus_ReturnNotPermittedKillClient

I odpowiedni stos wywołań w dzienniku awarii jest jak poniżej:

Thread 6 name:  WebThread
Thread 6 Crashed:
0   libGPUSupportMercury.dylib      0x000000018b829f90 gpus_ReturnNotPermittedKillClient + 12
1   libGPUSupportMercury.dylib      0x000000018b82af3c gpusSubmitDataBuffers + 168
2   WebCore                         0x0000000191620820 WebCore::GraphicsContext3D::reshape(int, int) + 528
3   WebCore                         0x0000000191e93ce0 WebCore::WebGLRenderingContext::initializeNewContext() + 1136
4   WebCore                         0x0000000191e93594 WebCore::WebGLRenderingContext::WebGLRenderingContext(WebCore::HTMLCanvasElement*, WTF::PassRefPtr<WebCore::GraphicsContext3D>, WebCore::GraphicsContext3D::Attributes) + 600
5   WebCore                         0x0000000191e92c54 WebCore::WebGLRenderingContext::create(WebCore::HTMLCanvasElement*, WebCore::WebGLContextAttributes*) + 1144
6   WebCore                         0x000000019132f6ec WebCore::HTMLCanvasElement::getContext(WTF::String const&, WebCore::CanvasContextAttributes*) + 312

Mówiąc najprościej, w moim rozumieniu, kiedy wzywam YTPlayer.loadVideoById(...) YouTube API ładuje wideo i próbuje utworzyć nowy kontekst renderowania WebGL, na co iOS nie zezwala (instrukcje związane z renderowaniem GL w trybie tła nie są dozwolone), więc kończy aplikację.

Przez cały tydzień googlowałem i drapałem się po głowie, żeby sobie z tym poradzić, ale bez powodzenia, czy ktoś ma jakiś pomysł, jak sobie z tym poradzić?

Bardzo dziękuję za wszelkie sugestie i wszelką pomoc!!!

Author: Chez Hung, 2015-04-20

1 answers

OK, nadal nie mam działającego rozwiązania tego problemu, ale właśnie wymyśliłem obejście.

Wygląda na to, że YouTube iFrame player nie tworzy kontekstu renderowania WebGL, dopóki nie wywołasz Ytplayera.loadVideoById (lub cueVideoById, loadVideoByUrl, cueVideoByUrl, loadPlaylist, cuePlaylist.) Więc po prostu Ładuję cały film na moją playlistę za pomocą loadPlaylist, gdy lista odtwarzania zostanie zmieniona.

Z tej pracy wokół, moja aplikacja nie zawiesza się już. Jest dobre ale I tak zastanawiam się, czy ktoś ma na to realne rozwiązanie, proszę dać mi znać i jest to bardzo doceniane!!!

 2
Author: Chez Hung,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2015-04-20 16:48:54