Звук икоты от Shoutcast

Я пытаюсь прочитать поток Shoutcast, а затем воспроизвести его с помощью MediaStreamSource. Вот отличный проект с открытым исходным кодом, который сэкономил мне много времени. После небольшой модификации я могу слышать идеальный звук. Но проблема в том, что я получаю периодические звуки типа "мигание / икание".

Есть идеи, как я могу остановить этот шум. Я подумал, что это может быть Shoutcast отправляет какие-то метаданные с интервалом, но не знаю, как это остановить. Пробовал с request.Headers["Icy-MetaData"] = "0"; Но и мою проблему это не решило. Любая помощь будет оценена.

Edit1: Я провел дополнительное расследование. Я прочитал данные своего потока в течение 2-3 минут и обнаружил, что в этом потоке много «нулевых» байтов. Вот список индекса байта '0'

92 247 359 1208 1904 2037 2227 2397 2536 2694 2740 2863 2952 3048 3110 3689 3994 4027 4098 4218 4730 4830 4943 5029 5115 5248 5315 5358 5666 6084 6375 6873 6920 7441 7660 7700 7756 8174 8254 8614 9010 9018 9025 9039 9541 9846.....

Это потому, что httpwebrequest медленная загрузка / не удалось загрузить или сам Shoutcast отправляет эти нулевые байты? Также не вызывает ли этот «0» байт шум икоты?

Edit2: Вот несколько строк кода, показывающих, как я получаю ответ от shoutcast.

        HttpWebRequest request = result.AsyncState as HttpWebRequest;
        HttpWebResponse response = request.EndGetResponse(result) as HttpWebResponse;     
        r = response.GetResponseStream();
        ShoutcastHeader(r);

А вот определение моего метода ShoutcastHeader:

        StreamReader headerReader = new StreamReader(r);
        bool headerIsDone = false;
        while (!headerIsDone)
        {
            string headerLine = headerReader.ReadLine();

            if (headerLine.StartsWith("icy-name:"))
            {
                StationName = headerLine.Substring(9);
            }
            else if (headerLine.StartsWith("icy-genre:"))
            {
                Genre = headerLine.Substring(10);
            }
            else if (headerLine.StartsWith("icy-br:"))
            {
                BitRate = short.Parse(headerLine.Substring(7));
            }
            else if (headerLine.StartsWith("icy-metaint:"))
            {
                MetaInt = int.Parse(headerLine.Substring(12)) * 1111084;
                MetadataAvailable = true;
            }
            else if (headerLine.Equals(""))
                headerIsDone = true;
        }

И вот ответ в headerReader

ICY 200 OK icy-notice1:
Для этого потока требуется Winamp
icy-notice2: распределенная сеть SHOUTcast Аудиосервер / Linux v1.9.93atdn
icy-name: Bollywood & Beyond - Radio NRI 24/7 icy-genre: Indian Hindi Tamil Telugu Malayalam Desi icy-url: http: //www.radionri.com content-type : audio / mpeg icy-pub: 1 icy-br: 128

Также я размещаю байты потока в моем общем ресурсе skydrive местоположение.


person Pritam Karmakar    schedule 23.01.2012    source источник
comment
Я наблюдал то же самое в Radio RIP, приложении для Android. Хотя это непостоянно. Мне любопытны ответы на этот вопрос   -  person Adam Dymitruk    schedule 23.01.2012
comment
Меня очень раздражает то, что шум раздается каждые 10 секунд.   -  person Pritam Karmakar    schedule 23.01.2012
comment
в приложении для Android это каждые 1-2 секунды. Как только он запустится, он будет там, пока я не закрою приложение и не запущу его снова.   -  person Adam Dymitruk    schedule 23.01.2012
comment
Он мигает, если вы подключены к Wi-Fi? Это проблема с буферизацией?   -  person Derek Beattie    schedule 23.01.2012
comment
Значение 0 совершенно нормально для потока MP3. Мне действительно кажется, что метаданные все еще находятся там. Захватить пакет и выложить в сеть первый мег или около того. Разместите все заголовки запросов / ответов здесь, в своем сообщении.   -  person Brad    schedule 23.01.2012
comment
Спасибо, Брэд. Я обновил свой вопрос, указав необходимую информацию. Пожалуйста, дайте мне знать, если вам понадобятся дополнительные данные. Еще раз спасибо   -  person Pritam Karmakar    schedule 24.01.2012
comment
@Derek: Я попытался подключиться к локальной сети, но заметил ту же проблему.   -  person Pritam Karmakar    schedule 24.01.2012
comment
@PritamKarmakar, у вас там есть заголовки ответов, но нам нужно увидеть ваши заголовки запроса, отправленные на сервер. Используйте Wireshark и выполните захват пакетов.   -  person Brad    schedule 06.02.2012


Ответы (1)


Судя по этой теме, похоже, что икота - это информация заголовка периодически обижаться. Существует проблема в проекте ShoutStreamSource, которая также ссылается на это:

«Текущая реализация не отбрасывает mp3-заголовки после анализа первого. Это вызывает сбои в звуке, исходящем из потока, и в ближайшем будущем они будут исправлены».

Однако на момент ответа похоже, что проект был приостановлен. Надеюсь, вы или кто-то другой сможете добавить эту функцию. По крайней мере, знание того, в чем проблема, должно помочь с решением.

person Austin Thompson    schedule 06.02.2012
comment
Спасибо. Но похоже, что люди как-то это поправили. Я вижу одного стримера на торговой площадке wp7, и он неплохо работает с shoutcast - person Pritam Karmakar; 28.02.2012
comment
Хотя я понимаю, что вы хотите исправить проблему икоты, это ответ на вопрос, что вызывает проблему. Я думаю, если вам нужна помощь в исправлении проекта ShoutStreamSource, вы можете задать новый вопрос с информацией о проблеме в этом проекте. Или, по крайней мере, отредактируйте свой вопрос, иначе это сбивает с толку. Что касается других приложений, они могут не использовать эту библиотеку или, если да, они не поделились своим исправлением. - person Austin Thompson; 29.02.2012