2010-06-30 46 views
1

我有存储在远程服务器中的图像文件(该文件夹中,即http://example.com/images).The图像得到以每100 1图像毫秒的速率更新于做动态地生成的图像的快速I/O 认为传送MJPEG图像 IP凸轮。无法将IP相机

我使用的Apache HTTP客户端API连接到我的远程服务器。我是获取内容的

HttpClient httpClient = new DefaultHttpClient(); 
    HttpGet httpget = new HttpGet("http://example.com/images/screenshot.jpg"); 
    HttpResponse response = httpClient.execute(httpget); 
    HttpEntity entity = response.getEntity(); 
    if (entity != null) { 
    InputStream instream = entity.getContent(); 

我结束了在输入流在BufferedInputSt中流以获得更快的I/O。但是由于图像的生成速度非常快,并且平均大小为250kb。

我想使用NIO功能,如FileChannel以及MemoryMappedBuffers 提高I/O性能以及在非阻塞模式下访问远程服务器上生成的图像文件。

但无论我看到的任何样本谈论创建FileInputStream/RandomAccessFiles以文件对象作为参数。

我得到的InputStream作为远程服务器的响应,我无法将其转换为FileInputStream以获取FileChannel。

我想知道是否有任何实现在Apache HTTP客户端API给出fileChannels。

或者我应该探索套接字来获得频道访问权限。 我也讨论过javax.imageIO,但不确定它是否能满足我对更快I/O的要求。

+0

1)您的服务器和客户端之间的带宽是多少? 2)你可以开始传输从远程服务器(通过FTP,目录映射,无论)? – 2010-06-30 14:56:32

+0

带宽约为1 mBps,我只能使用http。尽管ftp协议是由我的ip cam支持的,但它会以60秒为间隔将图像上传到ftp服务器。而且我无法控制上传速度。 其实我的网络摄像头嵌入了Linux和网络服务器,并传输h264流以及mjpeg图像。 我能够将图像下载到我的开发箱上的指定文件夹,但过程非常缓慢。 在我以前的经验中,我发现使用FileChannels完成的文件I/O大大提高了性能 – 2010-06-30 15:05:39

回答

0

您的限制因素将成为网络。如果你有一个1mbps的线路,这意味着你的实际最大传输速率可能大约为每秒100千字节(我认识到字节为8位,但是由于通信开销,典型的观察到的传输往往是10比1)。

如果您希望每秒下拉10张图像,并且每张图像为250k,则需要25 mbps的网络连接。

套接字可能会提供较小的改进,但它仍然不会达到您想要的。你有没有考虑压缩?例如。在服务器上,将多个图像组装成压缩存档,下载并解压缩。这仍然不会让你每秒钟10 250k图像,但可以让你更接近。

另一种选择可能是使用视频流,除非你绝对需要图像。

如果您绝对需要每秒10张图像,则需要增加与服务器的连接速度,或者减小图像的大小或两者的组合。

+0

注意到“B”和“b” – 2010-06-30 15:44:30

+0

我注意到了它们,但棘手的事情大多数都不知道差别或者经常出错,所以并不总是值得信赖的。即使如此,如果他可以获得每秒大约1兆字节的下载量,它仍然是一个不足的数据速率。 – Taylor 2010-06-30 16:26:50

+0

@Taylor在一个案例中,他很紧张,但另一个是不可能的 – 2010-06-30 18:07:30