Cómo jugar videos de Youtube en Android Video View?

Estoy desarrollando una aplicación de Android que requiere un reproductor de video de youtube incrustado en él. He conseguido con éxito la URL de vídeo RTSP de la API, pero al intentar cargar esta url rtsp en mi vista de vídeo de Android, dice " Can't play this video. ". Anteriormente, desarrollé una aplicación similar en este método, y funcionó bien en ese momento, pero también no se puede cargar ahora.

Estoy seguro de que, estoy recibiendo la url correcta RTSP 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(); 

EDIT Encontrar 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 

Por favor, sugerirme una forma de cargar vídeos de youtube en la vista de vídeo de Android.

Gracias por adelantado…

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

Como no puedo encontrar ninguna forma de cargar la URL rtsp en la vista de vídeo (para todos los dispositivos y versiones android), he resuelto mi problema con otro trabajo alrededor. Utilicé una webview para incrustar el reproductor de youtube dentro de él, 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<Void, Void, Void> { 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<String, String> maps = new HashMap<String, String>(); 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 obtengas un error "No se puede reproducir este video" si usas VideoView para mostrar tu video.

Echa un vistazo a este approcach 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/

Uso de la vista de vídeo:

1.Code en el diseño xml:

 <VideoView android:layout_width=”wrap_content” android:layout_height=”wrap_content” android:id=”@+id/YoutubeVideoView” /> 

2.Code en la 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 

Establecemos VideoUri especificando el enlace 3gp de vídeo de Youtube para plataformas móviles. Para agregar controles de medios como Play, Pause, Rewind, Fast Forward y un control deslizante de progreso, agregamos MediaController al VideoView.

Uri.parse (enlace 3gp del video) … puedes obtener esto desde youtube

Depende de qué formato de códec de vídeo que está recibiendo su rtsp. Hay ciertos dispositivos que no soportan ejecutar el archivo .mp4. Vaya a través del soporte de Android Media para obtener más información. Compruebe si puede reproducir otros archivos .3gp o no.

Haga clic en este enlace . Explica cómo implementar el vídeo de youtube en VideoView.

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

Activity_main.xml:

  <?xml version="1.0" encoding="utf-8"?> <RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:tools="http://schemas.android.com/tools" android:id="@+id/activity_main" android:layout_width="match_parent" android:layout_height="match_parent" tools:context="com.example.andreaskonstantakos.vfy.MainActivity"> <com.google.android.youtube.player.YouTubePlayerView android:layout_width="match_parent" android:layout_height="wrap_content" android:visibility="visible" android:layout_centerHorizontal="true" android:id="@+id/youtube_player" android:layout_alignParentTop="true" /> <Button android:text="Button" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_alignParentBottom="true" android:layout_centerHorizontal="true" android:layout_marginBottom="195dp" android:visibility="visible" android:id="@+id/button" /> </RelativeLayout> 

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 el "Hce74cEAAaE" por su ID de video desde https://www.youtube.com/watch?v=Hce74cEAAaE . Obtenga su API_KEY de Console.developers.google.com y también reemplácela en el PlayerConfig.API_KEY. Para obtener más información, puede seguir paso a paso el siguiente tutorial: https://www.youtube.com/watch?v=3LiubyYpEUk

  • Posicionar el video dentro de un VideoView
  • Android: varias pistas de audio en un VideoView?
  • ¿Cómo tomar la captura de pantalla de vídeo en reproducción?
  • Reproduce dos videos en un VideoView al mismo tiempo
  • Conversión de imagen a vídeo con efecto de transición
  • Android FFmpegMediaMetadataRetriever.getFrameAtTime () es lento
  • Grabación de vídeo sin fin
  • Transcode / Convert Video to Mp4 en Android
  • Proyecto Android faltante "API de VideoEditor"
  • Error de salida de Android ffmpeg
  • Cómo seleccionar CBR vs VBR a través de la API de Android mientras graba vídeo en una aplicación
  • FlipAndroid es un fan de Google para Android, Todo sobre Android Phones, Android Wear, Android Dev y Aplicaciones para Android Aplicaciones.