Beispiel #1
0
        private async void WriteModifiedBufferBody(object sender, NewImageBufferReadyEventArgs e)
        {
            try
            {
                // using System.Drawing has serious performance implications in the context of video streaming from low powered devices,
                // here is a 'simple' example of modifying the image, which will not be fast enough in most use cases.
                using var stream = new MemoryStream(e.ImageBuffer.AsMemory().Slice(0, e.Length).ToArray());
                Bitmap   myBitmap = new Bitmap(stream);
                Graphics g        = Graphics.FromImage(myBitmap);
                g.DrawString(DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss"), new Font("Tahoma", 20), Brushes.White, new PointF(0, 0));
                using var ms = new MemoryStream();
                myBitmap.Save(ms, ImageFormat.Jpeg);
                await HttpContext.Response.BodyWriter.WriteAsync(CreateHeader(e.Length));

                await HttpContext.Response.BodyWriter.WriteAsync(ms.ToArray());

                await HttpContext.Response.BodyWriter.WriteAsync(CreateFooter());
            }
            catch (ObjectDisposedException)
            {
                // ignore this as its thrown when the stream is stopped
            }

            ArrayPool <byte> .Shared.Return(e.ImageBuffer);
        }
Beispiel #2
0
        private async void WriteBufferBody(object sender, NewImageBufferReadyEventArgs e)
        {
            try
            {
                await HttpContext.Response.BodyWriter.WriteAsync(CreateHeader(e.Length));

                await HttpContext.Response.BodyWriter.WriteAsync(e.ImageBuffer.AsMemory().Slice(0, e.Length));

                await HttpContext.Response.BodyWriter.WriteAsync(CreateFooter());
            }
            catch (ObjectDisposedException)
            {
                // ignore this as its thrown when the stream is stopped
            }

            ArrayPool <byte> .Shared.Return(e.ImageBuffer);
        }