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

时间:2017-03-07 10:47:12

标签: node.js amazon-s3 live-streaming hls m3u8

我想要直播。而且,我想使用HLS。

据我所知,HLS直播流只是一个主播放列表文件,其中包含' .m3u8'列出要播放的所有文件的扩展名。

但是,对于实时流,因为所有文件都不容易获得,所以在它们进入时会添加它们。

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

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

所以,我假设在替换文件期间没有死区时间。如果有一个死时间,我该如何克服它?这是做到这一点的方式,还是有其他更好的方法来做到这一点。

我使用的是NodeJS服务器,仅供参考。

*没有文件时的死区时间。

1 个答案:

答案 0 :(得分:4)

  

我想要直播。而且,我想使用HLS。

为何选择HLS?为什么不DASH? DASH也是分段的,几乎与HLS一样实现,但就编解码器选择而言,它具有更大的灵活性。两者都很好,但是如果你今天从头开始,我推荐使用DASH和DASH.js参考播放器代码,它使用Media Source Extensions。

  

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

正确。

  

但是,对于实时流,因为所有文件都不容易获得,所以在它们进入时会添加它们。

正确。

  

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

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

  

所以,我假设文件替换期间没有死区时间。

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

HLS和DASH播放器在开始播放之前读取播放列表并缓冲大量数据。 (这就是他们众所周知地具有高延迟的原因。)在新段上传并添加到播放列表之前几秒钟,因此重要的是他们已经在缓冲区中有数据要播放。这就是为什么你不必担心任何辍学,除非没有及时上传。

  

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

是吗?是这样吗?听起来你正在向我使用S3 ......不确定Node.js与其中任何一个有什么关系。