流式MJPEG图像和内存构建 - 图像的Angular2 HTTP处理 - 有没有办法?

时间:2017-09-19 09:50:26

标签: angular ionic2 observable ionic3

我遇到了与浏览器如何处理<img src>连接的持久性有关的问题,我无法找到解决方案。我发布了一个关于某种方法的问题here,但问题实际上更广泛,所以我想我会发布一个更通用的问题,后退一步。这个问题并不是Angular2独有的(我在Angular1中遇到了same problem,并且做了一些丑陋的黑客攻击,我稍后会描述,并想知道Angular2 +中是否有更好的方法)

问题陈述:

  • 我必须使用后端服务器(第三方)从IP摄像头连续流式传输图像。服务器基本上不断发送连续的Content-Type:image/jpeg图像,当使用<img src='server url'>在HTML页面上呈现时,会生成一个&#39;实时流&#39;相机我知道现代系统可以直接重新流式传输/复用H264 / HLS视频,您可以使用<video>元素。这个服务器没有。

  • 在Angular中执行<img src>的问题似乎是浏览器启动并完全控制底层TCP连接,而应用程序完全无法控制它。 即使您退出视图,TCP对象仍然存在,随着时间的推移,当我监视我的服务器时,我看到新旧连接逐渐累积,最终导致服务器崩溃。鉴于客户端没有终止连接,TCP连接继续

  • 您认为在此连接上执行<ngIf>并强制将其从DOM中删除可以解决问题,但它不会。我已经多次测试过了。

  • 在Angular中输入HTTP observables。我认为不是直接在<img src>中渲染图像,而是可以编写一个后端服务http.get&amp; subscribe接收流式数据,然后在屏幕上呈现,其优势在于,由于我有自己的句柄,我可以unsubscribe从它(这是我的问题的起源asked更早)。然而,这在我脸上爆炸,因为这是HTTP并且服务器持续流式传输image/jpeg,我的订阅处理程序永远不会被调用,因为数据永远不会停止。

  • 在Angular1中,我不得不做一个可怕的黑客攻击,其中涉及调用window.stop()强制终止页面中的所有连接。虽然这样做有效,但它也会产生一些干扰并发路由导航的副作用(任何URL操作都被终止),我不得不经历很多混乱的时间来使它正确。

  • 我使用Ionic作为我的应用程序开发的UI框架(如果重要的话)。

Angular中是否有任何可以解决的构造可以解决不需要服务器端修改的困境?

1 个答案:

答案 0 :(得分:0)

我有类似的问题,但只是不知道如何找到解决方案。我建议更改服务器实现并从服务器提供base64,但它似乎非常昂贵...... mu question