Cargando video de Youtube a través de i-frame en la vista web de android

Quiero cargar el video de youtube a la vista web de android usando el marco

aquí está mi diseño Xml

   

Mi código es

 public class WebTube extends Activity { private WebView wv; String html = "\n" + ""; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); wv = (WebView)findViewById(R.id.webView); wv.getSettings().setJavaScriptEnabled(true); wv.loadDataWithBaseURL("", html , "text/html", "UTF-8", ""); } } 

También proporciono

& android:hardwareAccelerated="true"

cuando ejecuto esto no obtuve ningún resultado solo muestra una pantalla en negro

Intenté esto. Pero esto me proporcionó un video sobre .3gp Quality . pero necesito los videos de youtube en calidad original. Es por eso que estoy usando iframe . ¿Alguien puede ayudarme?

Intento usar código usando y lugar de iframe . pero no resolvió mi problema.

cuando ejecuto este código en el emulador, se muestra

Antes de presionar el botón de reproducción

resultado iframe en emulador

Después de presionar el botón Reproducir en video

iframe resultado en emulador en el botón de reproducción clic

Creo que no podemos transmitir videos en el emulador ya que es un dispositivo virtual

Pero cuando ejecuto esto por teléfono ni siquiera muestra este resultado.

bash marco con un documento adjunto funciona bien en el teléfono, así como emulador

 String customHtml = ""; 

Así que ayúdame a cargar videos en este marco. ¿Puedes decirme qué va mal en mi código?

(Lo ejecuto en el teléfono). ¿Puede alguien decirme cuál es el problema? también funcionará iframe en Android 2.1?

¿ Alguien intentó probar Youtube Api ?

Como se indica en la documentación de android Webview ,

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 .

Para soporte de pantalla completa, se requieren implementaciones de onShowCustomView (View, WebChromeClient.CustomViewCallback) y onHideCustomView (), getVideoLoadingProgressView () es opcional.

Tengo ifram personalizado completo para la vista de youtube

 public class Act_VideoPlayer extends Activity { WebView webView; ProgressBar progressBar; ImageView back_btn; String video_url = "KK9bwTlAvgo", html = ""; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.full_screen_youtube_video_screen); setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_LANDSCAPE); back_btn = (ImageView) findViewById(R.id.full_videoview_btn); back_btn.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { webView.loadData("", "text/html", "UTF-8"); finish(); } }); webView = (WebView) findViewById(R.id.webView); progressBar = (ProgressBar) findViewById(R.id.progressBar); if (video_url.equalsIgnoreCase("")) { finish(); return; } WebSettings ws = webView.getSettings(); ws.setLayoutAlgorithm(WebSettings.LayoutAlgorithm.SINGLE_COLUMN); ws.setPluginState(WebSettings.PluginState.ON); ws.setJavaScriptEnabled(true); webView.setScrollBarStyle(View.SCROLLBARS_INSIDE_OVERLAY); webView.reload(); if (networkUtil.isConnectingToInternet(Act_VideoPlayer.this)) { html = getHTML(video_url); } else { html = "" + getResources().getString(R.string.The_internet_connection_appears_to_be_offline); CustomToast.animRedTextMethod(Act_VideoPlayer.this, getResources().getString(R.string.The_internet_connection_appears_to_be_offline)); } webView.loadData(html, "text/html", "UTF-8"); WebClientClass webViewClient = new WebClientClass(progressBar); webView.setWebViewClient(webViewClient); WebChromeClient webChromeClient = new WebChromeClient(); webView.setWebChromeClient(webChromeClient); } @Override protected void onDestroy() { super.onDestroy(); try { webView.loadData("", "text/html", "UTF-8"); } catch (Exception e) { e.printStackTrace(); } } @Override public void onBackPressed() { super.onBackPressed(); try { webView.loadData("", "text/html", "UTF-8"); finish(); } catch (Exception e) { e.printStackTrace(); } } public class WebClientClass extends WebViewClient { ProgressBar ProgressBar = null; WebClientClass(ProgressBar progressBar) { ProgressBar = progressBar; } @Override public void onPageStarted(WebView view, String url, Bitmap favicon) { super.onPageStarted(view, url, favicon); ProgressBar.setVisibility(View.VISIBLE); } @Override public void onPageFinished(WebView view, String url) { super.onPageFinished(view, url); ProgressBar.setVisibility(View.GONE); } @Override public boolean shouldOverrideUrlLoading(WebView view, String url) { LogShowHide.LogShowHideMethod("webview-click :", "" + url.toString()); view.loadUrl(getHTML(video_url)); return true; } } public String getHTML(String videoId) { String html = "\n"; LogShowHide.LogShowHideMethod("video-id from html url= ", "" + html); return html; } } 

Esto funcionó para mí:

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

Intenta esto, funciona bien …

  mWebView = (WebView) findViewById(R.id.web); String videoURL = "https://www.youtube.com/embed/R52bof3tvZs"; String vid = ""; WebChromeClient mWebChromeClient = new WebChromeClient(){ public void onProgressChanged(WebView view, int newProgress) { } }; mWebView.getSettings().setPluginState(WebSettings.PluginState.ON); mWebView.setWebChromeClient(mWebChromeClient); mWebView.setWebViewClient(new WebViewClient() { public void onPageFinished(WebView view, String url) { mWebView.loadUrl("javascript:(function() { document.getElementsByTagName('video')[0].play(); })()"); } }); mWebView.getSettings().setJavaScriptEnabled(true); mWebView.getSettings().setAppCacheEnabled(true); mWebView.setInitialScale(1); mWebView.getSettings().setLoadWithOverviewMode(true); mWebView.getSettings().setUseWideViewPort(true); if (Build.VERSION.SDK_INT < 17) { Log.i("GPSNETWORK", "<17"); } else { Log.i("GPSNETWORK", Build.VERSION.SDK_INT+">=17"); mWebView.getSettings().setMediaPlaybackRequiresUserGesture(false); } String myUrl = "<html><body style='margin:0px;padding:0px;'>\n" + " <script type='text/javascript' src='http://www.youtube.com/iframe_api'></script><script type='text/javascript'>\n" + " var player;\n" + " function onYouTubeIframeAPIReady()\n" + " {player=new YT.Player('playerId',{events:{onReady:onPlayerReady}})}\n" + " function onPlayerReady(event){player.mute();player.setVolume(0);player.playVideo();}\n" + " </script>\n" + " <iframe id='playerId' type='text/html' width='1280' height='720'\n" + " src=\""+videoURL+"\"?enablejsapi=1&rel=0&playsinline=1&autoplay=1&showinfo=0&autohide=1&controls=0&modestbranding=1' frameborder='0'>\n" + " </body></html>"; mWebView.loadData(""+Html.fromHtml(myUrl), "text/html", "UTF-8"); 

No soy un experto en la vista web de Android, pero encontré problemas similares con la página web.

Lo que tenía que hacer era usar la etiqueta y me aseguré de que tuviera onclick = “this.play (); en la etiqueta. El evento onclick era específicamente para Android. Chrome, Safari, Firefox no lo necesitaba.

Por ejemplo:

  

Sin onclick, el navegador de Android no funcionaría. Como webview llama al navegador, sospecho que es lo mismo.

Y asegúrese de que en la etiqueta fuente NO use el atributo codec.

Espero que esto te ayude.

No es exactamente una respuesta directa a su pregunta, pero creo que es posible que desee utilizar la recientemente lanzada API de Android de YouTube. Debería permitir agregar la reproducción de videos de YouTube a sus aplicaciones, para que no tenga que inyectarlas en una vista web en un iFrame. Eso es una tontería, y no todos los dispositivos Android tendrán Flash instalado 🙂

https://developers.google.com/youtube/android/player/

Puedes visitar mi pregunta nuevamente. Iv’e creó una función que le proporciona todos los enlaces directos del video de youtube (incluidos los enlaces hq). Ahora puede usar mp4 y así en lugar del pobre 3gp.

El uso de WebChromeClient le permite manejar diálogos, favicones, títulos y el progreso de JavaScript:

 wv = setWebChromeClient(new WebChromeClient());