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 Distributed Network Audio Server/Linux v1.9.93atdn
icy-name:Bollywood & Beyond - Radio NRI 24/7 icy-genre:インド ヒンディー語 タミル語 テルグ語 マラヤーラム語 Desi icy -url:http://www.radionri.com content-type:audio/mpeg icy-pub:1 icy-br:128
また、ストリームバイトをスカイドライブ共有の場所に配置しました。