直播分割

Live Stream Segmentation

如果我不需要自适应视频,那么我可以不用分段吗?例如,我是否可以只打开 WebSocket 连接并传输视频文件,客户端会在新部分一出现就播放它 received.Are 这种方法有什么缺点吗?

比那更容易。您可以在没有 Web 套接字的情况下使用普通 HTTP 进行这种类型的流式传输。客户端类似于:

<video src="https://stream-server.example.com/stream"></video>

然后,无论你在服务器端使用什么,只需要生成一个带有适当初始化信息的流,然后是你在直播流中的任何位置。浏览器会尽快开始播放,一切正常。

这是正常的 HTTP 渐进式流式传输。它一直与音频一起使用,在大多数情况下不需要自适应比特率,并且可以轻松自同步(MP3、ADTS 等)。如果您不需要自适应比特率,您也可以将它用于视频,并且可以发送初始化数据并将流分块到正确的位置。 (如果您不确定如何执行此操作,请使用十六进制编辑器和您正在使用的任何容器格式的规范。我发现 WebM/Matroska 非常容易使用,并且流式传输了这个Node.js 服务器的一些 EBML NPM 包的方式。)

有几点需要注意:

  • 服务器负责组装流,因此您将无法使用标准 file/blob-based CDN。对于很多用例,这无关紧要,因此您需要决定它是否对您重要。
  • 如果流停止,浏览器将等待这些数据包到达,或者在极端情况下它可能会重新连接。您需要能够通过跟踪您发送给客户端的字节偏移量来处理重新连接逻辑。客户端将发出远程 HTTP 请求以从中断处继续,您需要能够处理它。 (或者,使用几行 JavaScript 进行修复,以便在出错时重置整个内容。)
  • 从好的方面来说,这是一种高质量且极其简单的直播方式!

此外,请考虑为您的服务器使用 Icecast。我曾经通过这种方式发送视频......多年来没有尝试过,但我想它仍然有效。如果没有,一个简单的 Node.js 服务器就可以做到。