Android - YouTube-Video auf SurfaceTexture zeichnen

Ich versuche, ein WebView auf SurfaceTexture zu zeichnen, damit ich es in OpenGL rendern kann.

Bisher habe ich YouTube-Videos in WebView auf die folgende Art und Weise erfolgreich abgespielt:

  ...
  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());
  ...

auch die Hardwarebeschleunigung ist eingeschaltet:

 <application
        android:hardwareAccelerated="true"
 ...

Und ich habe das WebView auch erfolgreich in OpenGL gerendert (außer beim Abspielen des Videos), basierend auf diesem Tutorial:http://anuraagsridhar.wordpress.com/2013/03/13/rendering-an-android-webview-or-for-that-matter-any-android-view-directly-to-opengl/

Zusätzliche Initialisierung des WebView (so ist es immer "Hochformat" und passt in die Textur):

 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);

OnDraw-Methode von WebView überschreiben:

@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);
   }
}

Wenn Sie versuchen, YouTube-Videos in Webview abzuspielen, das mit dem obigen Hack gerendert wurde, ist das Video-Rechteck schwarz (der Ton ist jedoch zu hören). Ich vermute, dass die Hardwarebeschleunigung auf Oberflächentextur nicht funktioniert.

Die Frage ist also: Gibt es eine Möglichkeit, ein YouTube-Video auf OpenGL-Textur abzuspielen?

Antworten auf die Frage(1)

Ihre Antwort auf die Frage