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
- API de datos de Youtube: Obtenga acceso al flujo multimedia ya la reproducción (JAVA)
- Youtube SDK se bloquea con DeadObjectException cuando se mueve a la aplicación de youtube
- YouTubeThumbnailView en ListView
- Youtube Api android autostart
- Android webview html5 vídeo autoplay no funciona en android 4.0.3
Para manejar este error, decidí usar la API de Youtube .
Entre las implementaciones disponibles de esta lib, he probado estos:
- API de Android
- API de iframe
- API Javascript
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>
- Forzar anuncio del youtube para que aparezca para la prueba
- Api de YouTube: No está conectado. Llame a connect () y espere a que onConnected () se llame
- Youtube Obtener la lista de videos subidos. Error FileNotFound
- Api de Android de Youtube muestra un error
- No se pueden reproducir algunos vídeos de Youtube con la API de reproductor de YouTube para Android
- YouTubeAndroidPlayer en Android se bloquea en play ()
- Luchando con el fragmento de la ayuda del jugador de Youtube
- Cómo cargar YouTubePlayer utilizando YouTubePlayerFragment dentro de otro Fragmento ?? (Androide)
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);
- ¿Cómo reiniciar BluetoothLeScanner?
- Cómo controlar el volumen de audio que se está reproduciendo desde el servicio?