实时HLS文件播放与nodejs



我已经构建了一个php crud应用程序,允许用户上传视频并排队转换,我使用FFMPEG将它们转换为M3U8播放列表格式。我现在需要构建一个流媒体服务器,允许我实时播放这些文件,以便当用户浏览到页面时,他们看到视频在当前时间播放。我知道nodejs具有流媒体功能,并且在视频流媒体方面做了大量的研究,但我的不足。有人能给我指个方向吗。我有一个概念,在脑海中使用web套接字,但我找不到一个例子,这将有助于我解决我的问题。

如果你想把上传的视频作为video-on-demand (VOD)播放,你只需要把结果片段和m3u8播放列表放在一个网络可访问的目录中,通过你的网络服务器提供服务。

你可以很容易地模拟live playlist基于你的完整的播放列表使用node.js提供一个动态生成的m3u8

,

  1. 对于每个新的客户端会话获得初始连接时间
  2. 对于客户端发送的每个新的GET请求,使用初始时间和请求时间之间的差值以及完整的m3u8播放列表中的媒体段持续时间计算当前播放段索引。这将是播放列表中的最后一个元素。
  3. 找到前面的i - n段,其中n是您想要的滑动窗口大小。如果当前窗口大小小于目标持续时间的三倍,则增加n。使用i - n作为#EXT-X-MEDIA-SEQUENCE的值。
  4. 编写包含n结果片段的播放列表
  5. 对每个请求重复2-4。

通过适当地管理时间偏移,您还可以进行时移等。为了性能起见,在memcached中按播放时间对片段进行索引。

您正在考虑构建一个视频流平台,这是一件非常困难的事情(它不仅仅是简单地将二进制流从节点服务器输送到客户端,这就是您所想的)。

您正在考虑使用提供该功能的服务,例如Microsoft Azure Media services。我知道亚马逊的AWS也有这样的服务,但你需要检查一下,我只使用过微软的AMS。

事实上,这样的服务将允许HLS, MP4碎片和MPEG-DASH格式作为实时事件播放到客户端,甚至提供不同比特率/分辨率的自适应流功能。您可以在这里看到一个示例,并检查这是否是您正在寻找的。

最新更新