2010-11-24 33 views
6

This blog post suggère qu'il pourrait être possible de lire des vidéos YouTube avec le Silverlight MediaEelement directement.YouTube sur Windows Phone avec MediaElement

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

Je me demandais si cela est vrai pour Windows Phone 7. J'ai une application qui est basée sur la lecture de vidéos hébergées sur YouTube, et il serait agréable d'être en mesure d'avoir plus de contrôle sur l'expérience vidéo autre que le lancement du navigateur avec l'URL de la vidéo YouTube.

Répondre

4

À moins que vous n'ayez un lien direct vers un contenu vidéo, vous ne pouvez pas afficher de vidéos YouTube sur Windows Phone 7. Autant que je sache, get_video n'est plus disponible au public.

+0

Hmm, donc je suppose que la question se tourne vers, est-ce qu'il y a une méthode permise pour accéder au lien direct de la vidéo avec l'API officielle de youtube? ou est-ce généralement non autorisé? –

+0

Il n'existe aucune méthode API officielle pour télécharger la vidéo. Il existe des solutions de contournement et des «hacks», mais ceux-ci ne sont pas répandus et ne sont en aucun cas bien documentés. –

+0

Ok, merci ... cela m'aide à définir les directions et les attentes pour mon application :-) –

4

Je cite la Windows Phone Developer FAQ

Comment puis-je lire des vidéos youtube dans mon application?

Utilisez la WebBrowserTask et ouvrez l'URL cible dans le navigateur; Si l'application youtube est installée, elle sera lue, si elle n'est pas installée, elle demandera à l'utilisateur d'installer puis de jouer.

0

Je suis sûr que vous pouvez régler pour Windows Phone http://www.codeproject.com/KB/WPF/YouViewer.aspx

+0

non cela ne fonctionnera pas, car il suppose que vous serez en mesure de lire un fichier .swf dans le contrôle du navigateur Web. Ce n'est pas possible dans Windows Phone –

4

Pour tous les autres, le problème toujours curieux de surmonter est d'obtenir un lien direct vers la vidéo qui nécessite une petite bidouille, mais il est très fiable et facile faire. Tout d'abord, vous avez besoin de l'identifiant de la vidéo pour que vous puissiez obtenir l'URL YouTube sur laquelle vous pouvez utiliser l'API YouTube. Ensuite, faites quelque chose comme ça. J'ai à peu près converti un usercript à 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)); 

le bit suivant semble mauvais.

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; 
      } 
     } 
    } 

le dernier bit itag == 18 sélectionne la qualité selon cette

{'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)'}; 

maintenant, vous pouvez faire ce que vous voulez avec le lien comme ouvert avec mediaplayerlauncher ou MediaElement. Personnellement, j'aimerais le télécharger dans un stockage isolé et le jouer en même temps, mais pour le moment, cela semble plus facile à dire qu'à faire. merci pour votre temps désolé pour le long message.

+1

qu'est-ce que flashvars? – vnshetty

+0

Il a oublié de définir flashvars, qui est, dans la page html du film, juste un segment de texte qui contient ce qui est intéressant qui essaie d'obtenir le lien direct. Si vous ouvrez une page de film (http://www.youtube.com/watch?v=[id) et que vous vérifiez la source, vous remarquerez un endroit où il y a une variable appelée flashvars, à vous de l'isoler, puis pour trouver le lien direct à partir du code ci-dessus: –

+0

A besoin d'écrire Regex rx = ... et MatchCollection match = ... et ajouter un using System.Text.RegularExpressions; (impossible de modifier le code depuis que j'attends pour d'autres corrections que j'ai envoyées pour être traitées) –