我遇到了与浏览器如何处理<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中是否有任何可以解决的构造可以解决不需要服务器端修改的困境?