2010-05-05 75 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