【问题标题】:Live Stream Segmentation直播分割
【发布时间】:2021-03-02 15:13:58
【问题描述】:

如果我不需要自适应视频,我可以不用分段吗?例如,我可以只打开WebSocket连接并传输视频文件,客户端收到新部分后立即播放。这种方法有什么缺点吗?

【问题讨论】:

    标签: video video-streaming html5-video http-live-streaming live-streaming


    【解决方案1】:

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

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

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

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

    有几点需要牢记:

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

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

    【讨论】:

      猜你喜欢
      • 2012-06-16
      • 1970-01-01
      • 2017-01-21
      • 2017-04-28
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-11-11
      • 2012-05-01
      相关资源
      最近更新 更多