我使用 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 渲染相关指令, )所以它终止应用程序。
我整整一周都在谷歌上搜索并摸不着头脑来处理这个问题,但没有任何运气,有人知道如何处理它吗?
非常感谢您的任何建议和帮助!