OpenGL でレンダリングできるように、SurfaceTexture で WebView を描画しようとしています。
これまでのところ、標準的な方法で WebView で YouTube ビデオを正常に再生しました。
...
webView.getSettings().setJavaScriptEnabled(true);
if (Build.VERSION.SDK_INT < 8)
{
webView.getSettings().setPluginsEnabled(true);
}
else
{
webView.getSettings().setPluginState(WebSettings.PluginState.ON);
}
webView.setWebChromeClient(new WebChromeClient() { });
webView.setWebViewClient(new WebViewClient());
...
また、ハードウェア アクセラレーションがオンになっています。
<application
android:hardwareAccelerated="true"
...
また、このチュートリアルに基づいて、OpenGL で WebView を正常にレンダリングしました (ビデオの再生を除く) 。 matter-any-android-view-directly-to-opengl/
WebView の追加の初期化 (したがって、常に「ポートレート」であり、テクスチャに収まります):
Point p = new Point();
activity.getWindow().getWindowManager().getDefaultDisplay().getSize(p);
webView.setLayoutParams(new ViewGroup.LayoutParams(p.x, p.y));
surfaceTexture.setDefaultBufferSize(p.x, p.y);
WebView のオーバーライドされた onDraw メソッド:
@Override
public void onDraw(Canvas c)
{
try
{
Point p = new Point();
activity.getWindow().getWindowManager().getDefaultDisplay().getSize(p);
Canvas canvas = surfaceTexture.lockCanvas(new Rect(0,0,p.x,p.y));
canvas.save();
canvas.translate(-scrollL, -scrollT);
super.onDraw(canvas);
canvas.restore();
surfaceTexture.unlockCanvasAndPost(canvas);
}
catch (Surface.OutOfResourcesException e)
{
throw new RuntimeException(e);
}
}
上記のハックを使用してレンダリングされた webview で YouTube ビデオを再生しようとすると、ビデオの四角形が黒くなります (ただし、サウンドは聞こえます)。ハードウェア アクセラレーションがサーフェス テクスチャで機能しないのではないかと思います。
質問は: OpenGL テクスチャで YouTube ビデオを再生する方法はありますか?