la création de mon propre flux MJPEG

Je suis en train de créer un flux MJPEG, j'ai une série de fichiers jpeg que je veux mettre ensemble dans un cours d'eau de sorte qu'un utilisateur peut cliquer sur une URL et obtenir un flux mjpeg.
J'ai essayé depuis quelques jours pour que tout cela fonctionne, et c'est peut-être pas possible. Je l'ai porté jusqu'éthérée et écouté les paquets en provenance d'une caméra axis sur le net quelque part, et a essayé de mimmick. J'ai d'abord essayé d'utiliser WCF, et le retour d'un "flux", mais plus tard découvert que j'aurais besoin de définir le type de contenu sur ce flux, j'ai donc ensuite essayé la WCF REST api, mais qui souffre du même problème. donc, je suis maintenant à l'aide d'un os à nu HTTPListener et la gestion de l'événement. Je serais très préférez utiliser WCF, mais je ne suis pas sûr qu'il va me permettre de retourner un flux avec le bon type de contenu.
alors, voici ce que j'ai pour le httpListener .

dans le gestionnaire de l'auditeur de retour d'appel j'ai mis la suivante.

        HttpListenerResponse response = context.Response;
        response.ProtocolVersion = new System.Version(1, 0);
        response.StatusCode = 200;
        response.StatusDescription = "OK";
        response.ContentType = "multipart/x-mixed-replace;boundary=" + BOUNDARY + "\r\n";
        System.IO.Stream output = response.OutputStream;
        Render(output);

la méthode Render ressemble à ceci

        var writer = new StreamWriter(st);
        writer.Write("--" + BOUNDARY + "\r\n");
        while (true)
        {
            for (int i = 0; i < imageset.Length; i++)
            {
                var resource = Properties.Resources.ResourceManager.GetObject(imageset[i]) as Bitmap;
                var memStream = new MemoryStream();
                resource.Save(memStream,ImageFormat.Jpeg);
                byte[] imgBinaryData = memStream.ToArray();
                string s = Convert.ToBase64String(imgBinaryData);
                writer.Write("Content-type: image/jpeg\r\n");
                foreach (var s1 in imgBinaryData)
                {
                    writer.Write((char)s1);
                }
                writer.Write("\n--" + BOUNDARY + "\n");
                writer.Flush();
                Thread.Sleep(500);
            }
        }

À ce moment, j'ai juste ajouté quelques images jpeg en tant que propriétés de la dll, et je suis une itération sur eux, finalement, ce seront des images dynamiques, mais pour l'instant je veux juste la chose à travailler.

De ce que je comprends sur le MJPEG (spec) est que le contenu doit être mis à multipart/x-mixte-de remplacer et d'une limite définie. et puis vous venez de deliminate les fichiers jpeg dans le ruisseau par la frontière.

Cela semble comme il devrait être plus simple, je suis en train de faire, mais je me demande où je vais mal. si je charge cette URL dans IE ou Firefox se bloque. si j'essaie de faire un talon de page html avec une balise img, dont la source est l'URL puis-je obtenir une image brisée.

Des idées, merci

Josh

OriginalL'auteur Joshua | 2009-10-20