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.
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é? –
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. –
Ok, merci ... cela m'aide à définir les directions et les attentes pour mon application :-) –