2009-01-07 7 views
10

J'écris une application client Java pour recevoir des vidéos M-JPEG en direct à partir d'une caméra IP. La vidéo est envoyée par la caméra sous la forme d'un message HTTP multipartie sans fin dans lequel chaque partie est une image JPEG unique. J'ai besoin de traiter chacune de ces images à mesure qu'elles arrivent, donc j'espère qu'il y a un moyen de faire une requête HTTP qui déclenche de manière asynchrone un événement lorsque chaque partie de message/trame vidéo est reçue.Java: réception d'une réponse HTTP en plusieurs parties

Quelqu'un connaît-il des bibliothèques qui peuvent faire cela? Tous les exemples que je peux trouver sur Google ne fonctionneront pas parce qu'ils utilisent des appels bloquants qui analysent seulement la réponse et la décomposent en parties après que la réponse entière ait fini d'être reçue (qui évidemment ne fonctionnera pas pour une réponse sans fin). Je réalise que je pourrais diviser manuellement les données en parties en arrivant en cherchant la limite du message mais j'ai l'impression de réinventer la roue.

Répondre

1

Essayez HttpClient à partir d'Apache Commons. Le code source a quelques classes qui montrent comment lire dans un multipart dans un flux.

+0

J'ai regardé la documentation de cette bibliothèque et il semble que c'est seulement pour analyser des requêtes HTTP multipart, pas des réponses. Selon ce fil, il ne peut pas être utilisé pour analyser les réponses multipart: http://markmail.org/message/l6t46xzmikkbxo2e. Je regarde Mime4j dont ils parlent dans le lien. – user52386

4
+0

Merci - Cambozola semble être exactement ce que j'essaie de faire, je vais regarder un peu plus à leur code. J'espérais utiliser une bibliothèque HTTP correcte plutôt que du code personnalisé, car tout est HTTP standard, mais il semble qu'il n'y ait pas beaucoup de choses disponibles pour ce que je veux faire. – user52386

+0

On dirait que le push HTTP est seulement utilisé dans les webcams et certaines expériences. Le code n'est pas si compliqué. Je voudrais seulement dire assurez-vous que les échecs de connexion sont gérés correctement et ne supposez pas que toutes les informations arriveront correctement. N'importe quel navigateur api devrait gérer cela correctement aussi. – Loki

0

J'ai écrit des classes qui traitent des demandes multiparties pour mon projet Sceye-Fi, un serveur HTTP qui utilise les classes com.sun.net.httpserver fournies avec java 6, pour recevoir des photos à partir d'une carte Eye-Fi. En théorie, rien ne devrait l'empêcher de travailler sur une requête multipart infinie. J'espère que ça va aider.