0
我有一个来自ip-camera的视频流,我想通过服务器处理这个流,所以我可以根据需要在很多设备(如iPad /浏览器)上显示它(相机只有100Mbit/s所以许多设备不显示任何东西)。我有一个jetty http-Server运行。我写了一类获取数据流并将其转换为一个MjpegFrame:刷新servlet jetty java
MjpegFrame = frame;
try {
MjpegInputStream m = new MjpegInputStream(url.openStream());
MjpegFrame f;
while ((f = m.readMjpegFrame()) != null) {
if(!running) break;
frame = f;
}
m.close();
} catch (IOException e) {
//some error outputs
}
得到当前帧
public MjpegFrame getCurrentFrame() {
return frame;
}
这工作得很好。现在,我想我的Servlet来显示它,但在这里我只得到一张照片,而不是流:
protected void processRequest(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
//String auth = request.getAuthType();
//System.out.println("auth:"+auth);
if(vm != null) {
MjpegFrame frame = vm.getCurrentFrame();
if(frame != null) {
BufferedOutputStream output = null;
try{
output = new BufferedOutputStream(response.getOutputStream(), 1024);
response.reset();
response.setBufferSize(1024);
response.setContentType("image/webp");
response.setHeader("Cache-Control", "max-age=0") ;
response.setHeader("Accept-Encoding", "gzip, deflate, sdch");
while(frame != null){
response.setContentLength(frame.getContentLength());
output.write(frame.getJpegBytes(), 0, frame.getContentLength());
frame = vm.getCurrentFrame();
}
}catch(Exception e){
e.printStackTrace();
}finally {
}
} else {
System.out.println("No image available...");
}
} else {
System.out.println("Error: VideoMultiplier is not set");
}
}
有谁知道什么是错我的代码?
'Accept-Encoding'不是响应标题。你也可能想看看Servlet 3.1的WriteListener进行异步响应写入。 –