Я пытаюсь прочитать поток 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 местоположение.
0
совершенно нормально для потока MP3. Мне действительно кажется, что метаданные все еще находятся там. Захватить пакет и выложить в сеть первый мег или около того. Разместите все заголовки запросов / ответов здесь, в своем сообщении. - person Brad   schedule 23.01.2012