По какой-то причине я не могу заставить работать приведенный ниже фрагмент кода.Я пытаюсь передавать изображения в браузер через HTTP.
[Route("api/v1/camera/live/stream")]
[HttpGet]
public HttpResponseMessage GetStream()
{
logger.Trace($"GET api/v1/camera/live/stream called");
var response = Request.CreateResponse();
response.Content = new PushStreamContent(new Action<Stream, HttpContent, TransportContext>(
async (stream, content, tansportContext) =>
{
try
{
StreamWriter writer = new StreamWriter(stream);
while (HttpContext.Current.Response.IsClientConnected)
{
var image = databuffer.Get<CameraFrame>().LastOrDefault();
if (image != null)
{
MemoryStream ms = new MemoryStream();
ms.SetLength(0);
ms.WriteTo(BytesOf(databuffer.Get<CameraFrame>().Last().Image));
writer.WriteLine("--boundary");
writer.WriteLine("Content-Type: image/jpeg");
writer.WriteLine($"Content-length: {ms.Length}");
writer.WriteLine();
writer.Write(ms.GetBuffer());
writer.Flush();
}
await Task.Delay(33);
}
}
catch (Exception ex)
{
logger.Error($"Streaming error", ex);
throw;
}
logger.Trace("streaming ended");
}));
response.Content.Headers.ContentType =
MediaTypeHeaderValue.Parse("multipart/x-mixed-replace; boundary=--boundary");
return response;
}
private MemoryStream BytesOf(Bitmap image)
{
MemoryStream ms = new MemoryStream();
image.Save(ms, System.Drawing.Imaging.ImageFormat.Jpeg);
return ms;
}
databuffer.Get () постоянно заполняется камерой растровыми кадрами.
Когда я запускаю приведенный выше код, все компилируется нормально.Но когда я использую Chrome для перехода к URL-адресу, он не показывает изображения.