Для всех остальных, кто все еще интересуется проблемой, которую нужно решить, это получение прямой ссылки на видео, которое требует небольшого взлома, но это очень надежно и легко сделать. Во-первых, вам нужен идентификатор видео, чтобы вы могли получить URL-адрес YouTube, для которого вы можете использовать API YouTube. Тогда сделай что-нибудь подобное. Я в значительной степени преобразовал пользовательский скрипт в 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));
следующий бит выглядит плохо.
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;
}
}
}
последний бит itag == 18 выбирает качество в соответствии с этим
{'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)'};
теперь вы можете делать все, что захотите, с помощью ссылки, например, открыть ее с помощью mediaplayerlauncher или mediaelement. лично я хотел бы загрузить его в изолированное хранилище и одновременно играть в него, но в данный момент это кажется легче сказать, чем сделать. спасибо за ваше время извините за длинный пост.