YouTube 嵌入式播放器在 iOS 8 上崩溃 gpus_ReturnNotPermittedKillClient

YouTube embedded player crashed with gpus_ReturnNotPermittedKillClient on iOS 8

我用加载 YouTube iFrame 播放器的 UIWebView 制作了一个 iOS 应用程序。 一切顺利,甚至可以在后台继续播放视频,只有一个问题。

这个问题是这个月才出现的,而且不仅出现在最新的更新(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 呈现上下文。所以我只加载所有视频每当播放列表更改时,使用 loadPlaylist 在我的播放列表上。

通过此解决方法,我的应用程序不再崩溃。这很好,但我仍然想知道是否有人对此有真正的解决方案,请告诉我,非常感谢!!!