2015-04-20 3 views
26

Я сделал приложение iOS с UIWebView, которое загружает плеер iFrame YouTube. Все прошло хорошо, и он даже может воспроизводить видео на фоне только одной проблемы.Встроенный плеер YouTube разбился с gpus_ReturnNotPermittedKillClient на iOS 8

Эта проблема возникает только в этом месяце, и это происходит не только в последнем обновлении (iOS 8.3), но и в iOS 8.1, поэтому я полагаю, что это связано с некоторыми недавними изменениями в API iFrame YouTube.

На iOS 8 (только iOS 8 на устройстве, а не на iOS до 8 и даже на эмуляторе), когда я помещаю приложение в фоновый режим (например, перейдите на главный экран, заблокируйте устройство), видео нормально, но как только видео будет завершено, и приложение попытается загрузить следующее видео в плейлист приложения, приложение выйдет из строя (на самом деле это похоже на то, что силы iOS завершают его.)

В WebThread есть EXC_BAD_ACCESS с

libGPUSupportMercury.dylib gpus_ReturnNotPermittedKillClient

и Релевент стек вызовов в журнале аварии, как показано ниже:

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 

попросту говоря, в моем понимании, когда я называю YTPlayer.loadVideoById (...) YouTube API загружает видео и пытается создать новый контекст WebGL рендеринга, который IOS не позволяет (GL рендеринга соответствующих инструкций во время фонового режима не допускается), поэтому он завершает работу приложения.

Я занимаюсь поиском и почесыванием головы на целую неделю, чтобы справиться с этим, но без везения кто-нибудь знает, как с этим бороться?

Благодарим вас за любое предложение и любую помощь !!!

ответ

2

ОК, у меня все еще нет рабочего решения для этой проблемы, но я просто разобрался в работе.

Похоже проигрывателя YouTube IFrame не создает контекст рендеринга WebGL до тех пор, пока вы не звоните YTPlayer.loadVideoById (или cueVideoById, loadVideoByUrl, cueVideoByUrl, loadPlaylist, cuePlaylist.) Так что я просто загрузить все видео на мой плейлист с loadPlaylist всякий раз, когда изменяется список воспроизведения.

С этой работой мое приложение больше не разбивается. Это хорошо, но я все еще задаюсь вопросом, есть ли у кого-то реальное решение для этого, пожалуйста, дайте мне знать, и это очень ценится !!!

+0

Я тоже сталкиваюсь с этой проблемой, но не нахожу решения. Как вы загружаете все видео в моем плейлисте с помощью loadPlaylist всякий раз, когда изменяется список воспроизведения? Не могли бы вы разместить здесь некоторые фрагменты кода? – bandw

+0

У меня такая же проблема, но я * думаю * Я ее исправил .. Вы попробовали листинг 3 по адресу: https://developer.apple.com/library/ios/qa/qa1668/_index.html? – Jim

+0

Я читал статью, но я думаю, что пропустил эту часть ... Я не пробовал, но, я думаю, есть хорошие шансы, что это может сработать. Не могли бы вы опубликовать это снова как ответ, чтобы я мог проголосовать? –

Смежные вопросы