【问题标题】:streaming binary data over http通过 http 流式传输二进制数据
【发布时间】:2010-09-25 09:54:40
【问题描述】:

我正在研究将二进制数据流式传输到浏览器中(通过 http)。我正在寻找有关执行此操作的好方法的意见。最终,我将拥有一个实时数据源,并且我想操纵这些数据并在浏览器中(实时)显示它。 Firefox 是第一位的,IE 会很好……但我没那么挑剔。我有一个 Firefox 插件,可以满足我的需要,但我更喜欢用 javascript/html 编写的东西,无需用户安装任何插件即可工作。

我一直在研究 multipart/x-mixed-replace MIME/media 类型,它看起来可能在这个项目中有用,但我想听听关于更好的方法(如果有的话)之前的意见我在这条路上花了太多时间。

Flash 可能会完成这项工作,但我还是想避免使用插件。我想要最简单的解决方案(不是吗?),最好只使用 javascript/html。

我也一直在研究 Comet,看看它能为我做什么。

【问题讨论】:

    标签: ajax http streaming comet multipart-mixed-replace


    【解决方案1】:

    我以前必须用视频(即运动 jpeg)数据来做这件事。

    我注意到你刚才说的是“二进制数据”……这是不是图像数据?这是什么?

    multipart/x-mixed-replace 如今在很多浏览器中都能正常工作。我认为它甚至可能在更高版本的 IE 中得到支持。它肯定适用于大约 5 年前我必须实现它的所有版本的 Firefox。可能也支持基于 Webkit 的浏览器,包括 Chrome 和 safari。

    但是,在我看来,这实际上只适用于基于 LAN 的应用程序。原因是您要发送大量数据。而不是发送连续帧之间的差异(如果是视频),您每次都会发送整个图像。根据用户的数量,这也会给服务器带来沉重的带宽负担。

    因此,虽然 multipart/x-mixed-replace 是迄今为止最容易实现的,但它不一定是最合适的解决方案。同样,这取决于您的原始数据类型。

    对于视频,理论上你可以用 javascript 写一些东西来做。事实上,如果你用谷歌搜索 JavaScript 视频播放器,你可以找到一些。我怀疑它们的速度非常快,并且可能会给客户端机器带来沉重的负担。不过,它似乎确实可行。

    所以你的选择是: 1) 内容类型混合替换 2) 下载插件 本机浏览器插件(最快最有效) 基于闪光灯或银光 3) 基于Javascript的播放器

    如果您想要的是视频 最后一个选项是最前沿的 4) 基于 HTML5 的视频。 http://www.html5video.org/ 由于标准仍在批准中并且浏览器支持有限,我不会 这个时候推荐一下。

    【讨论】:

      【解决方案2】:

      关于数据流和套接字样式的连接,您可能想看看APE (Ajax Push Engine) project。它允许您设置一个 HTTP 代理,您的 JavaScript 可以通过该代理进行真正的套接字连接。

      至于当数据到达时如何处理数据,我已经完成了概念验证,展示了如何处理原始 PNG 数据、解析它并将其呈现给浏览器。 Check it out.

      【讨论】:

        【解决方案3】:

        我通常会避免使用 multipart/x-mixed-replace,因为它具有相当粗略的浏览器支持。我知道我的相机的 multipart/x-mixed-replace 在 IE 或更新版本的 Firefox 上不起作用(尽管显然有一个配置可以改变它)。

        我认为小型 Flash 应用程序可能是您的最佳选择之一。

        【讨论】:

        • 我已经能够在 Firefox 3.0.4 中使用 multipart/x-mixed-replace 获得一个基本示例,而无需更改任何设置(我记得)。你遇到了什么问题?
        【解决方案4】:

        您可以使用 Base64 将二进制文件转换为文本并将其发送到浏览器。使用 IE,您可以将其直接转换为二进制文件,但我不确定您是否可以使用 Firefox 和其他工具来做到这一点。我确实看到了 Base64 enflate/deflate 的 jscripts 和一个名为 base64.js 的脚本,它可能也进行了转换。

        但是,您最好将二进制数据转换为 JSON 并使用 AJAX 传输数据,然后在浏览器中将其作为 javascript 对象进行处理。 Web 服务器将负责获取数据并将其转换为 JSON,因此无论您使用哪种编程语言,您都应该能够处理二进制文件。

        【讨论】:

        • 如果您转换为 Base64,那么您的网络带宽正好增加了 1/3。当您可以流式传输到多个客户端时,这不是很好。
        • 同意。希望 HTTP 压缩有助于最大限度地减少带宽增加,但这也会增加额外的负载。 Q 中没有太多细节,但这是纯 HTML 的一种选择(没有插件,当时没有考虑 HTML5)。
        【解决方案5】:

        这在很大程度上取决于您要如何处理数据。我假设渲染它。

        Flash 可能是最简单的解决方案。这是一个足够常见的附加组件,现在几乎每个人都应该拥有它;所以你不会冒太大的不兼容风险。

        JavaScript 还没有被认为是一个很好的二进制数据处理平台——因此,该领域并没有太多的发展。我不认为你会为你想要的东西找到很多帮助。尤其是当你得到渲染的时候——除非你可以也许将每个二进制文件转换为canvas script,因为它是 JavaScript 中唯一可用的动态图像。

        IE 可能实际上是个例外,因为您可以使用一些 ActiveX 对象来为一些文件类型完成此操作。但是,然后你删掉了大多数其他浏览器。

        【讨论】:

        • 是的,最终渲染数据,我已经对画布对象进行了一些测试,它看起来还不错。感谢您的想法。
        猜你喜欢
        • 2012-08-27
        • 1970-01-01
        • 2017-10-27
        • 2018-03-06
        • 2017-01-22
        • 2017-03-08
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多