2010-11-24 91 views
6

This blog post表明可能直接使用Silverlight MediaEelement播放YouTube視頻。帶有MediaElement的Windows Phone上的YouTube

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

我在想,如果這個成立爲Windows Phone 7。我有一個基於播放在YouTube上託管視頻的應用程序,它會很高興能夠擁有對視頻體驗更多的控制權除了使用YouTube視頻網址啓動瀏覽器之外。

回答

4

除非您直接鏈接到視頻內容,否則無法在Windows Phone 7上顯示YouTube視頻。據我所知,get_video不再可供公衆訪問。

+0

嗯,所以我想這個問題,然後轉移到,有沒有一種允許訪問視頻的直接鏈接與YouTube的官方API的方法?或者一般不允許? – 2010-11-25 16:56:15

+0

沒有官方的API方法來下載視頻。有解決方法和「黑客」,但這些並不普遍,並沒有記錄。 – 2010-11-26 03:02:19

+0

好的,謝謝......這有助於我爲我的應用程序設置方向和期望:-) – 2010-12-16 20:16:33

4

Windows Phone Developer FAQ

我怎麼能在我的應用程序播放YouTube視頻報價?

使用WebBrowserTask並在瀏覽器中打開目標URL;如果安裝了youtube應用程序,它將播放,如果沒有安裝,它會提示用戶安裝然後播放。

4

對於其他人還是好奇地克服越來越直接鏈接到它確實需要一個小黑客視頻的問題,但它是非常可靠和易於去做。首先你需要視頻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的鏈接選擇質量。我個人很樂意將它下載到獨立存儲並同時播放它,但目前看來說起來容易做起來難。感謝您對冗長的帖子感到抱歉。