2008-12-04 22 views
3

Je suis à la recherche en streaming de données binaires dans un navigateur (via http). Je cherche des opinions sur les bonnes façons de faire cela. En fin de compte, j'aurai une source de données en temps réel et je voudrais manipuler ces données et les afficher (en temps réel) dans un navigateur. Firefox vient en premier, IE serait bien ... mais je ne suis pas si difficile. J'ai un plugin firefox qui fait ce dont j'ai besoin, mais je préférerais quelque chose écrit en javascript/html qui fonctionnerait sans que l'utilisateur n'ait à installer de plugins. J'ai regardé le type MIME/media multipart/x-mixed-replace et il semblerait que cela pourrait être utile dans ce projet, mais je voulais entendre des opinions sur les meilleurs moyens de le faire (le cas échéant) avant de passer trop d'heures à suivre ce chemin.flux de données binaires sur http

Flash ferait probablement le travail, mais encore une fois, j'aimerais éviter les plugins. J'aimerais avoir la solution la plus simple possible (n'est-ce pas?), Idéalement avec javascript/html.

J'ai aussi regardé dans Comet pour voir ce que cela peut faire pour moi.

Répondre

4

Beaucoup de ceci dépend de ce que vous voulez faire avec les données. Je suppose que le rendre.

Flash serait probablement la solution la plus simple. C'est un ajout assez commun que presque tout le monde devrait avoir maintenant; donc vous ne courez pas beaucoup de risque d'incompatibilité. JavaScript n'a pas été considéré comme une bonne plate-forme pour la gestion des données binaires - donc, il n'y a pas eu beaucoup de développement dans le domaine. Je ne pense pas que vous allez trouver beaucoup d'aide pour ce que vous voulez. Surtout quand vous obtenez le point de rendu - sauf si vous pouvez peut-être convertir chaque fichier binaire en canvas script, car il s'agit de la seule image dynamique disponible en JavaScript.

IE peut en fait être l'exception, car vous pourriez être en mesure d'utiliser certains objets ActiveX pour accomplir cela pour quelques types de fichiers. Mais, alors vous découpez la plupart des autres navigateurs.

+0

Oui, finalement rendre les données, j'ai fait quelques tests avec l'objet de toile et il semble assez décent. Merci pour les pensées. –

1

Vous pouvez utiliser Base64 pour convertir le fichier binaire en texte et l'envoyer au navigateur. Avec IE, vous pouvez le convertir directement en binaire, mais je ne suis pas sûr si vous pouvez le faire avec Firefox et d'autres. J'ai vu jscripts pour Base64 enflate/deflate et un script nommé base64.js qui fait probablement aussi la conversion.

Toutefois, il est probablement préférable de convertir les données binaires en JSON et d'utiliser AJAX pour transférer les données, puis de les traiter en tant qu'objet javascript dans le navigateur. Le serveur Web serait responsable de l'acquisition des données et de leur conversion en JSON, vous devriez donc pouvoir traiter le binaire quel que soit le langage de programmation que vous utilisez.

+0

Si vous convertissez en Base64, vous augmentez la bande passante réseau d'exactement 1/3. Pas bon quand vous pourriez être en streaming à plusieurs clients. – Matt

+0

D'accord. Espérons que la compression HTTP aidera à minimiser l'augmentation de la bande passante, mais cela ajoute une charge supplémentaire. Il n'y avait pas beaucoup de détails dans le Q, mais c'était une option pour le HTML pur (pas de plug-ins et ne considérant pas HTML5 à l'époque). – Ryan

1

J'éviterais généralement d'utiliser multipart/x-mixed-replace, car le navigateur est assez sommaire. Je sais que le multipart/x-mixed-replace de mes caméras ne fonctionne pas sur IE ou les versions plus récentes de Firefox (bien qu'il semble qu'il y ait une configuration à changer). Je pense qu'une petite application Flash peut être l'une de vos meilleures options.

+2

J'ai pu obtenir un exemple de base en utilisant multipart/x-mixed-replace pour travailler dans Firefox 3.0.4 sans modifier les paramètres (dont je me souviens). Quel est le problème que vous avez rencontré? –

2

En ce qui concerne le streaming de données et les connexions de type socket, vous pouvez jeter un oeil au APE (Ajax Push Engine) project. Il vous permet de configurer un proxy HTTP auquel votre JavaScript peut se connecter pour de vraies connexions socket. Comme quoi faire avec les données quand il arrive, j'ai fait une preuve de concept montrant comment vous pouvez travailler avec des données PNG brutes, analyser et rendre au navigateur.Check it out.

2

J'ai déjà eu à faire exactement cela avec des données Video (c'est-à-dire motion jpeg).

Je remarque que vous venez de dire "données binaires" ... est-ce que ce sont des données d'image ou non? qu'Est-ce que c'est?

multipart/x-mixed-replace fonctionne très bien dans beaucoup de navigateurs de nos jours. Je pense qu'il pourrait même être pris en charge dans les versions ultérieures de IE. Il fonctionne certainement dans toutes les versions de Firefox il y a environ 5 ans quand j'ai dû mettre en œuvre cela. Les navigateurs basés sur Webkit sont probablement également supportés, y compris Chrome et Safari.

Cependant, à mon avis, cela ne convient vraiment que pour une application LAN. La raison en est que vous envoyez beaucoup de données. Plutôt que d'envoyer les différences entre les images successives (si c'est la vidéo), vous enverrez des images entières à chaque fois. En fonction du nombre d'utilisateurs, cela pourrait également imposer une lourde charge au serveur pour la bande passante. Alors que multipart/x-mixed-replace est de loin le plus simple à implémenter, ce n'est pas forcément la solution la plus appropriée. Encore une fois cela dépend de votre type de données brutes.

Pour la vidéo, vous pouvez en théorie écrire quelque chose en javascript pour le faire. En fait, si vous google pour lecteur vidéo javascript, vous pouvez en trouver. Je doute qu'ils soient terriblement rapides et imposent probablement un lourd fardeau à la machine cliente. Pourtant, cela semble faisable.

donc vos options sont: 1) Type de contenu mixte remplacer 2) Télécharger un plugin plugin navigateur natif (le plus rapide le plus efficace) Flash ou silverlight à base 3) joueur basé Javascript

Si elle est vidéo que vous voulez La dernière option, qui est sur le bord saignant est 4) vidéo HTML5. http://www.html5video.org/ Comme les normes sont encore en cours de ratification et le support du navigateur est limité, je ne le recommanderais pas en ce moment.