如果我不需要自适应视频,那么我可以不进行分割吗?例如,我可以打开WebSocket连接并传输视频文件吗?客户端会在收到新部分后立即播放。这种做法有缺点吗?
这甚至比这更容易。您可以在没有Web套接字的情况下进行这种类型的流式传输,并使用普通的HTTP。客户端类似于:
<video src="https://stream-server.example.com/stream"></video>
然后,无论您在服务器端使用什么,都只需要生成一个具有适当初始化信息的流,然后再生成您在实时流中的任何位置。浏览器将尽快开始播放,一切正常。
这是直接的普通HTTP渐进流。它一直与音频一起使用,在大多数情况下,音频不需要自适应比特率,并且可以很容易地自同步(MP3、ADTS等(。如果不需要自适应的比特率,你也可以将它与视频一起使用,并且可以将初始化数据发送到正确的位置并将流块化。(如果你不确定如何做到这一点,可以使用十六进制编辑器和你使用的任何容器格式的规范。我发现WebM/Matroska非常容易使用,并且已经用这种方式为Node.js服务器提供了一些EBML NPM包。(
有几件事需要记住:
- 服务器负责组装流,因此您将无法使用基于标准文件/blob的CDN。对于很多用例来说,这是无关紧要的,所以你需要决定它是否对你重要
- 如果流暂停,浏览器将等待这些数据包到达,或者在极端情况下可能会重新连接。您需要能够通过跟踪发送到客户端的字节偏移量来处理重新连接逻辑。客户端会发出一个远程HTTP请求,继续它停止的地方,你需要能够处理它
- 从好的方面来说,这是一种高质量且极其简单的流媒体方式
此外,请研究将Icecast用于您的服务器。我过去常常通过这种方式发送视频。。。我已经好几年没有尝试了,但我想它仍然有效。如果没有,一个简单的Node.js服务器就可以做到