создание своего собственного потока MJPEG
Я пытаюсь создать поток MJPEG, у меня есть серия jpeg, которые я хочу собрать в поток, чтобы пользователь мог просто нажать URL и получить поток mjpeg. Последние несколько дней я пытался заставить это работать, и это может быть просто невозможно. Я поднял эфир и слушал пакеты, поступающие от камеры с осью в сети где-то, и пытался имитировать это. Первоначально я пытался использовать WCF и возвращать «поток», но потом обнаружил, что мне нужно установить тип содержимого для этого потока, поэтому я попробовал API-интерфейс REST WCF, но это страдает от той же проблемы. поэтому я сейчас просто использую HTTPListener и обрабатываю событие. Я бы предпочел использовать WCF, но я не уверен, что это позволит мне возвращать поток с правильным типом контента. так вот что у меня есть для httpListener.
в обработчик перезвона слушателя я положил следующее.
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);
метод Render выглядит следующим образом
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);
}
}
На данный момент я только что добавил несколько изображений в формате jpeg в качестве свойств в dll и перебираю их, в конце концов это будут динамические изображения, но сейчас я просто хочу, чтобы все заработало.
Из того, что я понимаю о MJPEG (спецификации), является то, что контент должен быть установлен на multipart / x-mixed-replace и набор границ. а затем вы просто ограничиваете JPEG в потоке по границе.
Кажется, это должно быть проще, чем я делаю, но мне интересно, где я иду не так. если я загружаю этот URL в IE или Firefox, он просто зависает. если я пытаюсь создать заглушку html-страницы с тегом img, источником которого является URL, то я получаю испорченное изображение.
Любые идеи, спасибо
мистифицировать