カスタム ビデオ ソース オブジェクトから M-JPEG コンテンツをストリーミングしようとしていますが、wireshark からの接続を確認すると、サーバーからデータが返されません。以下は、私が使用した関連するコード セグメントです。このコードを機能させる方法を知っている人はいますか?
セグメント:
try {
server = new HTTPServerWrapper(8099);
server.MJpegBindVideoSource(camera, "/test");
} catch (IOException ex) {
Logger.getLogger(Recorder.class.getName()).log(Level.SEVERE, null, ex);
}
物理学/サーバー/HTTPServerWrapper.java:
/*
* To change this template, choose Tools | Templates
* and open the template in the editor.
*/
package physics.server;
import java.io.IOException;
import java.net.InetSocketAddress;
import physics.VideoSource;
/**
*
* @author rritoch
*/
public class HTTPServerWrapper {
com.sun.net.httpserver.HttpServer server;
public HTTPServerWrapper(int port) throws IOException{
server = com.sun.net.httpserver.HttpServer.create(new InetSocketAddress(port), 0);
}
public void MJpegBindVideoSource(VideoSource vs, String path) {
final VideoSource v = vs;
server.createContext(path,new MJpegHandler(vs));
}
}
物理/サーバー/MJpegHandler.java:
/*
* To change this template, choose Tools | Templates
* and open the template in the editor.
*/
package physics.server;
import com.sun.net.httpserver.Headers;
import com.sun.net.httpserver.HttpExchange;
import com.sun.net.httpserver.HttpHandler;
import java.awt.image.BufferedImage;
import java.io.ByteArrayOutputStream;
import java.io.IOException;
import java.io.OutputStream;
import javax.imageio.ImageIO;
import physics.VideoSource;
/**
*
* @author rritoch
*/
public class MJpegHandler implements HttpHandler {
VideoSource vs;
public MJpegHandler(VideoSource videosource) {
this.vs = videosource;
}
public void setVideoSource(VideoSource videosource) {
this.vs = videosource;
}
public void handle(HttpExchange connection) throws IOException {
byte[] data;
System.err.println("Connect...");
String boundary = "VNetPhysics";
Headers responseHeaders = connection.getResponseHeaders();
responseHeaders.add("Content-Type", String.format("multipart/x-mixed-replace; boundary=--%s", boundary));
responseHeaders.add("Cache-Control", "no-cache, private");
responseHeaders.add("Pragma", "no-cache");
responseHeaders.add("Max-Age", "0");
responseHeaders.add("Expires", "0");
connection.sendResponseHeaders(200, 0);
OutputStream responseBody = connection.getResponseBody();
while (true) {
BufferedImage bufferedImage = vs.getBufferedImage();
ByteArrayOutputStream os = new ByteArrayOutputStream(8192 * 4);
ImageIO.write(bufferedImage, "jpg", os);
data = os.toByteArray();
os.close();
responseBody.write(("--" + boundary + "\r\n"
+ "Content-type: image/jpg\r\n"
+ "Content-Length: "
+ data.length
+ "\r\n\r\n").getBytes());
responseBody.write(data);
responseBody.flush();
}
}
};
編集:接続メッセージを stderr に追加した後、http://192.168.2.7:8099/test への要求がこのハンドラーに送信されていないようです。ハンドラーがないと、機能しない理由がわかります。このハンドラーにリクエストを処理させるには何が欠けていますか?