HTTP2对于视频流媒体或实时多人游戏是否可行?

3
尝试了解Http2的功能和与Web Sockets的比较。Http2允许服务器不断向客户端推送内容,是否存在任何限制,防止其用于快速发送视频数据包以实现视频流播放的效果?
1个回答

3

HTTP/2推送旨在推送与主要资源相关的资源。

它主要用于浏览器。在请求index.html页面时,浏览器会被推送index.html引用的style.cssapplication.js文件。

从技术上讲,可以在单个响应中向客户端流式传输视频(批量下载)。

对于更高级的功能,例如稍微缓冲一下并只在视频流播放时下载,HTTP客户端可以进行范围请求

对于下载具有不同分辨率的平行流——720p与1080p——客户端可以发出两个不同的请求。

需要配置HTTP/2以使客户端具有大的流控窗口(请参见此答案),但对于浏览器来说,已经是这样的情况了,而大多数HTTP/2客户端库也支持这种类型的配置。

因此,从技术上讲是可能的,但它与WebSocket相比如何呢?

WebSocket完全缺乏元数据概念,因此应用程序编写者必须发明一些元数据格式用于请求和响应,例如视频流ID /标题,分辨率,范围等,然后下载原始视频。

HTTP/2帧开销为9字节,WebSocket帧开销为10字节(假设有大型帧)。 但是,HTTP/2的最大帧大小为16 KiB,而WebSocket的最大帧大小可能更大,尽管可能不推荐太大(因为客户端可能决定不为服务器发送的超大帧分配资源)。

此外,在WebSocket中,存在最大消息大小概念。通常不能仅发送属于同一消息的WebSocket帧,因此需要将视频拆分为多个更小的消息(但这只是技术细节)。

最后,HTTP/2可以在HTTP/2流中进行WebSocket通信(RFC8441)。

这意味着HTTP/2请求/响应可以完美地模拟WebSocket通信:您将拥有一个“无限”请求 - 其具有永远不会结束的请求内容(直到通信关闭) - 用于从客户端到服务器的通信,并拥有一个“无限”响应 - 其具有永远不会结束的响应内容(直到通信关闭)-用于从服务器到客户端的通信。

总之,我不会使用HTTP/2 推送来流式传输视频:普通的HTTP/2响应可以更有效地完成此任务(就像WebSocket一样)。

我认为WebSocket非常有用,可用于服务器向客户端进行未经请求的通信。使用HTTP/2,客户端必须始终发起请求。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接