Android - dibujar video de YouTube en SurfaceTexture
Estoy intentando dibujar un WebView en SurfaceTexture para poder representarlo en OpenGL.
Hasta ahora, reproduje con éxito el video de YouTube en WebView de manera estándar:
...
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());
...
También se activa la aceleración de hardware:
<application
android:hardwareAccelerated="true"
...
Y también representé con éxito la WebView en OpenGL (excepto la reproducción del video) en base a este tutorial:http://anuraagsridhar.wordpress.com/2013/03/13/rendering-an-android-webview-or-for-that-matter-any-android-view-directly-to-opengl/
Inicialización adicional de la vista web (por lo que siempre es 'retrato' y se ajusta a la textura):
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);
Sobrescribe el método onDraw de la vista web:
@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);
}
}
Cuando se intenta reproducir el video de YouTube en la vista web renderizada usando el truco anterior, el rectángulo de video es negro (sin embargo, el sonido se puede escuchar). Sospecho que la aceleración de hardware no funciona en la textura de la superficie.
Entonces, la pregunta es: ¿hay alguna forma de reproducir un video de youtube con textura OpenGL?