我用UIWebView制作了一个iOS应用程序,可以加载YouTube iFrame播放器。一切都很顺利,它甚至可以继续在后台播放视频,只有一个问题。
这个问题只在本月发生,不仅发生在最新更新(iOS 8.3)上,也发生在iOS 8.1上,所以我认为这与YouTube iFrame API最近的一些修改有关。
在iOS 8上(设备上只有iOS 8,在8之前没有任何iOS,甚至在模拟器上也没有),当我将应用程序放在后台(例如,转到主屏幕,锁定设备)时,视频播放正常,但一旦视频完成,应用程序试图加载应用程序播放列表中的下一个视频,应用程序就会崩溃(实际上,似乎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渲染相关的指令),因此它终止了应用程序。
为了处理这个问题,我已经在谷歌上搜索了整整一周,但运气不好,有人知道该怎么处理吗?
非常感谢您的任何建议和帮助!!!
好吧,我仍然没有这个问题的有效解决方案,但我只是找到了一个解决方案。
只要你不调用YTPlayer.loadVideoById(或cueVideoById、loadVideoByUrl、cueVideoByUrl、loadPlaylist、cuePlaylist),YouTube iFrame播放器似乎就不会创建WebGL渲染上下文。
通过这项工作,我的应用程序不再崩溃。这很好,但我仍然想知道是否有人对此有真正的解决方案,请告诉我,非常感谢!!!