Cómo incrustar vídeo de Youtube en Android WebView?

Quiero incrustar un video de youtube en mi aplicación para Android. Tiene un cajón de navegación , y cuando este cajón se abre, el video debe continuar jugando. Y me gustaría que mi aplicación pudiera reproducir videos con restricciones de copyright, por ejemplo, videos de Vevo . Mi primer intento fue simplemente cargar la URL de inserción ( https://www.youtube.com/embed/VIDEO_ID ) en un WebView con un cliente Chrome, pero para muchos videos, por ejemplo, desde Vevo, de esta manera , veo este mensaje :

This Video Contains content from Vevo. It is restricted from playback on certain sites

Para manejar este error, decidí usar la API de Youtube .

Entre las implementaciones disponibles de esta lib, he probado estos:

La API de Android tiene la ventaja de poder reproducir vídeo con la restricción mencionada, pero se descartó porque su comportamiento predeterminado es que el reproductor detiene el video cuando se abre el cajón.

Con la API de iframe, puedo reproducir videos cuando se abre el cajón, pero no con la restricción.

Mi última tentativa es usar la API Javascript. Actualmente, tengo la misma situación que iframe, es decir, no puedo reproducir videos con restricción.

Sin embargo creo que esta es la manera correcta de encontrar una solución. En la referencia api , recomiendan usar el SWFObject , pero hasta donde yo sé, no hay flah disponible para móviles, como expuesto en esta respuesta . Así que, ¿hay otra forma de incrustar vídeo en mi WebView?

Y otra duda es: ¿Cómo los sitios móviles pueden reproducir vídeos desde youtube, incluso con la restricción de "ciertos sitios"? Por favor, entienda que quien está preguntando aquí es un desarrollador de Android no muy experimentado con Javascript.

Actualmente, tengo este pedazo de código:

Disposición donde se cargará el reproductor:

 <?xml version="1.0" encoding="utf-8"?> <FrameLayout xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="match_parent" android:layout_height="match_parent"> <WebView android:id="@+id/web_view" android:layout_width="match_parent" android:layout_height="match_parent" /> </FrameLayout> 

Fragmento que infla esta disposición:

 public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) { View view = inflater.inflate(R.layout.fragment, null); WebView webView = (WebView) view.findViewById(R.id.web_view); WebSettings webSettings = webView.getSettings(); webSettings.setJavaScriptEnabled(true); webView.loadUrl("file:///android_asset/player_webview.html"); webView.setWebViewClient(new CustomClient()); return view; } private class CustomClient extends WebViewClient { @Override public boolean shouldOverrideUrlLoading(WebView webview, String url) { webview.setWebChromeClient(new WebChromeClient()); webview.loadUrl(url); return true; } } 

Archivo HTML

 <!DOCTYPE html> <html> <head> <script type="text/javascript" src="./swfobject/swfobject.js"></script> <div id="ytapiplayer"> You need Flash player 8+ and JavaScript enabled to view this video. </div> <script type="text/javascript"> var params = { allowScriptAccess: "always" }; var atts = { id: "myytplayer" }; swfobject.embedSWF("http://www.youtube.com/v/G90AgiAMM6k?enablejsapi=1&playerapiid=ytplayer&version=3", "ytapiplayer", "425", "356", "8", null, null, params, atts); </script> </head> </html> 

Creo que una pregunta similar que se ha hecho podría ser de ayuda para usted y podría ser un buen punto de partida. Pero el segundo enlace que voy a publicar podría ser de más ayuda.

Reproducir Youtube HTML5 incrustado de vídeo en Android WebView

Además, encontré en un sitio web separado este comentario que podría ser tu respuesta mágica:

"El reproductor personalizado que estás mencionando probablemente usa un truco bien conocido: engañar a youtube para que proporcione una versión MP4 de ese video, descargarlo progresivamente y volver a servirlo a través de un servidor http local a MPMoviePlayerController.

La restricción se basa en una búsqueda inversa de la dirección IP que está utilizando al acceder al vídeo en cuestión. Utilice un proxy de dentro de los EE.UU. y verá que de repente juega sin ningún problema. " http://w3facility.org/question/embed-youtube-videos-with-contains-content-from-it-is-restricted- Desde-reproducción-en-cierto-sitio /

¡¡Espero que esto ayude!!

Recientemente conocí el mismo problema y lo resolví, espero ser útil.

Es porque este video no es reproducible en todos los sitios web, por lo que si carga un html local, el encabezado http "Referer" está vacío, entonces youtube no puede determinar si su sitio web está en la lista de prohibidos. La solución es poner su html en su propio servidor web, luego cargar a través de url, a continuación, el "Referer" encabezado será la dirección del servidor web, el problema resuelto.

Para mi caso Android 4.4.4, añadir el encabezado Referer " https://www.youtube.com " en el primer argumento de loadDataWithBaseURL () guardado mi día!

  mWebView = (WebView) getActivity().findViewById(R.id.webView); if (Build.VERSION.SDK_INT < 8) { mWebView.getSettings().setPluginsEnabled(true); } else { mWebView.getSettings().setPluginState(WebSettings.PluginState.ON); } mWebView.getSettings().setJavaScriptEnabled(true); mWebView.getSettings().setLoadWithOverviewMode(true); mWebView.setWebViewClient(new WebViewClient()); mWebView.setBackgroundColor(0x00000000); mWebView.getSettings().setBuiltInZoomControls(true); String html = "<iframe height='95%' width='100%' src='" + videoURL + "' frameborder='0' allowfullscreen></iframe>"; mWebView.loadDataWithBaseURL("https://www.youtube.com", html, "text/html", "UTF-8", null); 
  • Permiso de la API de Youtube 403 Error prohibido
  • Error de YouTubePlayerView XML
  • Límites de cuota para la API del reproductor de YouTube para Android
  • Lista de reproducción de Youtube mostrada en ListView
  • Android Youtube Api cambia VideoID
  • Youtube YouTubePlayerSupportFragment no funciona correctamente (¿cargando siempre?)
  • El método de reproducción de la API de IFrame de YouTube no funciona antes de tocar algunas tabletas Android
  • Excepción al utilizar YouTubePlayerFragment con FragmentActivity y ActionBarSherlock
  • Se ha superado el límite diario de uso no autenticado. El uso continuo requiere registrarse
  • YouTube API 3 Subir video - Acceso no configurado - Android
  • Detectar cuándo ha terminado de reproducir un video de YouTube
  • FlipAndroid es un fan de Google para Android, Todo sobre Android Phones, Android Wear, Android Dev y Aplicaciones para Android Aplicaciones.