YouTubeiFrameプレーヤーをロードするUIWebViewを使用してiOSアプリを作成しました。すべてがうまくいき、1つの問題だけでバックグラウンドでビデオを再生し続けることができます。
この問題は今月以降に発生し、最新のアップデート(iOS 8.3)だけでなくiOS 8.1でも発生するため、YouTube iFrameAPIの最近の変更と関係があると思います。
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がビデオをロードし、iOSでは許可されていない新しいWebGLレンダリングコンテキストを作成しようとします(バックグラウンドモードでのGLレンダリング関連の命令は許可されていません。 )そのため、アプリを終了します。
私はこれに対処するために丸一週間グーグルと頭を掻いてきましたが、運がなければ、誰かがそれに対処する方法を知っていますか?
提案や助けをありがとうございました!!!
OK、私はまだこの問題の実用的な解決策を持っていませんが、私はただ回避策を見つけました。
YTPlayer.loadVideoById(またはcueVideoById、loadVideoByUrl、cueVideoByUrl、loadPlaylist、cuePlaylist)を呼び出さない限り、YouTube iFrameプレーヤーはWebGLレンダリングコンテキストを作成しないようです。したがって、プレイリストのすべてのビデオをloadPlaylistでロードするだけです。プレイリストが変更されました。
この回避策により、私のアプリはもうクラッシュしません。それは良いことですが、誰かがこれに対する本当の解決策を持っているかどうかまだ疑問に思っています、私に知らせてください、そしてそれは非常にありがたいです!!!