Я нашел ответ после поиска в Интернете, а также немного поиграл с 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;
}
Все еще работает над некоторым кодом, но пока все работает.