绕过观看多个视频的 6 次下载限制

Bypass the 6 downloads limit for multiple videos watching

我必须编写一个能够同时观看多个直播流(视频监控摄像头)的网站。

到目前为止,我正在使用 MJPEG 和 JS 播放我的实时视频并且运行良好......最多只有 6 个流!

事实上,我受困于大多数浏览器的 6 个并行下载限制 (link)。

有人知道如何绕过这个限制吗?有小费吗?

到目前为止,我的选择是:

我还有其他选择吗?是否有提示或库,例如,我可以将我的流合并到一个大管道中(因此一次下载 1 个)但可以在前端代码中单独访问每个流吗?

我确定我在正确的堆栈交换网站上问这个问题,如果我不是,请告诉我 ;-)

为什么不在一个连接中流式传输(如果您可以控制服务器端并且线路可用)?您请求所有 15 个流在一个连接(不是一个大流)中发送/流式传输,因此每个块的 headers 必须匹配适当的 stream-id.
阅读更多: http://qnimate.com/what-is-multiplexing-in-http2/
更多 in-depth 在这里:https://hpbn.co/http2/
对于 http1.0/1.1,您在这种情况下运气不佳 - 当时开发一个视频或 mp3 文件已经很重了(解决问题,例如 torrent 库但不可靠并且不适合大多数场景,除了 downloading/streaming).对于您的交互式场景,http2 是恕我直言的方式。

正如 Codebreaker007 所说,我也更喜欢 HTTP2 流多路复用。它专门用于解决并发连接过多的问题。

但是,如果您被 HTTP1.x 困住,我认为您并非完全倒霉。可以以某种方式合并流,以便客户端可以解构和操作各个流,但不可否认这需要更多的工作,并且您可能不得不求助于客户端轮询。

想法很简单——定义一个非常简单的数据结构:


[streamCount len1 data1 len2 data2 ...]

Byte 0 ~ 3: 32-bit unsigned int 合并流的数量

Byte 4 ~ 7: 32-bit unsigned int流1的数据长度

Byte 8 ~ 8+len1: binary流1的数据

Byte 8+len1+1 ~ 8+len1+4: 流2的数据长度

...

每个 data 允许长度为 0,在这种情况下处理方式没有区别。


在客户端不断轮询更多数据,期待这个数据结构。然后对其进行解构并将数据通过管道传输到各个流的缓冲区。然后您仍然可以单独操作组件流。

在服务器端,将来自各个组件流的数据缓存在内存中。然后在每个响应中清空缓存,组成这个数据结构并发送。


但同样,这在很大程度上是一种石膏溶液。我也建议使用 HTTP2 流,但这是一个合理的后备方案。