c# - 使用Silverlight 4从实时音频流中读取歌曲标题/歌手吗?

标签 c# silverlight audio streaming silverlight-4.0

我有一个SL4项目,该项目已成功从远程位置流式传输听起来不错的WMA音频流。所有MediaElement Action 都是直接的。

我想做的是读取与音频流一起作为文本传递的属性。例如,流的编码器嵌入了流的标题,正在播放的歌曲的标题以及当前歌曲的艺术家的名称。

我将如何使用Silverlight 4进行挑选,然后在“标签”中显示给用户?

这肯定比编写一堆Web服务来完成相同的事情要容易。 Windows Media Player和WinAmp都获得了我在MediaElement对象集合中看不到的信息。

最佳答案

我在网上搜索以及对Expression 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;
    }

仍在某些代码上工作,但到目前为止似乎一切正常。

关于c# - 使用Silverlight 4从实时音频流中读取歌曲标题/歌手吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2775634/

相关文章:

silverlight - Silverlight查询字符串替代

c# - WP 以编程方式移动 ScrollViewer

python - 通过 Cron 作业的音频

c# - ASP.NET 提前编译

c# - NullReferenceException 在 Application.Run(new Main())

c# - Windows 10 API 中的蓝牙低功耗广告数据限制

c# - WPF 标记扩展如何引发编译错误?

c# - 如何通过 IDataErrorInfo 在按下保存按钮时验证我的实体?

android - 错误: Audio Priority Boost

java - Superpowered:将效果应用于音频后,是否可以将输出缓冲区保存到文件中?