我想要建立一个高可用性和高性能的视频文件服务器和流媒体视频在NodeJS。基本上,我想知道:
请给我建议如何走上正确的道路。
发布于 2015-08-13 07:11:52
视频流主要是通过HTTP实现高效的数据传输。数据是您的文件,通过with服务器进行的数据传输可能与NodeJS或任何后端处理没有任何共享。这取决于需求,但数据作为文件通常直接提供给用户,而不通过后端传递。否则,系统元素就会耦合在一起,从而影响性能,增加熵。
建议将系统部件分开处理,例如Nginx可以一次性处理身份验证、授权、视频流,而不需要任何后端,这是一个很好的起点,而且绝对是高性能的。查看这种方法:
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实现的,但是有关于巴什的一个例子
echo -n '2147483647/s/link127.0.0.1 secret' | \
openssl md5 -binary | openssl base64 | tr +/ -_ | tr -d =一旦你达到这个主要目标(视频文件流?)然后,NodeJS或任何其他给定的技术都可以用于常见的任务,如增强身份验证、授权、评论、共享和其他功能。
发布于 2015-08-13 07:55:09
正如注释中已经提到的,有其他现成的选项可以使用视频流服务器(恩吉克斯模块似乎非常合适)。尽管如此,如果您仍然希望构建自己的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);
});
});发布于 2015-08-12 17:30:11
许多意见都是很好的建议。在性能和可伸缩性方面,最大的瓶颈将是文件服务器。我的建议是使用Couchbase。由于它的缓存方法,它是性能最高的数据库,并且能够动态地向集群添加节点。在接受我的承诺之前,先做一些研究,因为我所做的是“先开枪,然后再问问题”。它会将接收到的数据存储在RAM中,报告成功,然后写到磁盘。类似地,它会将频繁访问的文件存储在RAM中,如果多个用户正在观看相同的视频,这将极大地提高性能。当一个节点被添加到集群中时,它会宣布自己,并且它的对等点会自动发送数据来平衡负载。负载平衡也会自动发生。
http://www.couchbase.com/
至于web服务器,则使用任何舒适的。Nginx很好,NodeJS被设置为Couchbase之类的东西,Apache甚至IIS都能工作。首先选择要在哪种语言中工作,然后根据这些选项选择服务器。
最后,您可以签入已有的服务器端视频流代码库。你这样做可以省去很多头痛。
https://stackoverflow.com/questions/31792198
复制相似问题