¿Cómo se reproducen videos de Youtube en la vista de video de Android?

Estoy desarrollando una aplicación de Android que requiere un reproductor de video de youtube incrustado en ella. Obtuve correctamente la URL del video RTSP de la API, pero al intentar cargar esta URL rtsp en mi vista de video de Android, dice ” Can't play this video. “. Previamente, desarrollé una aplicación similar en este método, y funcionó bien en ese momento, pero tampoco se carga ahora.

Estoy seguro de eso, obtengo la url RTSP correcta de la API. rtsp://v6.cache6.c.youtube.com/CiULENy73wIaHAlV9VII3c64lRMYESARFEgGUglwbGF5bGlzdHMM/0/0/0/video.3gp

Aquí está mi código de actividad:

  mVideoURL = getIntent().getStringExtra("EXT_URL"); Log.i("VIDEO URL", " " + mVideoURL); MediaController mc = new MediaController(this); mVideoStreamView = (VideoView) findViewById(R.id.vidPlayer); mVideoStreamView.setVideoURI(Uri.parse(mVideoURL)); mVideoStreamView.setMediaController(mc); mVideoStreamView.requestFocus(); mVideoStreamView.start(); 

EDITAR Encontró algo de información adicional del logcat:

 ARTSPConnection(6607): status: RTSP/1.0 200 OK ASessionDescription(6607): v=0 ASessionDescription(6607): o=GoogleStreamer 378992432 328144046 IN IP4 74.125.213.182 ASessionDescription(6607): s=Video ASessionDescription(6607): c=IN IP4 0.0.0.0 ASessionDescription(6607): b=AS:29 ASessionDescription(6607): t=0 0 ASessionDescription(6607): a=control:* ASessionDescription(6607): a=range:npt=0-1703.000000 ASessionDescription(6607): m=video 0 RTP/AVP 98 ASessionDescription(6607): b=AS:17 ASessionDescription(6607): a=rtpmap:98 H263-2000/90000 ASessionDescription(6607): a=control:trackID=0 ASessionDescription(6607): a=cliprect:0,0,144,176 ASessionDescription(6607): a=framesize:98 176-144 ASessionDescription(6607): a=fmtp:98 profile=0;level=10 ASessionDescription(6607): m=audio 0 RTP/AVP 99 ASessionDescription(6607): b=AS:12 ASessionDescription(6607): a=rtpmap:99 AMR/8000/1 ASessionDescription(6607): a=control:trackID=1 ASessionDescription(6607): a=fmtp:99 octet-align ARTSPConnection(6607): status: RTSP/1.0 200 OK ARTSPConnection(6607): status: RTSP/1.0 200 OK ARTSPConnection(6607): status: RTSP/1.0 200 OK ARTSPConnection(6607): status: RTSP/1.0 200 OK ARTSPConnection(6607): status: RTSP/1.0 200 OK ASessionDescription(6607): v=0 ASessionDescription(6607): o=GoogleStreamer 1299458498 503248054 IN IP4 74.125.213.182 ASessionDescription(6607): s=Video ASessionDescription(6607): c=IN IP4 0.0.0.0 ASessionDescription(6607): b=AS:29 ASessionDescription(6607): t=0 0 ASessionDescription(6607): a=control:* ASessionDescription(6607): a=range:npt=0-1703.000000 ASessionDescription(6607): m=video 0 RTP/AVP 98 ASessionDescription(6607): b=AS:17 ASessionDescription(6607): a=rtpmap:98 H263-2000/90000 ASessionDescription(6607): a=control:trackID=0 ASessionDescription(6607): a=cliprect:0,0,144,176 ASessionDescription(6607): a=framesize:98 176-144 ASessionDescription(6607): a=fmtp:98 profile=0;level=10 ASessionDescription(6607): m=audio 0 RTP/AVP 99 ASessionDescription(6607): b=AS:12 ASessionDescription(6607): a=rtpmap:99 AMR/8000/1 ASessionDescription(6607): a=control:trackID=1 ASessionDescription(6607): a=fmtp:99 octet-align ARTSPConnection(6607): status: RTSP/1.0 461 Unsupported Transport ARTSPConnection(6607): status: RTSP/1.0 461 Unsupported Transport 

Sugeridme una forma de cargar videos de youtube en la vista de videos de Android.

Gracias por adelantado…

EDITAR Acaba de marcar en otro dispositivo, HTC Desire (2.2). El código funcionó bien. Me pregunto si pensará: ¿Cuál será el problema con Nexus (4.1)?

Como no puedo encontrar ninguna forma de cargar la URL de rtsp en la vista de video (para todos los dispositivos y versiones de Android), resolví mi problema con otra solución alternativa. Utilicé una vista web para incrustar el reproductor de youtube dentro de ella, y este método funciona bien en todos los dispositivos probados.

Aquí está mi código:

 mWebView.getSettings().setJavaScriptEnabled(true); mWebView.getSettings().setPluginState(PluginState.ON); mWebView.loadUrl("http://www.youtube.com/embed/" + videoID + "?autoplay=1&vq=small"); mWebView.setWebChromeClient(new WebChromeClient()); 

Muchas gracias por toda su ayuda chicos.

 private class YourAsyncTask extends AsyncTask { ProgressDialog progressDialog; @Override protected void onPreExecute() { super.onPreExecute(); progressDialog = ProgressDialog.show(AlertDetail.this, "", "Loading Video wait...", true); } @Override protected Void doInBackground(Void... params) { try { String url = "http://www.youtube.com/watch?v=1FJHYqE0RDg"; videoUrl = getUrlVideoRTSP(url); Log.e("Video url for playing=========>>>>>", videoUrl); } catch (Exception e) { Log.e("Login Soap Calling in Exception", e.toString()); } return null; } @Override protected void onPostExecute(Void result) { super.onPostExecute(result); progressDialog.dismiss(); /* videoView.setVideoURI(Uri.parse("rtsp://v4.cache1.c.youtube.com/CiILENy73wIaGQk4RDShYkdS1BMYDSANFEgGUgZ2aWRlb3MM/0/0/0/video.3gp")); videoView.setMediaController(new MediaController(AlertDetail.this)); videoView.requestFocus(); videoView.start();*/ videoView.setVideoURI(Uri.parse(videoUrl)); MediaController mc = new MediaController(AlertDetail.this); videoView.setMediaController(mc); videoView.requestFocus(); videoView.start(); mc.show(); } } public static String getUrlVideoRTSP(String urlYoutube) { try { String gdy = "http://gdata.youtube.com/feeds/api/videos/"; DocumentBuilder documentBuilder = DocumentBuilderFactory.newInstance().newDocumentBuilder(); String id = extractYoutubeId(urlYoutube); URL url = new URL(gdy + id); HttpURLConnection connection = (HttpURLConnection) url.openConnection(); Document doc = documentBuilder.parse(connection.getInputStream()); Element el = doc.getDocumentElement(); NodeList list = el.getElementsByTagName("media:content");///media:content String cursor = urlYoutube; for (int i = 0; i < list.getLength(); i++) { Node node = list.item(i); if (node != null) { NamedNodeMap nodeMap = node.getAttributes(); HashMap maps = new HashMap(); for (int j = 0; j < nodeMap.getLength(); j++) { Attr att = (Attr) nodeMap.item(j); maps.put(att.getName(), att.getValue()); } if (maps.containsKey("yt:format")) { String f = maps.get("yt:format"); if (maps.containsKey("url")) { cursor = maps.get("url"); } if (f.equals("1")) return cursor; } } } return cursor; } catch (Exception ex) { Log.e("Get Url Video RTSP Exception======>>", ex.toString()); } return urlYoutube; } protected static String extractYoutubeId(String url) throws MalformedURLException { String id = null; try { String query = new URL(url).getQuery(); if (query != null) { String[] param = query.split("&"); for (String row : param) { String[] param1 = row.split("="); if (param1[0].equals("v")) { id = param1[1]; } } } else { if (url.contains("embed")) { id = url.substring(url.lastIndexOf("/") + 1); } } } catch (Exception ex) { Log.e("Exception", ex.toString()); } return id; } 

Debido a la versión actual de YouTube, es probable que obtenga el error “No se puede reproducir este video” si va a utilizar VideoView para mostrar su video.

Eche un vistazo a este acercamiento con YouTubePlayerView : http://xinyustudio.wordpress.com/2014/03/17/android-development-play-youtube-video-in-your-app-cant-play-this-video-and -solución de problemas/

Use la API del reproductor de YouTube para Android. Funciona perfectamente Mira mi ejemplo desde aquí:

activity_main.xml:

       

MainActivity.java:

 package com.example.andreaskonstantakos.vfy; import android.os.Bundle; import android.view.View; import android.widget.Button; import com.google.android.youtube.player.YouTubeBaseActivity; import com.google.android.youtube.player.YouTubeInitializationResult; import com.google.android.youtube.player.YouTubePlayer; import com.google.android.youtube.player.YouTubePlayerView; public class MainActivity extends YouTubeBaseActivity { YouTubePlayerView youTubePlayerView; Button button; YouTubePlayer.OnInitializedListener onInitializedListener; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); youTubePlayerView = (YouTubePlayerView) findViewById(R.id.youtube_player); button = (Button) findViewById(R.id.button); onInitializedListener = new YouTubePlayer.OnInitializedListener(){ @Override public void onInitializationSuccess(YouTubePlayer.Provider provider, YouTubePlayer youTubePlayer, boolean b) { youTubePlayer.loadVideo("Hce74cEAAaE"); youTubePlayer.play(); } @Override public void onInitializationFailure(YouTubePlayer.Provider provider, YouTubeInitializationResult youTubeInitializationResult) { } }; button.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { youTubePlayerView.initialize(PlayerConfig.API_KEY,onInitializedListener); } }); } } 

y la clase PlayerConfig.java:

  package com.example.andreaskonstantakos.vfy; /** * Created by Andreas Konstantakos on 13/4/2017. */ public class PlayerConfig { PlayerConfig(){} public static final String API_KEY = "xxxxx"; } 

Reemplace “Hce74cEAAaE” con su identificación de video de https://www.youtube.com/watch?v=Hce74cEAAaE . Obtenga su API_KEY de Console.developers.google.com y también reemplácela en PlayerConfig.API_KEY. Para obtener más información, puede seguir el siguiente tutorial paso a paso: https://www.youtube.com/watch?v=3LiubyYpEUk

Mira este enlace . Explica cómo implementar videos de YouTube en VideoView.

Usando Video View:

1. Código en el diseño xml:

  

2. Código en clase java:

 VideoView v = (VideoView) findViewById(R.id.YoutubeVideoView); v.setVideoURI(Uri.parse(“rtsp://v4.cache3.c.youtube.com/CjYLENy73wIaLQlW_ji2apr6AxMYDSANFEIJbXYtZ29vZ2xlSARSBXdhdGNoYOr_86Xm06e5UAw=/0/0/0/video.3gp”)); v.setMediaController(new MediaController(this)); //sets MediaController in the video view // MediaController containing controls for a MediaPlayer v.requestFocus();//give focus to a specific view v.start();//starts the video 

Configuramos VideoUri especificando el enlace 3gp del video de Youtube para plataformas móviles. Para agregar controles multimedia como Play, Pausa, Retroceder, Avance rápido y un control deslizante de progreso, agregamos MediaController a VideoView.

uri.parse (enlace de 3gp del video) … puedes obtener esto de youtube

Depende del formato de códec de video que está recibiendo su rtsp. Hay ciertos dispositivos que no son compatibles con la ejecución de archivos .mp4. Visita el soporte de Android Media para obtener más información. Compruebe si puede reproducir cualquier otro archivo .3gp o no.