對於其他人還是好奇地克服越來越直接鏈接到它確實需要一個小黑客視頻的問題,但它是非常可靠和易於去做。首先你需要視頻ID,這樣你就可以得到youtube url,你可以使用youtube API。然後做這樣的事情。我幾乎將用戶腳本轉換爲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的鏈接選擇質量。我個人很樂意將它下載到獨立存儲並同時播放它,但目前看來說起來容易做起來難。感謝您對冗長的帖子感到抱歉。
嗯,所以我想這個問題,然後轉移到,有沒有一種允許訪問視頻的直接鏈接與YouTube的官方API的方法?或者一般不允許? – 2010-11-25 16:56:15
沒有官方的API方法來下載視頻。有解決方法和「黑客」,但這些並不普遍,並沒有記錄。 – 2010-11-26 03:02:19
好的,謝謝......這有助於我爲我的應用程序設置方向和期望:-) – 2010-12-16 20:16:33