2009-01-07 12 views
10

Ich schreibe eine Java-Client-Anwendung, um Live-M-JPEG-Video von einer IP-Kamera zu empfangen. Das Video wird von der Kamera als endlose mehrteilige HTTP-Nachricht gesendet, wobei jeder Teil ein einzelner JPEG-Frame ist. Ich muss jeden dieser Frames so verarbeiten, wie sie ankommen, also hoffe ich, dass es eine Möglichkeit gibt, eine HTTP-Anfrage zu machen, die ein Ereignis asynchron auslöst, wenn jeder Nachrichtenteil/Videoframe empfangen wird.Java: Empfangen einer mehrteiligen HTTP-Antwort

Kennt jemand Bibliotheken, die dies tun können? Alle Beispiele, die ich bei Google finden kann, funktionieren nicht, weil sie blockierende Aufrufe verwenden, die die Antwort nur analysieren und in Teile aufteilen, nachdem die gesamte Antwort empfangen wurde (was offensichtlich bei einer endlosen Antwort nicht funktioniert).

Ich weiß, ich könnte die Daten manuell in Teile zerlegen, wie es ankommt, indem ich nach der Nachrichtengrenze suche, aber es fühlt sich an, als würde ich das Rad neu erfinden.

Antwort

1

Versuchen Sie HttpClient von Apache Commons. Der Quellcode hat einige Klassen, die zeigen, wie in einem Multipart in einer Stream-Mode gelesen wird.

+0

Ich schaute auf die Dokumentation für diese Bibliothek und es sieht aus wie es nur für das Parsen von mehrteiligen HTTP-Anfragen, nicht Antworten ist. Gemäß diesem Thread kann es nicht verwendet werden, um mehrteilige Antworten zu analysieren: http://markmail.org/message/l6t46xzmikkbxo2e. Ich schaue in Mime4j, die sie in dem Link erwähnen. – user52386

4
+0

Danke - Cambozola scheint genau das zu sein, was ich versuche, ich werde mir ihren Code genauer ansehen. Ich hatte gehofft, eine richtige HTTP-Bibliothek anstelle von benutzerdefinierten Code zu verwenden, da es alles Standard-HTTP ist, aber es sieht so aus, als ob nicht viel für das, was ich tun möchte, verfügbar ist. – user52386

+0

Scheint wie HTTP-Push nur in Webcams und einigen Experimenten verwendet wird. Der Code ist auch nicht so kompliziert. Ich würde nur sagen, stellen Sie sicher, dass Verbindungsfehler korrekt behandelt werden und nicht davon ausgehen, dass alle Informationen korrekt ankommen. Jedes Browser-API sollte das auch korrekt behandeln. – Loki

0

Ich habe Klassen geschrieben, die mehrteilige Anforderungen für mein Projekt Sceye-Fi verarbeiten, ein HTTP-Server, der die Klassen verwendet, die mit Java 6 geliefert werden, um Foto-Uploads von einer Eye-Fi-Karte zu erhalten. Theoretisch sollte nichts verhindern, dass es an einer endlosen mehrteiligen Anfrage arbeitet. Hoffe, es wird helfen.

Verwandte Themen