criando meu próprio fluxo MJPEG

Eu estou tentando criar um fluxo de MJPEG, eu tenho uma série de jpegs que eu quero colocar juntos em um fluxo para que um usuário pode apenas acertar um URL e obter um fluxo de mjpeg. Eu tenho tentado nos últimos dias fazer isso funcionar, e isso pode não ser possível. Eu levantei ethereal e escutei os pacotes vindos de uma câmera de eixo na rede em algum lugar, e tentei imitá-lo. Eu originalmente tentei usar o WCF e retornar um "fluxo", mas depois descobri que precisaria definir o tipo de conteúdo nesse fluxo, então tentei a API WCF REST, mas isso sofre do mesmo problema. então agora estou apenas usando um HTTPListener básico e manipulando o evento. Eu preferiria usar o WCF, mas não tenho certeza se isso me permitirá retornar um fluxo com o tipo de conteúdo correto. então aqui está o que eu tenho para o httpListener.

no manipulador do ouvinte ligar de volta eu coloquei o seguinte.

        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);

o método Render se parece com isso

        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);
            }
        }

Neste ponto eu adicionei apenas algumas imagens jpeg como propriedades na dll, e estou iterando sobre elas, eventualmente, estas serão imagens dinâmicas, mas por enquanto eu só quero fazer a coisa funcionar.

Pelo que eu entendo sobre o MJPEG (spec) é que o conteúdo deve ser definido para multipart / x-mixed-replace e um conjunto de limites. e então você apenas deliminar os jpegs dentro do fluxo pelo limite.

Isso parece que deveria ser mais simples, então eu estou fazendo isso, mas eu estou querendo saber onde estou indo errado. se eu carregar este URL no IE ou no Firefox, ele simplesmente trava. Se eu tentar criar uma página html com uma tag img, cuja origem é a URL, eu recebo uma imagem quebrada.

Alguma idéia, obrigado

Josh

questionAnswers(2)

yourAnswerToTheQuestion