WP8.1 HttpClient Stream 仅获取 65536 字节数据

2024-02-04

我正在尝试在 Windows 运行时为 win8.1 和 wp8.1 的 MediaElement 编写一个实时 flv 流解复用器。

我已经完成了解复用代码,flv 文件可以正确解复用为 h264 和 aac 标签数据。

当我尝试播放网络文件和流时,我遇到了一个非常奇怪的网络问题:

相同的代码,

  1. 在win8.1下运行,一切都很好,无论文件或网络流(证明demux代码没问题);
  2. 在wp8.1(真机或模拟器)下运行,文件很好,网络流很糟糕 - 无论我如何从HttpClient Stream读取字节,目标服务器只给我65536字节数据,然后连接被阻塞,没有任何响应和错误,甚至没有超时,它只是阻塞线程。

打开流的代码:

var uri = new Uri("http://hdl.xxx.com/live/yyyy")
//uri is dymatic
var client = new HttpClient();
var stream = await client.GetStreamAsync(uri);
openStream(stream)

读取数据的代码:

public static byte[] ReadBlocks(this Stream stream, int count)
{
    byte[] buffer = new byte[count];
    int offset = 0;
    int length;

    while (offset < count)
    {
        //a loop statement to guarantee I can get *count* bytes
        Debug.WriteLine("read " + (count - offset));
        //a debug message show how many bytes do I need
        length = stream.Read(buffer, offset, count - offset);
        if (length == 0)
        {
            throw new EndOfStreamException();
        }
        Debug.WriteLine("got " + length);
        //a debug message show how many bytes I got
        offset += length;
    }
    return buffer;
}

例如,当我需要从 flv 流中读取 1024 字节时,我在 wp8.1 下运行stream.ReadBlocks(1024),调试告诉我如下:

read 1024
got 768
read 256

然后就什么都没有发生了。我写了一个额外的计数器,计数器显示一旦服务器总共发送了65536字节,流的下一个Read方法将始终被阻塞。

我确定 uri 可用。我可以使用pc网络浏览器将一些流数据下载为flv文件,并且下载的flv文件也可以在wp8.1下播放。

貌似这个问题只出现在wp8.1下,android和ios不受影响。

那么这是我的代码问题还是实际上服务器设置不正确?

从过去三周开始,我尝试了所有可以打开流的 http 方法,但仍然被 65536 字节阻塞。

有人可以帮我吗?


我刚刚解决了同样的问题 - 不要使用 System.Net.HttpClient,而是使用 Windows.Web.Http.HttpClient

System.Net 中默认使用标头 Connection: Close,这会导致流关闭,仅读取 65 kB。它还包含一个错误,阻止您覆盖标头以保持活动状态(它会抛出一些无意义的异常)

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

WP8.1 HttpClient Stream 仅获取 65536 字节数据 的相关文章

随机推荐

  • Visual Studio Code-无法打开源文件“iostream”

    我只想尝试使用 Visual Studio 代码进行 C 编码 我已经在我的笔记本电脑 Win10 64 上安装了 vscode 1 18 1 我通过输入以下代码出现错误 include
  • 从相机拍摄照片后如何跳过“重拍并使用”选项

    从相机捕获照片后如何跳过 重拍和使用 选项 或者如何更改这些按钮的字体和颜色 我们使用了以下代码 self gimgPicker GKImagePicker alloc init self gimgPicker cropSize CGSiz
  • 在 AWS Elastic Beanstalk 上部署 Tornado 应用程序

    我有一个服务器写在Python 2 7 龙卷风我正在尝试将其部署在 AWS 上 我碰到AWS 弹性豆茎这看起来是部署代码的一种非常方便的方法 我经历过这个tutorial http docs aws amazon com elasticbe
  • 让 Visual Studio 在每次构建时运行 T4 模板

    如何让 T4 模板在每次构建时生成输出 就像现在一样 只有当我对模板进行更改时 它才会重新生成它 我还发现了其他类似的问题 Visual Studio 中的 T4 转换和构建顺序 https stackoverflow com questi
  • Outlook 中的网址中的双斜杠

    您的搜索页面的 URL 是这样构建的 http www example com results name John city Miami gender Male这将显示迈阿密所有名为约翰的男性 当其中一个过滤器留空时 网址将如下所示 htt
  • 获取视频文件的尺寸

    python 有没有办法获取视频文件或其他库的尺寸来实现这一点 相当于一个Media Info或者其他的东西 如果我理解正确的话 你指的是视频的分辨率 例如 768x432 这可以简单地使用 python 中的 opencv 来完成 imp
  • 在 XmlDocument 中加载 xml 文件时出错

    您好 我有下面的 xml 文件 我正在尝试使用下面的代码将其加载到 xml 文档中 XmlDocument Doc new XmlDocument Doc LoadXml C MappingFiles InputFile xml 但它抛出错
  • 如何从我的应用程序打开网页?

    我想让我的 WPF 应用程序打开默认浏览器并转到某个网页 我怎么做 对于 NET 桌面版本 System Diagnostics Process Start http www webpage com 对于 NET Core 默认为Proce
  • C++ 中的自定义事件?

    是否可以在 C 中创建自定义事件 例如 假设我有变量 X 和变量 Y 每当 X 发生变化时 我想执行一个将 Y 设置为 3X 的函数 有没有办法创建这样的触发器 事件 触发器在某些数据库中很常见 这基本上是观察者模式的一个实例 正如其他人提
  • Pandas groupby 和多索引

    pandas 是否有机会通过 MultiIndex 对数据进行分组 我的意思是不仅传递给 groupby 函数键 还传递键和值来预定义数据帧列 a np array foo foo foo bar bar foo foo dtype obj
  • 未找到数据源名称且未指定默认驱动程序

    我被要求将使用 MVP 模式的 WinForms 应用程序移植到网页上 除其他外 该应用程序将 CSV 文件上传到数据表 然后执行一些工作 CSV文件上传到服务器OK然后用下面的代码读取 string connectionString Dr
  • 在函数作用域末尾执行代码的简单方法[重复]

    这个问题在这里已经有答案了 在测试代 码中 我偶尔想设置 模拟一些全局变量 在测试 范围结束时我想恢复这些变量 例如 BOOST AUTO TEST CASE HttpClientCsrf std string csrfSave Http
  • 反序列化 PHP 会话数据

    我正在使用 CodeIgniter 3 x 和数据库会话驱动程序 我想访问data列那BLOB类型 这是我的 blob 数据 ci last regenerate i 1435420891 identity s 13 email prote
  • 匿名共享内存?

    是否有一种 POSIX y 方法来分配不与特定文件名绑定的共享内存 IE 仅通过 UNIX 域套接字传递 SCM RIGHTS 消息才能在进程之间共享内存 None
  • Asp.net 单元测试中缺少对 System.Web.Mvc 的引用?

    我最近为我的 Asp NET MVC 应用程序做了一些单元测试 或者我尝试这样做 它一直告诉我 类型 System Web Mvc Controller 是在未引用的程序集中定义的 您必须添加引用程序集 System Web Mvc 版本
  • 在 AJAX 请求期间显示微调框?

    展示旋转器的最佳方式是什么 我准备了一个 div id spinner 它在加载过程中应该是可见的 你使用 jQuery 吗 如果是这样你可以使用 ajaxStart 和 ajaxStop http docs jquery com Ajax
  • 迭代 String.prototype

    我知道for in循环可以帮助迭代对象 原型和集合的属性 事实是 我需要迭代String prototype 虽然console log String prototype 当我这样做时显示完整的原型 for var prop in Stri
  • 如何在 ASP.Net 应用程序中使用 HTTPS

    我想在 ASP NET Web 应用程序中使用 HTTPS 但仅限于 Login aspx 页面 如何才能做到这一点 首先获取或创建证书 获取 SecureWebPageModule 模块http www codeproject com A
  • Fluent nhibernate:如何映射具有类型为接口的属性的实体?

    我有一个像这样的实体 public class Employee public int ID get set public IAccountManager AccountManager get set 我还为 DefaultAccountM
  • WP8.1 HttpClient Stream 仅获取 65536 字节数据

    我正在尝试在 Windows 运行时为 win8 1 和 wp8 1 的 MediaElement 编写一个实时 flv 流解复用器 我已经完成了解复用代码 flv 文件可以正确解复用为 h264 和 aac 标签数据 当我尝试播放网络文件