获取/解析ShoutCast元数据

时间:2014-09-04 04:15:52

标签: c# shoutcast bass

我目前正在制作简单的音乐播放器,并想流式传输在线广播。我设法流式传输ShoutCast广播,但问题是我不知道如何从流式元数据中解析标题和艺术家。这是我的代码。

Player.cs

    public string[] GetTags(bool streaming)
    {
        if (streaming == true)
        {
            IntPtr tag = Bass.BASS_ChannelGetTags(stream, BASSTag.BASS_TAG_META);
            string[] tags = Utils.IntPtrToArrayNullTermUtf8(tag);
            if (tags != null)
            {
                return tags;
            }            
        }
        return null;
    }

Main.cs

  private void btnLoadURL_Click(object sender, EventArgs e)
    {
        p.LoadURL(tbFile.Text);
        string[] tags = p.GetTags(true);
        if (tags != null) 
        {
            foreach (String tag in tags)
            {
                lblStatus.Text = tag;
            }
        }
    }

目前,我需要遍历tags以获取格式为StreamTitle='xxx';StreamUrl='xxx';的元数据。我想把它解析成;

标题:xxx

艺术家:xxx

并完全删除StreamUrl

谢谢!

1 个答案:

答案 0 :(得分:1)

我自己的方法是使用String.Join方法

将字符串数组连接成一个字符串
string conTitle = String.Join("", tags);

然后通过使用正则表达式,我能够从字符串中提取艺术家和歌曲:

if (tags != null)
            {
                string ConTitle = String.Join("", tags);
                string FullTitle = Regex.Match(ConTitle,
                  "(StreamTitle=')(.*)(';StreamUrl)").Groups[2].Value.Trim();
                string[] Title = Regex.Split(FullTitle, " - ");
                return Title;
            }          

Main.cs 中,我迭代返回的值并根据字符串[]索引

分配变量
if (tags != null) 
        {
            foreach (string tag in tags)
            {
                lblArtist.Text = tags[0];
                lblTitle.Text = tags[1];
            }
        }

Here's the player image since I don't have enough rep yet to upload one I have enough rep now, so here's the image.

虽然我必须回顾正则表达,因为专辑标题也出现在那里。

编辑:这是修改过的正则表达式:

Regex.Match(ConTitle, "(StreamTitle=')(.*)(\\(.*\\)';StreamUrl)").Groups[2].Value.Trim();

现在没有更多支持歌曲标题后的专辑标题。