Android - desenhe vídeos do YouTube no SurfaceTexture
Eu estou tentando desenhar um WebView no SurfaceTexture para que eu possa renderizá-lo no OpenGL.
Até agora, eu joguei com sucesso o vídeo do youtube no WebView da maneira padrão:
...
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());
...
também a aceleração de hardware está ativada:
<application
android:hardwareAccelerated="true"
...
E também processei com sucesso o WebView em OpenGL (exceto reproduzindo o vídeo) com base neste tutorial:http://anuraagsridhar.wordpress.com/2013/03/13/rendering-an-android-webview-or-for-that-matter-any-android-view-directly-to-opengl/
Inicialização adicional do WebView (assim é sempre 'retrato' e se encaixa na 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);
Overriden onDraw método do WebView:
@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);
}
}
Ao tentar reproduzir vídeos do YouTube em visualização da Web renderizada usando o hack acima, o retângulo de vídeo é preto (no entanto, o som pode ser ouvido). Eu suspeito que a aceleração de hardware não funciona na textura da superfície.
Então a questão é: existe alguma maneira de reproduzir um vídeo do youtube sobre a textura do OpenGL?