2014-09-04 54 views
1

我目前正在製作簡單的音樂播放器並希望流式播放在線廣播。我設法傳播ShoutCast廣播,但問題是我不知道如何從流媒體元數據解析標題和藝術家。這是我的代碼。獲取/解析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

我自己的方法是使用正則表達式我能夠從字符串中提取藝術家和歌曲使用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; 
      }   

In 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(); 

現在沒有更多的支架與歌名後,專輯名稱。

+0

只要注意'StreamTitle'的值並不總是'Artist - Title'的格式。這只是一個常常遵循的慣例,但往往不是。我猜測它可以在70%左右的時間內工作,但不會更高。 – Brad 2014-09-04 12:10:41

+0

是的你是對的,我想我應該找到一種方法來解析它們,不管它們的格式如何。感謝您的領導! – Zerocchi 2014-09-05 09:40:53