使用 S3 进行 HLS 直播 - 这些假设是否正确?

HLS Live streaming with S3 - are these assumptions correct?

我想做一个直播。而且,我想使用 HLS。

我了解 HLS 直播流只是一个带有“.m3u8”扩展名的主播放列表文件,其中列出了所有要播放的文件。

但是,对于直播,由于所有文件都不是现成的,所以它们是在进来的时候添加的。

我现在想使用 S3 来托管这些文件和播放列表文件。

现在,我想更新S3 中的播放列表文件。但它实际上将替换现有的播放列表文件,而不仅仅是 更新 它(根据 this answer)。

所以,我假设在文件替换期间不会有停滞时间。如果有死区时间,我该如何克服它?这是这样做的方法还是有其他更好的方法。

我正在使用 NodeJS 服务器,仅供参考。

*无文件时的dead-time时间

I want to make a live stream. And, I want to use HLS.

为什么选择 HLS?为什么不达世币? DASH 的分段和实现也几乎与 HLS 完全一样,但在编解码器选择方面具有更大的灵活性。两者都可以,但如果您今天要从头开始,我推荐 DASH 和 DASH.js 参考播放器代码,它使用媒体源扩展。

I understand that a HLS live stream is just a main playlist file with '.m3u8' extension that lists all the files to be played.

正确。

But, for live stream, since all the files are not available readily, they are added as they come in.

正确。

Now, I want to update the playlist file in S3. But it's actually going to replace the existing playlist file instead of just updating it

是的,正如另一个答案所指出的,没有区别。播放列表文件将被新的完整副本覆盖。 S3 API 不允许附加到文件,除非进行分段上传,这实际上不是一回事。在任何情况下,您的直播播放列表文件都不会包含每个片段。通常你只保留播放列表中的最后几个片段,但这取决于你决定要返回多远。

So, I'm assuming that there will be no dead-time during the file replace.

在上传并存储完整的新对象之前,S3 不会替换该对象。永远不会出现部分文件存在的情况。 S3 不像常规文件系统。此外,如果后续上传失败,旧对象仍将保留。

HLS 和 DASH 播放器在开始播放之前读取播放列表并缓冲大量数据。 (这就是为什么它们以高延迟而臭名昭著的原因。)新片段上传并添加到播放列表之前需要几秒钟,因此缓冲区中已经有数据可以播放很重要。这就是为什么你不必担心任何掉线,除非没有及时上传。

I'm using a NodeJS server, just FYI.

是吗?听起来你对我来说是在使用 S3...不确定 Node.js 与这些有什么关系。