2010-11-24 15 views
6

This blog post sugiere que es posible reproducir videos de YouTube directamente con el MediaEelement de Silverlight.YouTube en Windows Phone con MediaElement

<MediaElement HorizontalAlignment="Left" 
VerticalAlignment="Top" 
Source="http://www.youtube.com/get_video? 
video_id=8yuIw_0ejLs&t=vjVQa1PpcFPrX3tFoahhu4DbniDIqTLkwybdm8xuCt8%3D&fmt=22"/> 

Me preguntaba si esto es cierto para el teléfono de Windows 7. Tengo una aplicación que se basa en la reproducción de vídeos alojados en YouTube, y sería bueno poder tener más control sobre la experiencia de vídeo además de simplemente iniciar el navegador con la URL del video de YouTube.

Respuesta

4

A menos que tenga un enlace directo al contenido de video, no puede mostrar videos de YouTube en Windows Phone 7. Hasta donde yo sé, get_video ya no está disponible para el público.

+0

Hmm, así que supongo que la pregunta cambia, ¿hay algún método permitido para obtener acceso al enlace directo del video con la API oficial de youtube? o es que generalmente no está permitido? –

+0

No hay un método API oficial para descargar el video. Hay soluciones y "hacks", pero no están generalizados y no están bien documentados. –

+0

Ok, gracias ... esto me ayuda a establecer instrucciones y expectativas para mi aplicación :-) –

4

Citando del Windows Phone Developer FAQ

¿Cómo puedo reproducir vídeos de YouTube en mi aplicación?

Use WebBrowserTask y abra la URL de destino en el navegador; si la aplicación de youtube está instalada, se reproducirá; si no está instalada, solicitará al usuario que la instale y luego la reproduzca.

0

Estoy seguro de que se puede ajustar para Windows Phone http://www.codeproject.com/KB/WPF/YouViewer.aspx

+0

eso no funcionará, porque supone que usted podrá reproducir un archivo .swf en el control del navegador web. Esto no es posible en Windows Phone –

4

Para todos los demás deja de ser curioso el problema a superar es conseguir un enlace directo al vídeo, que requiere un pequeño truco, pero es muy fiable y fácil que hacer. Primero necesitas la identificación del video para que puedas obtener la url de youtube para la que puedes usar la API de youtube. Entonces haz algo como esto. Casi convertí un usuario a Silverlight.

WebClient client = new WebClient(); 
string url = "http://www.youtube.com/watch?v=HLQqOpILDcI"; 
client.DownloadStringCompleted += new DownloadStringCompletedEventHandler(ClientDownloadStringCompleted); 
client.DownloadStringAsync(new Uri(url, UriKind.Absolute)); 

el siguiente bit se ve mal.

private void ClientDownloadStringCompleted(object sender, DownloadStringCompletedEventArgs e) 
    { 
     rx = new Regex("(?<=url_encoded_fmt_stream_map=)([^(\\\\)]*)(?=\\\\)", RegexOptions.IgnoreCase); 
     match = rx.Matches(flashvars); 
     string video_format = match[0].ToString(); 

     string sep1="%2C"; 
     string sep2="%26"; 
     string sep3="%3D"; 
     string link = ""; 
     string[] videoFormatsGroup = Regex.Split(video_format, sep1); 
     for (var i=0;i<videoFormatsGroup.Length;i++){ 
      string[] videoFormatsElem = Regex.Split(videoFormatsGroup[i], sep2); 
      if (videoFormatsElem.Length<5) continue; 
      string[] partialResult1 = Regex.Split(videoFormatsElem[0], sep3); 
      if (partialResult1.Length<2) continue; 
      string url = partialResult1[1]; 
      url = HttpUtility.UrlDecode(HttpUtility.UrlDecode(url)); 
      string[] partialResult2 = Regex.Split(videoFormatsElem[4], sep3); 
      if (partialResult2.Length<2) continue;  
      int itag = Convert.ToInt32(partialResult2[1]); 
      if (itag == 18){ 
       link = url; 
      } 
     } 
    } 

el == itag último bit 18 Selecciona la calidad de acuerdo con este

{'5':'FLV 240p','18':'MP4 360p','22':'MP4 720p (HD)','34':'FLV 360p','35':'FLV 480p','37':'MP4 1080p (HD)','38':'MP4 4K (HD)','43':'WebM 360p','44':'WebM 480p','45':'WebM 720p (HD)','46':'WebM 1080p (HD)'}; 

ahora usted puede hacer lo que quiera con el enlace tal que abierto con mediaplayerlauncher o MediaElement. Personalmente, me encantaría descargarlo en un almacenamiento aislado y reproducirlo al mismo tiempo, pero por el momento parece más fácil decirlo que hacerlo. gracias por tu tiempo, perdón por la larga publicación.

+1

¿Qué es flashvars? – vnshetty

+0

Olvidó definir flashvars, que es, en la página html de la película, solo un segmento de texto que contiene lo que es interesante para alguien que intenta obtener el enlace directo. Si abre una página de película (http://www.youtube.com/watch?v=[id) y revisa la fuente, notará un lugar donde hay una variable llamada flashvars. Depende de usted aislarla, luego para encontrar el enlace directo desde el código anterior. –

+0

Necesita escribir Regex rx = ... y MatchCollection match = ... y agregar un usando System.Text.RegularExpressions; (no puedo editar el código porque he esperado para otras correcciones que envié para ser procesado) –