La vista web de Android no puede mostrar video de youtube incrustado a través de iframe

Se trata de cargar videos de youtube utilizando el último formato incorporado (iframe) dentro de una vista web.

Ejemplo del formato de inserción del iframe

 

Pruebe el código en los dispositivos Android 2.3.3 y 3.2 (HTC Desire y Asus Transformer), la vista web solo mostraría un rectángulo negro.

Intenté una inserción similar de vimeo

  

En 2.3, video reproducido correctamente
En 3.2, un rectángulo negro brilló y desapareció, el área del iframe está en blanco.

Finalmente, si se usa el formato de inserción antiguo (utilizando la etiqueta de objeto), el video se muestra correctamente dentro de la vista web en 2.3.3 y 3.2.

He verificado preguntas relacionadas y agregado

 android:hardwareAccelerated="true" 

en la aplicación y / o etiqueta de actividad, pero aún no hay video en los dispositivos 2.3 y 3.2.

Este es un gran problema porque más sitios web ahora usan el formato más nuevo (iframe) para incrustar sus videos de youtube. Equipo de Android / Youtube, por favor eche un vistazo a este problema.

Los navegadores de Android son completamente defectuosos en lo que respecta a la reproducción de video y la incrustación. Simplemente no funciona en todos los dispositivos. Intentar que funcione es solo perder tu tiempo. Mi sugerencia es que no intente incluir sino que simplemente proporcione una miniatura del video que vincula directamente a la página de YouTube o al archivo h264.

Discusión anterior, con una posible solución.

Optimización de Google Reader-esque de WebViews en Android

¡Si desea reproducir videos dentro de su WebView , NECESITA cargar los datos con una URL base!

NO hagas esto:

 mContentWebView.loadDataWithBaseURL(null, webViewContentString, "text/html", "UTF-8", null); 

HAGA ESTO EN LUGAR :

  //veryVeryVery important for playing the videos! mContentWebView.loadDataWithBaseURL(theBaseUrl, webViewConentString, "text/html", "UTF-8", null); 

La URL base será algo así como la url “original” de lo que está mostrando en su WebView . Entonces, digamos que está haciendo un lector de noticias, la url base WebView's será la url de la historia original.

¡Buena suerte!

Recuerda también configurar tu WebView … Como así …

  mContentWebView.setWebChromeClient(new WebChromeClient()); mContentWebView.getSettings().setPluginState(WebSettings.PluginState.ON); mContentWebView.getSettings().setPluginState(WebSettings.PluginState.ON_DEMAND); mContentWebView.setWebViewClient(new WebViewClient()); mContentWebView.getSettings().setJavaScriptEnabled(true); 

Debe activar la aceleración de hardware en el Manifiesto (solo disponible en el SDK 14 y versiones posteriores).

Ex. Aceleración de hardware activada:

   ...  

Soporte de video HTML5

Para admitir video HTML5 en línea en su aplicación, necesita tener activada la aceleración de hardware y configurar un WebChromeClient .

http://developer.android.com/reference/android/webkit/WebView.html

(Espero que ayude a alguien)

Sugiero usar algún código para detectar el entorno del usuario … use el código iframe solo para dispositivos ios (iphone, ipod, ipad) y use el código anterior para todos los demás.

Este código se ajustó exactamente a diferentes dispositivos

 webView.setInitialScale(1); webView.setWebChromeClient(new WebChromeClient()); webView.getSettings().setAllowFileAccess(true); webView.getSettings().setPluginState(WebSettings.PluginState.ON); webView.getSettings().setPluginState(WebSettings.PluginState.ON_DEMAND); webView.setWebViewClient(new WebViewClient()); webView.getSettings().setJavaScriptEnabled(true); webView.getSettings().setLoadWithOverviewMode(true); webView.getSettings().setUseWideViewPort(true); DisplayMetrics displaymetrics = new DisplayMetrics(); getWindowManager().getDefaultDisplay().getMetrics(displaymetrics); int height = displaymetrics.heightPixels; int width = displaymetrics.widthPixels; Log.e(SimpleBillsConstants.SIMPLE_BILLS, width + "-" + height); String data_html = "         "; webView.loadDataWithBaseURL("http://vimeo.com", data_html, "text/html", "UTF-8", null); 

Esto funcionó para mí: el código abre el sitio de youtube y puede reproducir sus videos dentro de WebView:

 mWebView = (WebView) findViewById(R.id.webview); WebSettings webSettings = mWebView.getSettings(); webSettings.setJavaScriptEnabled(true); String frameVideo = "Youtube video .. 
"; mWebView.loadData(frameVideo, "text/html", "utf-8"); mWebView.loadUrl("http://www.youtube.com/"); mWebView.setWebViewClient(new WebViewClient());