Las transmisiones en directo de Youtube en la vista web de Android son nerviosas

Tengo muchos problemas para intentar reproducir algunos videos de youtube dentro de una vista Web de Android. Busco en todas partes pero no puedo encontrar una solución que funcione.

Estoy usando el siguiente código:

WebView mWebView = (WebView) findViewById(R.id.webView1); //Setup Webview WebChromeClient client= new WebChromeClient(); mWebView.setWebChromeClient(client); mWebView.getSettings().setPluginsEnabled(true); mWebView.getSettings().setSupportZoom(false); mWebView.getSettings().setJavaScriptEnabled(true); mWebView.getSettings().setRenderPriority(RenderPriority.HIGH); mWebView.getSettings().setAllowFileAccess(true); mWebView.loadDataWithBaseURL("www.youtube.com", "<iframe class=\"youtube-player\" type=\"text/html\" width=\"640\" height=\"385\" src=\"http://www.youtube.com/embed/JEkbk-xDmZE?html5=1\" frameborder=\"0\">\n</iframe>", "text/html", "UTF-8", ""); 

El problema parece ser sólo con ciertos flujos como este: http://www.youtube.com/watch?v=JEkbk-xDmZE

El sonido es genial, pero el video es muy lento, como 1 fotograma por segundo. irreconocible

Pero si utilizo este flujo: http://www.youtube.com/watch?v=GDFIYKmNw9Q

Funciona perfectamente bien.

¿Cuál es la diferencia entre estas corrientes en vivo y cómo puedo conseguir que el primero juegue correctamente? También debo mencionar que a veces la primera no funciona bien. No soy capaz de averiguar por qué a veces juega y otras veces no. He intentado crear un nuevo proyecto con bastante apenas un Webview y un dispositivo del restablecimiento de fábrica para eliminar cualquier configuración que puede ser efecto de esto pero todavía consigo el problema.

One Solution collect form web for “Las transmisiones en directo de Youtube en la vista web de Android son nerviosas”

He luchado con YouTube en general, tratando de conseguir que funcione en Android. ¿Por qué ciertos videos lag es más allá de mí, pero puede ser diferentes ajustes de calidad y ancho de banda limitado, por lo tanto, su almacenamiento en búfer.

Esperemos que una de las opciones a continuación podría ayudar si no es un problema de almacenamiento en búfer.

Actualmente, con WebView utilizas un IFrame o la API de YouTube. De lo contrario, puede utilizar la API de GData para obtener el enlace RSTP al vídeo para su uso en un VideoView. Por último, puede usar Intent para iniciar la aplicación de YouTube.

En el futuro hay una nueva API para Android para YouTube. Pero no ha sido liberado. Tema de nuevo ni tiene soporte de fragmentos para Google Maps que se anunció en diciembre de 2011. – http://www.youtube.com/watch?v=3WFsx-u-q3Y

Pros / Contras abajo (Todos los ejemplos hacen que el WebView llene el 100% de la altura y el ancho de la pantalla)

WebView – IFrame – Configuración limitada disponible. Se ejecuta en el WebView y funciona en casi todas las plataformas. No me malinterpreten, a veces las diferentes opciones no funcionan, y obtienes un fondo gris cuando intentas reproducir el video. Utilice el siguiente sitio para crear el código IFrame y pruebe diferentes opciones hasta que funcione para usted: https://developers.google.com/youtube/youtube_player_demo (Observe que varias de las opciones de configuración permitidas no funcionan, como ocultar controles. sin efecto). Como se mencionó hay un montón de opciones diferentes por lo que la prueba y el error está involucrado. Mientras que varios no funcionan, algunos parecen muy diferentes. En cuanto a su pregunta, nunca he utilizado la opción html5 = 1 antes, o establecer youtube.com como la url de base.

 webView = new WebView(this); webView.setLayoutParams(new LinearLayout.LayoutParams(LinearLayout.LayoutParams.MATCH_PARENT, LinearLayout.LayoutParams.MATCH_PARENT)); webView.getSettings().setPluginState(PluginState.ON); webView.getSettings().setLoadsImagesAutomatically(true); webView.getSettings().setAppCacheEnabled(true); webView.getSettings().setCacheMode(WebSettings.LOAD_CACHE_ELSE_NETWORK); webView.getSettings().setJavaScriptEnabled(true); // Prevent scrolling of the webview webView.setScrollBarStyle(View.SCROLLBARS_INSIDE_OVERLAY); webView.setHorizontalScrollBarEnabled(false); webView.setVerticalScrollBarEnabled(false); webView.setWebChromeClient(new WebChromeClient()); //Blank webview to prevent null pointer plugin issues webView.setWebViewClient(new WebViewClient() { @Override public boolean shouldOverrideUrlLoading(WebView view, String url) { view.loadUrl(url); return true; } }); String data = "<html>"+ "<head>"+ "</head>"+ "<body style=\"margin: 0; padding: 0\">"+ "<iframe " + "type=\"text/html\" "+ "class=\"youtube-player\" "+ "width=\"100%25\" "+ "height=\"100%25\" "+ "src=\"http://www.youtube.com/v/" + uri + "?controls=0&showinfo=0&showsearch=0&modestbranding=1&fs=0\" "+ "frameborder=\"0\"></iframe>" + "</body>"+ "</html>"; webView.loadData(data, "text/html", "utf-8"); 

WebView – API de YouTube – Mucho mejor, pero requiere flash. Por lo tanto, "Nexus 7" y cualquier futuro dispositivo lanzado con JellyBean (4.1 y superior) no funcionará. Como el WebView en esos dispositivos utiliza una versión reducida de Chrome en lugar de una versión reducida de WebBrowser. Por lo tanto, como me enteré ayer, en el futuro esto no se puede utilizar en nuestras aplicaciones.

 webView = new WebView(this); webView.setLayoutParams(new LinearLayout.LayoutParams(LinearLayout.LayoutParams.MATCH_PARENT, LinearLayout.LayoutParams.MATCH_PARENT)); webView.getSettings().setPluginState(PluginState.ON); webView.getSettings().setLoadsImagesAutomatically(true); webView.getSettings().setAppCacheEnabled(true); webView.getSettings().setCacheMode(WebSettings.LOAD_CACHE_ELSE_NETWORK); webView.getSettings().setJavaScriptEnabled(true); // Prevent scrolling of the webview webView.setScrollBarStyle(View.SCROLLBARS_INSIDE_OVERLAY); webView.setHorizontalScrollBarEnabled(false); webView.setVerticalScrollBarEnabled(false); webView.setWebChromeClient(new WebChromeClient()); //Blank webview to prevent null pointer plugin issues webView.setWebViewClient(new WebViewClient() { @Override public boolean shouldOverrideUrlLoading(WebView view, String url) { view.loadUrl(url); return true; } }); String data = "<!DOCTYPE HTML>" + "<html>" + "<body style=\"margin: 0; padding: 0\">" + "<div id=\"player\"></div>" + "<script>" + // Load player api asynchronously. "var tag = document.createElement('script');" + "tag.src = \"http://www.youtube.com/player_api\";" + "var firstScriptTag = document.getElementsByTagName('script')[0];" + "firstScriptTag.parentNode.insertBefore(tag, firstScriptTag);" + "var done = false;" + "var player;" + "function onYouTubePlayerAPIReady() {" + "player = new YT.Player('player', {" + "height: '100%25'," + "width: '100%25'," + "videoId: '" + uri + "'," + "playerVars: { 'controls': " + controls + ", 'showinfo': 0, 'fs':0, 'modestbranding':1 }," + "events: {" + "'onReady': onPlayerReady," + "'onStateChange': onPlayerStateChange" + "}" + "});" + "}" + "function onPlayerReady(evt) {" + // Autoplay "evt.target.playVideo();" + "}" + "function onPlayerStateChange(evt) {" + "}" + "function stopVideo() {" + "player.stopVideo();" + "}" + "</script>" + "</body>" + "</html>"; webView.loadData(data, "text/html", "utf-8"); 

VideoView – API de datos de YouTube – Puede obtener acceso a información y enlaces importantes a los flujos de vídeo para su uso en un VideoView. El único inconveniente es que la API gratuita está limitada a los videos 3GP de baja calidad, no a los flujos MP4 (alta calidad / HD). – https://developers.google.com/youtube/getting_started#data_api

Intención: iniciar YouTube : abre la aplicación de YouTube con el video que quieras reproducir. El inconveniente es que se abre otra aplicación, no incrustada en tu aplicación, y que algunos dispositivos no tienen instalado YouTube.

 if (AppChecker.isAppInstalled("com.google.android.youtube", this) == true) { Intent intent = new Intent(Intent.ACTION_VIEW, Uri.parse("vnd.youtube:" + uri)); startActivity(intent); } else { //Show youtube not installed } //Code to check if YouTube is installed. public class AppChecker { public static boolean isAppInstalled(String uri, Activity activity) { PackageManager pm = activity.getApplicationContext().getPackageManager(); boolean app_installed = false; try { pm.getPackageInfo(uri, PackageManager.GET_ACTIVITIES); app_installed = true; } catch (PackageManager.NameNotFoundException e) { app_installed = false; } return app_installed; } } 
  • Cómo obtener el ID de video de YouTube, incluidos los parámetros
  • Integración de youtube para fragmentar
  • Los controles de YouTube (reproducción / pausa) no funcionan después de restaurar el reproductor / se reanuda la actividad
  • Streaming de vídeos de Youtube
  • API de Youtube: busca videos reproducibles en dispositivos móviles
  • Compartir enlace de audio de terceros en la nube de sonido y youtube en la aplicación Android
  • Reproducir Youtube HTML5 incrustado de vídeo en Android WebView
  • Aplicación de reproductor de youtube para Android, reproducción de Google rechazada para jugar en segundo plano
  • Phonegap: ¿Cómo evitar que los vídeos de youtube se reproduzcan después de pulsar el botón de encendido?
  • El reproductor de video de youtube superpone el otro diseño cuando nos desplazamos
  • ¿Por qué Android WebView no está cargando youtube HTML5 iframe video?
  • FlipAndroid es un fan de Google para Android, Todo sobre Android Phones, Android Wear, Android Dev y Aplicaciones para Android Aplicaciones.