build筑咨询 – networking摄像机远程访问

我正在寻找build筑build议。 我有一个客户谁build立了一个网站,从根本上允许用户远程查看他们的networking摄像头。

目前的数据stream量如下:

用户打开页面查看networking摄像头图像。 Javascript脚本每1000毫秒轮询服务器上的URL(附加了唯一的时间戳)

为相机ftp用户启用了ftp连接。 networking摄像头打开FTP连接到服务器。 networking摄像头开始拍照。 networking摄像机发送照片到FTP服务器。

在图像url请求:服务器读取通过ftp上传的硬盘上的最新图像的相机。 服务器从服务器删除任何较旧的图像。

目前,对于less量的用户/相机(大约10个用户和大约相同数量的相机)来说,这是可行的,但是我们开始担心这种方法的可扩展性。

我原来的计划不是从服务器读取文件,Web服务器会打开一个到Web服务器的ftp连接,直接从那里读取最新的图像,这意味着我们应该能够相当容易地水平缩放。 但是ftp连接的build立时间太慢了(主要是因为牛的PHP无法保持ftp连接),所以我们放弃了这个方法,直接从硬盘读取数据。

摄像机的固件提供程序声明,他们可以构build一个http客户端,而不是使用ftp上传图像,可以将图像发布到Web服务器。 这似乎对我来说是合情合理的,但我正在寻找一些build筑build议。

我目前的想法是一个简单的Nginx / PHP / Redis的堆栈。

networking摄像机向Nginx / PHP发送最新映像的请求,并且该相机的最新映像存储在Redis中。

然后,客户端可以从Redis中取出最新的图像,这应该是非常快速的,因为图像将始终存储在内存中。

数据stream将会变成:

用户打开页面查看networking摄像头图像。 Javascript脚本每1000毫秒轮询服务器上的URL(附加了唯一的时间戳)

相机发送一个http请求开始发布图像到一个提供的urlnetworking摄像机开始拍照。 networking摄像机尽可能快地向服务器发送发送请求

对图像url请求:服务器从redis中读取最新的图像服务器告诉redis删除以后的图像

我的问题是:

  1. 通过HTTP而不是FTP传输图像是否有更大的开销?
  2. 有没有简单的方法来计算我们可以一次有多less个潜在的相机?
  3. 有什么办法可以防止由于networking摄像头请求而导致我们自己的服务器DOS?
  4. Redis是这个问题的一个很好的解决scheme吗?
  5. 我应该放弃PHP / Ngix组合,并去其他的东西?
  6. 这个build议的解决scheme实际上是否有用?
  7. 将HTTP添加到混合会导致张贴图像变得太慢?

提前致谢

艾伦

通过HTTP而不是FTP传输图像是否有更大的开销?

不是真的。 HTTP比FTP更容易加速和caching。

有没有简单的方法来计算我们可以一次有多less个潜在的相机?

1080p的单个MPEG4stream大约是10Mbit。 这是一个棒球的数字。 你应该能够缩放到你的实际分辨率。

有什么办法可以防止由于networking摄像头请求而导致我们自己的服务器DOS?

向外扩展。 有一个很好的Node.js MJPEG代理,我以前使用过,它比一个摄像头的车载video服务器更好。

Redis是这个问题的一个很好的解决scheme吗?

也许和其他的一样好。 因人而异。 做一些testing。

我应该放弃PHP / Nginx的组合,去别的什么?

坚持你所熟悉的。

这个build议的解决scheme实际上是否有用?

听起来似乎是合理的,等待一些概念validation和基准testing

将HTTPS添加到混合会导致张贴图像变得太慢?

可能有一点,但可能不是一个明显的程度。 再次,你需要做一些testing。 您可能可以避免使用单独的反向代理来终止SSL连接,并且这样可以使用HTTPS访问映像,但上传不会通过HTTPS进行(如果这是您想要的)。

还有一些HTTPS加速卡可以用于真正的服务器。