NodeJS中的高性能视频文件服务器

时间:2015-08-03 16:21:23

标签: node.js video video-streaming

我想在NodeJS中构建高可用性和高性能的视频文件服务器和流视频。基本上,我想知道:

  1. 在NodeJS中创建视频文件服务器的可能方法是什么。
  2. 它会管理很多并发请求吗?由于这是一个视频文件,因此每个请求都需要时间来完全解决。
  3. 是否还有其他可能使用其他静态文件服务器。
  4. 请告诉我如何走上正确的道路。

3 个答案:

答案 0 :(得分:6)

视频流主要是通过HTTP进行高效的数据传输。数据是您的文件,通过网络服务器传输的数据可能与NodeJS或任何类型的后端处理无任何共享。它取决于需求,但数据作为文件通常直接提供给用户而不通过后端传递给用户。否则,系统元素将耦合在一起,从而影响性能并增加熵。

建议单独保留系统部件,例如Nginx可以一次性处理身份验证,授权,视频流,而不需要任何后端,这可能是一个很好的起点,绝对是真正的高性能。检查https://developer.jboss.org/thread/150947

server {
   location /video/ {
      rewrite               /video/([a-zA-Z0-9_\-]*)/([0-9]*)/(.*)\.flv$ /flv/$3.mp4?st=$1&e=$2;
    }

    location /mp4/ {
      internal;
      mp4;
      secure_link           $arg_st,$arg_e;
      secure_link_md5       YOUR_SECRET_PASSWORD_HERE$arg_e$uri;
}

视频文件的URL将由后端基于某种算法预生成,在示例中它是通过Ruby完成的,但有this approach

echo -n '2147483647/s/link127.0.0.1 secret' | \
    openssl md5 -binary | openssl base64 | tr +/ -_ | tr -d =

一旦达到这个主要目标(视频文件流?),NodeJS或任何其他给定技术可用于增强身份验证,授权,评论,共享和其他功能等常见任务。

答案 1 :(得分:0)

正如评论中已经提到的那样,还有其他开箱即用的选项可以提供视频流服务器(ngix模块似乎非常合适)。然而,如果你仍然想要建立自己的,使用node.js工作的正确工具似乎是BinaryJS。有一个非常直接的发展方式:

服务器

var server = BinaryServer({port: 9000});
server.on('connection', function(client){
client.on('stream', function(stream, meta){
     var file = fs.createWriteStream(meta.file);
     stream.pipe(file);
   }); 
});

documentationdemo部分记录得非常好,并且易于使用。

答案 2 :(得分:-1)

很多评论都是很好的建议。在性能和可扩展性方面,最大的瓶颈是文件服务器。我的建议是使用Couchbase。由于其缓存方法,它是性能最高的数据库,并且能够动态地向集群添加节点。在接受我的话之前做一些研究,因为id的作用是“先拍后问问题”。它将存储在RAM中接收的数据,报告成功,然后再写入磁盘。同样,它会将经常访问的文件保存在RAM中,如果多个用户正在观看同一视频,这将有助于提高性能。当一个节点被添加到集群时,它会宣告自己,并且它的对等体会自动开始向其发送数据以平衡负载。负载平衡也会自动发生。

http://www.couchbase.com/

至于网络服务器使用什么是舒适的。 Nginx会很好,NodeJS就像Couchbase,Apache甚至IIS都可以使用。首先选择您想要使用的语言,然后根据这些选项选择服务器。

最后,您可以查看已有的服务器端视频流代码库。你可以省去很多头疼的事。