Прочитать название песни / исполнителя из потока живого аудио с Silverlight 4? - PullRequest
0 голосов
/ 05 мая 2010

У меня есть проект SL4, который успешно передает потоковое аудио WMA с великолепным звучанием из удаленного места. Все действия MediaElement являются прямыми.

Что я хочу сделать, это прочитать атрибуты, которые передаются в виде текста вместе с аудиопотоком. Например, кодировщик потока встраивает заголовок потока, название воспроизводимой песни и имя исполнителя для текущей песни.

Как бы я выбрал это с помощью Silverlight 4 и затем отобразил бы его в ярлыке для пользователя?

Конечно, было бы проще, чем написать кучу веб-сервисов, сделать то же самое. Windows Media Player и WinAmp получают информацию, которую я просто не вижу в коллекции объектов MediaElement.

Ответы [ 2 ]

1 голос
/ 06 мая 2010

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

Все еще работает над некоторым кодом, но пока все работает.

0 голосов
/ 06 мая 2010

Mayba WMP и WinAmp получают информацию с веб-сайта или что-то в этом роде и не читают ее из потока ...

Werewolve

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...