2012-01-27 8 views
13

Se trata de cargar videos de YouTube con el último formato incorporado (iframe) dentro de una vista web.La vista web de Android no puede procesar el video de youtube incrustado a través del iframe

ejemplo del formato iframe embed

<iframe width="637" height="358" src="http://www.youtube.com/embed/olC42gO-Ln4?fs=1&amp;feature=oembed" frameborder="0" allowfullscreen=""></iframe> 

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

que intentaron una inserción similar de vimeo

<iframe src="http://player.vimeo.com/video/35693267" width="640" height="360" frameborder="0"></iframe> 

En 2.3, vídeo reproducido correctamente
En 3.2, un rectángulo negro apareció y desapareció, el área de marco flotante está en blanco.

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

He comprobado preguntas relacionadas y añadido

android:hardwareAccelerated="true" 

en la aplicación y/o etiqueta de actividad, pero todavía no hay vídeo en ambos dispositivos 2.3 & 3.2.

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

+0

Debería esta respuesta: https://stackoverflow.com/a/24592012/2371425 ya que realmente resuelve el problema. – Sakiboy

Respuesta

11

Los navegadores de Android son absolutamente defectuosos en cuanto 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.

Google Reader-esque optimizing of WebViews on Android

+0

Tienes razón. Además descubrí que la aplicación sería un desastre si gira el dispositivo cuando se reproduce el video. Terminé usando la solución de miniatura y enlace sugerida. – littlestove

+0

¿Cómo se determina cuál es el enlace a un archivo de youtube o vimeo h264? – cottonBallPaws

+0

Mira mi respuesta a continuación. Mi respuesta resuelve el problema y es realmente simple. – Sakiboy

0

se recomienda usar algo de código para detectar el entorno del usuario ... utilizar el código iframe sólo para los dispositivos iOS (iPhone, iPod, iPad) y utilizando un código de edad para todos los demás.

7

Si desea reproducir vídeos dentro de su WebView tiene que cargar los datos con una dirección URL base!

NO hacer 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á el algo así como la url "original" de lo que se 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!

Asimismo, recuerda a configurar su WebView ... Al igual que ...

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

Usted necesita tener la aceleración de hardware activada en el Manifiesto (sólo disponible en el SDK 14 y superior).

Ej. Aceleración de hardware en:

<application 
    android:name="com.example.app" 
    android:icon="@drawable/ic_launcher" 
    android:label="@string/app_name" 
    android:theme="@style/AppTheme" 
    android:hardwareAccelerated="true"> 
<!-- hardwareAccelerated requires SDK 14 --> 
... 
</application> 
+1

evitando loadDataWithBaseURL (...) con null base url funcionó para mí. ¡Gracias! – IK828

+0

me tomó días para resolver esto! ¡Pensé que nunca funcionaría! – Sakiboy

0

Este código compuesto se ajustan exactamente a dispositivo diferente

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 = "<!DOCTYPE html><html> <head> <meta charset=\"UTF-8\"><meta name=\"viewport\" content=\"target-densitydpi=high-dpi\" /> <meta name=\"viewport\" content=\"width=device-width, initial-scale=1\"> <link rel=\"stylesheet\" media=\"screen and (-webkit-device-pixel-ratio:1.5)\" href=\"hdpi.css\" /></head> <body style=\"background:black;margin:0 0 0 0; padding:0 0 0 0;\"> <iframe style=\"background:black;\" width=' "+width+"' height='"+height+"' src=\""+ VIDEO_URL+"\" frameborder=\"0\"></iframe> </body> </html> "; 



    webView.loadDataWithBaseURL("http://vimeo.com", data_html, "text/html", "UTF-8", null); 
0

Esto funcionó para mí- el código abre youtube sitio y puede reproducir sus vídeos en el interior WebView:

mWebView = (WebView) findViewById(R.id.webview);  

WebSettings webSettings = mWebView.getSettings(); 
webSettings.setJavaScriptEnabled(true); 


String frameVideo = "<html><body>Youtube video .. <br> <iframe width=\"320\" height=\"315\" src=\"https://www.youtube.com/\" frameborder=\"0\" allowfullscreen></iframe></body></html>"; 

mWebView.loadData(frameVideo, "text/html", "utf-8"); 

mWebView.loadUrl("http://www.youtube.com/"); 

mWebView.setWebViewClient(new WebViewClient()); 
Cuestiones relacionadas