2010-05-05 71 views
0

我有一個SL4項目,它可以成功地從遠程位置傳輸一個偉大的聲音WMA音頻流。所有MediaElement操作都很簡單。從Silverlight 4的現場音頻流中讀取歌曲標題/藝術家?

我想要做的是讀取作爲文本與音頻流一起傳遞的屬性。例如,流的編碼器嵌入流的標題,歌曲的標題以及當前歌曲的藝術家的名字。

如何使用Silverlight 4挑選出來,然後將其顯示在標籤中給用戶?

肯定會比編寫一堆web服務來做同樣的事情更容易。 Windows Media Player和WinAmp都可以獲取我在MediaElement對象集合中沒有看到的信息。

回答

1

我找到了答案searchting網絡以及後用表達式3擺弄一下。

事實證明,實時音頻流具有發送的標記以及音頻。標記幾乎可以包含任何內容,但其中一個被稱爲「標題」。標題基本上是一個可以閱讀的自由格式字符串字段。通過我的流,編碼器可以發送大量信息作爲可以分解的標題。所以這裏是我使用的代碼:

從註冊一些事件開始,最後一個是重要的事件。

public MainPage() 
    { 
     InitializeComponent(); 
     this.mediaElement1.BufferingProgressChanged += new RoutedEventHandler(mediaElement1_BufferingProgressChanged); 
     this.mediaElement1.MarkerReached += new TimelineMarkerRoutedEventHandler(mediaElement1_MarkerReached); 
    } 

然後實際的標記處理程序將執行以下操作:

private void mediaElement1_MarkerReached(object sender, TimelineMarkerRoutedEventArgs e) 
    { 
     Dictionary<string, string> songAttribs = new Dictionary<string, string>(); 
     string playerFeed = HttpUtility.UrlDecode(e.Marker.Text); 
     char[] delims = { '&' }; 
     string[] Attribs = playerFeed.Split(delims); 

     foreach (String attrib in Attribs) 
     { 
      string[] keypair = attrib.Split('='); 
      string key = ""; 
      string value = ""; 

      try 
      { 
       key = keypair[0]; 
      } 
      catch 
      { 
       key = null; 
      } 

      if (key != null) 
      { 
       try 
       { 
        value = keypair[1]; 
       } 
       catch 
       { 
        value = ""; 
       } 

       songAttribs.Add(keypair[0], keypair[1]); 
      } 
     } 

     nowplaying.Title = songAttribs["title"]; 
     nowplaying.Artist = songAttribs["artist"]; 
     nowplaying.Duration = 0; 

     this.label2.Content = "Artist: " + nowplaying.Artist; 
     this.label3.Content = "Title: " + nowplaying.Title; 

     this.label1.Content = playerFeed; 
    } 

仍在對一些代碼,但到目前爲止,事情似乎工作。

+0

什麼類型是mediaElement1?謝謝 – UpTheCreek 2011-04-07 16:31:26

+0

@UpTheCreek [MediaElement](http://msdn.microsoft.com/en-us/library/system.windows.controls.mediaelement.aspx);) – 2011-04-07 19:41:39

-1

Mayba WMP和Winamp得到一個網站或類似這樣的東西的信息,並且不讀出來的流...

Werewolve

+0

不,這是不對的,因爲流信息在WMP中直接從我的流中讀取。 WMP和WinAmp僅從網站獲取信息來更新本地音樂庫。 – 2010-05-05 21:07:58