为什么(httpwebresponse) ResponseStream停止从互联网电台读取数据

本文关键字:互联网 电台 读取 数据 httpwebresponse ResponseStream 为什么 | 更新日期: 2023-09-27 17:49:42

我使用此代码从iccast无线电获取数据,但是ResponseStream在收到64K时停止读取数据。你能帮我一下吗?

HttpWebRequest request = (HttpWebRequest) WebRequest.Create("http://icecast6.play.cz/radio1-128.mp3");
request.AllowReadStreamBuffering = false;
request.Method = "GET";
request.BeginGetResponse(new AsyncCallback(GetShoutAsync), request);
void GetShoutAsync(IAsyncResult res)
{
    HttpWebRequest request = (HttpWebRequest) res.AsyncState;
    HttpWebResponse response = (HttpWebResponse) request.EndGetResponse(res);
    Stream r = response.GetResponseStream();
    byte[] data = new byte[4096];
    int read;
    while ((read = r.Read(data, 0, data.Length)) > 0)
    {
        Debug.WriteLine(data[0]);
    }
}

为什么(httpwebresponse) ResponseStream停止从互联网电台读取数据

我看不出你的代码有什么明显的问题。除了不使用async-await,这大大简化了你正在开发的异步代码:-)

你说" the ResponseStream stopreading "是什么意思?

如果连接断开,那么我的第一个想法-服务器会这样做。使用wireshark进行确认,然后使用wireshark将请求的HTTP头与开始播放该流的Winamp进行比较。我相信你会发现一些重要的区别。

如果只是暂停,则为正常。

在连接时,流服务器通常会向您发送一些初始数据,然后它们只实时地向您发送数据。因此,在您接收到初始缓冲区之后,您将只能以流的速率获得数据,即128 kbit/sec的无线电以16 kbytes/sec的速率接收数据。顺便说一句,一些客户端发送"初始爆裂"HTTP头与请求,但我无法找到有关该头的文档。当我为WP7开发收音机时,我基本上复制了其他iOS应用程序的行为。

最后我写了这段代码来解决这个问题,完全有必要使用命名空间:Windows.Web。Http,它就像…

Uri url = new Uri("http://icecast6.play.cz/radio1-128.mp3"); 
HttpResponseMessage response = await httpClient.GetAsync(
            url,
            HttpCompletionOption.ResponseHeadersRead);
IInputStream inputStream = await response.Content.ReadAsInputStreamAsync(); 
try 
{ 
ulong totalBytesRead = 
IBuffer buffer = new Windows.Storage.Streams.Buffer(100000);
 while (buffer.Length > 0);
 {
     uffer = await inputStream.ReadAsync(
             buffer,
             buffer.Capacity,
             InputStreamOptions.Partial);
//
// Some stuff here...
      totalBytesRead += buffer.Length;
      Debug.WriteLine(buffer.Length + " " + totalBytesRead);
} 
Debug.WriteLine(totalBytesRead);

我希望你们喜欢它。