Android: dibuja el video de YouTube en SurfaceTexture

Estoy intentando dibujar un WebView en SurfaceTexture así que puedo hacerlo en OpenGL.

Hasta ahora, he jugado con éxito el video de youtube en WebView de la 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 con éxito el renderizado de WebView en OpenGL (excepto la reproducción del video) basado en este tutorial: http://anuraagsridhar.wordpress.com/2013/03/13/rendering-an-android-webview-or-for-that- Matter-any-android-vista-directamente-a-opengl /

Inicialización adicional del WebView (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(px, py)); surfaceTexture.setDefaultBufferSize(px, py); 

Overriden método onDraw del 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,px,py)); canvas.save(); canvas.translate(-scrollL, -scrollT); super.onDraw(canvas); canvas.restore(); surfaceTexture.unlockCanvasAndPost(canvas); } catch (Surface.OutOfResourcesException e) { throw new RuntimeException(e); } } 

Al intentar reproducir video de YouTube en la visualización de la web prestada utilizando el truco anterior, el rectángulo de vídeo es negro (sin embargo, se puede oír el sonido). Sospecho que la aceleración de hardware no funciona en la textura de la superficie.

Así que la pregunta es: ¿Hay alguna manera de reproducir un video de youtube en la textura de OpenGL?

El problema es esto: el video se está dibujando a una ventana separada que está detrás de la ventana de la jerarquía de la vista y no es fácilmente accesible para ser dibujado en su SurfaceTexture . Para complicar el asunto, el WebView habrá posicionado y dimensionado la ventana de vídeo sin importar que se dibuje a un Canvas distinto del que se mostraría en la pantalla. Además, el video está siendo renderizado en código nativo, y no sería capaz de dibujar a un Canvas lo suficientemente rápido como para mantenerse de todos modos (esa es la idea detrás de dar al vídeo una ventana separada).

Cualquier solución satisfactoria requeriría casi necesariamente el uso de las API privadas para obtener acceso a la ventana de vídeo en código nativo. Dependiendo de cómo planea utilizar su SurfaceTexture , puede encontrar una solución que implique la interceptación de URLs en un WebViewClient , despojando cualquier etiqueta de vídeo antes de renderizarla y colocando el video en un SurfaceView o TextureView bajo su control. A continuación, puede ponerlo donde debería estar en relación con el lugar donde ha dibujado SurfaceTexture , pero eso limita su uso de SurfaceTexture a billboard. Sin embargo, ese tipo de hack se pondría muy feo muy rápidamente.

Puesto simplemente, no veo una manera limpia de hacer esto. Es una buena idea, pero no es factible con la API pública.

  • Cómo incrustar y reproducir un video de YouTube en android
  • Excepción de clase no encontrada al ejecutar demostraciones de API de YouTube para Android
  • La vista web de Android no puede convertir el video de youtube incrustado a través de iframe
  • Compartir enlace de audio de terceros en la nube de sonido y youtube en la aplicación Android
  • Ejecución de una aplicación de Android en la parte superior de la pantalla de bloqueo
  • Cómo incrustar un clip de YouTube en un WebView en Android
  • Analizar una miniatura de YouTube en un iframe con Jsoup
  • No se reproduce el video de YouTube en WebView
  • Detectar o la latencia aproximada de Bluetooth en Android (reproducción de audio)
  • Continuar la reproducción del reproductor de YouTube mientras gira el dispositivo con diseños de orientación separados
  • El reproductor de video de youtube superpone el otro diseño cuando nos desplazamos
  • FlipAndroid es un fan de Google para Android, Todo sobre Android Phones, Android Wear, Android Dev y Aplicaciones para Android Aplicaciones.