首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >为什么(httpwebresponse) ResponseStream停止从网络广播中读取数据?

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

Stack Overflow用户
提问于 2015-05-19 02:39:41
回答 2查看 122关注 0票数 0

我使用这段代码从一个广播电台获取数据,但是ResponseStream在64K接收到的时候停止读取数据。你能帮我做这个吗?

代码语言:javascript
复制
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]);

    }

}
EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2015-05-21 09:02:19

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

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

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

然而,如果它只是停顿,这是正常的。

在连接时,流服务器通常会向您发送一些初始数据量,然后它们只会实时地向您发送数据。因此,在接收到初始缓冲区后,您将只获得数据@您的流的速率,即128 kbit/秒无线电的16千字节/秒。顺便说一句,有些客户端会发送带有请求的“初始突发”HTTP报头,但我无法找到有关该头的文档。当我为WP7工作时,我基本上复制了其他iOS应用程序的行为。

票数 0
EN

Stack Overflow用户

发布于 2015-05-22 04:46:03

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

代码语言:javascript
复制
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);

希望你们玩得开心。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/30315843

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档