使用nodejs

时间:2015-07-11 14:03:43

标签: node.js sockets video streaming hls

我已经构建了一个php crud应用程序,允许用户上传视频并将其排队进行转换,我使用FFMPEG将它们转换为M3U8播放列表格式。我现在需要构建一个流媒体服务器,允许我实时播放这些文件,这样当用户浏览页面时,他们就会看到当前播放的视频。我知道nodejs具有流媒体功能,并且已经对视频流进行了大量的研究,而且还很短。有人能指出我正确的方向吗?我通过使用网络套接字有一个概念,但我找不到一个可以帮助我解决问题的例子。

2 个答案:

答案 0 :(得分:2)

如果您想将上传的视频播放为video-on-demand (VOD),您只需将生成的细分和 m3u8 播放列表放在可通过网络服务器访问的网络可访问目录中

您可以使用node.js通过提供即时生成的 m3u8 ,根据您的完整播放列表轻松模拟live playlist

例如:

  1. 为每个新客户端会话获取初始连接时间
  2. 对于客户端发送的每个新GET请求,使用初始时间和请求时间之间的差异以及完整 m3u8 播放列表中的媒体片段持续时间来计算当前播放段索引。这将是播放列表中的最后一个元素。
  3. 查找以前的i - n段,其中n是您所需的滑动窗口大小。如果当前窗口大小小于目标持续时间的三倍,则增加n。使用i - n作为#EXT-X-MEDIA-SEQUENCE值。
  4. 撰写包含n结果段
  5. 的播放列表
  6. 每个会话的每个请求重复2-4次。
  7. 通过正确管理时间偏移,您还可以进行时移等。为了性能,请将播放时间段保存在memcached之内。

答案 1 :(得分:1)

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

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

实际上,这样的服务将允许作为直播事件向客户端回放HLS,MP4分段和MPEG-DASH格式,甚至提供针对不同比特率/分辨率的自适应流传输能力。您可以看到示例HERE,并检查这是否是您要查找的内容。