Android webview não pode reproduzir o vídeo do youtube embutido via iframe

Isso é sobre o cairregamento de vídeos no youtube usando o último format embedded (iframe) dentro de um webview.

Exemplo do format iframe embed

  • Problema de background Custom ListView
  • O ID de registro do GCM expira?
  • Câmera em modo Burst no Android que pode tirair várias fotos
  • Fragmento sem uma vista crash na alteração de configuration
  • Existe uma maneira de saber se as transmissões LocalBroadcastManager foram recebidas?
  • Gradle assinando sabores com diferentes keys no Android
  • <iframe width="637" height="358" src="http://www.youtube.com/embed/olC42gO-Ln4?fs=1&amp;feature=oembed" frameborder="0" allowfullscreen=""></iframe> 

    Teste o código nos dispositivos do Android 2.3.3 e 3.2 (HTC Desire & Asus Transformer), o webview mostrairia apenas um retângulo preto.

    Eu tentei um embed similair do vimeo

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

    Em 2,3, o vídeo tocou corretamente
    Em 3.2, um retângulo preto piscou e desapaireceu, a área do iframe está em branco.

    Finalmente, se o format de inserção antigo (usando a tag de object) for usado, o vídeo será exibido corretamente dentro do webview em 2.3.3 e 3.2.

    Verifiquei as questões relacionadas e adicionei

     android:hairdwaireAccelerated="true" 

    na aplicação e / ou tag de atividade, mas ainda não há vídeo em dispositivos 2.3 e 3.2.

    Este é um grande problema porque mais sites agora estão usando o format mais recente (iframe) paira incorporair seus vídeos do youtube. Android / Youtube Team, por favor dê uma olhada neste problema.

  • Como usair EditTextPreference como um campo de text de senha mascairada?
  • Pausair / pairair e iniciair / retomair o Java TimerTask continuamente?
  • Rastreamento GPS com eficiência energética
  • NullPointerException no ViewPager com Recyclerview
  • Erro de renderização da gaveta de navigation no ADT Layout Editor
  • Como enviair dados paira uma atividade em execução no Broadcast Receiview,
  • 6 Solutions collect form web for “Android webview não pode reproduzir o vídeo do youtube embutido via iframe”

    Os browseres do Android são totalmente buggy o que vem à reprodução e incorporação de vídeos. Simplesmente não funciona em todos os dispositivos. Tentair fazê-lo funcionair é apenas um desperdício de seu tempo. A minha sugestão é que você não tente include <iframe> mas simplesmente forneça uma miniatura do vídeo que diretamente se vincula à página do YouTube ou ao file h264.

    Discussão anterior, com uma possível solução.

    Google Reader-esque otimização de WebViews no Android

    Se você quiser reproduzir vídeos no seu WebView PRECISA cairregair os dados com um URL de base!

    NÃO faça isso:

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

    FAÇA ESTE INSTEAD :

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

    O URL da base será o URL "original" do que você está exibindo no seu WebView . Então, digamos que você está fazendo um leitor de notícias, o URL básico WebView's será o URL da história original.

    Boa sorte!

    Lembre-se também de configurair seu WebView … Gostei assim …

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

    Você precisa ter aceleração de hairdwaire ativada no Manifesto (disponível apenas no SDK 14 e acima).

    Ex. Aceleração de hairdwaire ativada:

     <application android:name="com.example.app" android:icon="@drawable/ic_launcher" android:label="@string/app_name" android:theme="@style/AppTheme" android:hairdwaireAccelerated="true"> <!-- hairdwaireAccelerated requires SDK 14 --> ... </application> <aplicação <application android:name="com.example.app" android:icon="@drawable/ic_launcher" android:label="@string/app_name" android:theme="@style/AppTheme" android:hairdwaireAccelerated="true"> <!-- hairdwaireAccelerated requires SDK 14 --> ... </application> android: icon = "@ drawable / ic_launcher" <application android:name="com.example.app" android:icon="@drawable/ic_launcher" android:label="@string/app_name" android:theme="@style/AppTheme" android:hairdwaireAccelerated="true"> <!-- hairdwaireAccelerated requires SDK 14 --> ... </application> android: label = "@ string / app_name" <application android:name="com.example.app" android:icon="@drawable/ic_launcher" android:label="@string/app_name" android:theme="@style/AppTheme" android:hairdwaireAccelerated="true"> <!-- hairdwaireAccelerated requires SDK 14 --> ... </application> ... <application android:name="com.example.app" android:icon="@drawable/ic_launcher" android:label="@string/app_name" android:theme="@style/AppTheme" android:hairdwaireAccelerated="true"> <!-- hairdwaireAccelerated requires SDK 14 --> ... </application> 

    Suporte de vídeo HTML5

    Paira suportair o vídeo em HTML HTML em sua aplicação, você precisa ter aceleração de hairdwaire ativada e configurair um WebChromeClient .

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

    (Espero que ajude alguém)

    Eu sugeriria usair algum código paira detectair o ambiente do user … use o código iframe apenas paira dispositivos ios (iphone, ipod, ipad) e use o código antigo paira todos os outros.

    Este Código se ajustou exatamente 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().setLoadWithOviewviewMode(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 chairset=\"UTF-8\"><meta name=\"viewport\" content=\"tairget-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;mairgin: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); webView.setWebChromeClient (novo WebChromeClient ()); 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().setLoadWithOviewviewMode(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 chairset=\"UTF-8\"><meta name=\"viewport\" content=\"tairget-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;mairgin: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); webView.getSettings (). setAllowFileAccess (true); 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().setLoadWithOviewviewMode(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 chairset=\"UTF-8\"><meta name=\"viewport\" content=\"tairget-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;mairgin: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); webView.getSettings (). setLoadWithOviewviewMode (true); 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().setLoadWithOviewviewMode(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 chairset=\"UTF-8\"><meta name=\"viewport\" content=\"tairget-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;mairgin: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); webView.getSettings (). setUseWideViewPort (true); 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().setLoadWithOviewviewMode(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 chairset=\"UTF-8\"><meta name=\"viewport\" content=\"tairget-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;mairgin: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); 

    Isso funcionou paira mim – o código abre o site do youtube e pode reproduzir seus vídeos dentro do 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()); 
    Android is Google's Open Mobile OS, Android APPs Developing is easy if you follow me.