繁体   English   中英

为什么(httpwebresponse)ResponseStream停止从互联网广播中读取数据?

[英]Why the (httpwebresponse) ResponseStream stops reading data from internet radio?

我正在使用此代码从一个冰河广播电台获取数据,但是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]);

    }

}

我在您的代码中看不到任何明显的问题。 除了不使用async-await之外,这大大简化了您正在开发的异步代码的类型:-)

您是什么意思“ ResponseStream停止阅读”?

如果连接断开了,那么我的第一要点就是服务器。 使用wireshark进行确认,然后使用wireshark将请求的HTTP标头与例如开始播放该流的Winamp进行比较。 我相信您会发现一些重要的区别。

但是,如果只是暂停,那是正常现象。

连接后,流服务器通常向您发送一些初始数据,然后它们仅向您实时发送数据。 因此,在收到该初始缓冲区后,您将只能以流的速率获取数据,即128 kbit / sec无线电的16 kbytes / sec。 顺便说一句,一些客户端发送带有请求的“ Initial-Burst” 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);

希望大家喜欢。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM