рдПрдХ рдХреИрдорд░реЗ рд╕реЗ рд╡реАрдбрд┐рдпреЛ рдХреИрдкреНрдЪрд░ рдХрд░рдирд╛ рдФрд░ рдЗрд╕реЗ рдиреЗрдЯрд╡рд░реНрдХ рдкрд░ рд╕реНрдерд╛рдирд╛рдВрддрд░рд┐рдд рдХрд░рдирд╛

рдкреНрд░рд╕реНрддрд╛рд╡рдирд╛


рдмрд╣реБрдд рд╕рдордп рдкрд╣рд▓реЗ рдРрд╕рд╛ рдирд╣реАрдВ рдерд╛, рдПрдХ рд╡реЗрдм рдХреИрдорд░рд╛ рд╕реЗ рд╡реАрдбрд┐рдпреЛ рдХреЛ рдХреИрдкреНрдЪрд░ рдХрд░рдиреЗ рдФрд░ рдиреЗрдЯрд╡рд░реНрдХ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдЗрд╕реЗ рд╕рдВрдЪрд╛рд░рд┐рдд рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рдереАред
рдЪреВрдВрдХрд┐ рдореБрдЭреЗ рдкрд╣рд▓реА рдмрд╛рд░ рдЗрд╕ рд╕рдорд╕реНрдпрд╛ рдХрд╛ рд╕рд╛рдордирд╛ рдХрд░рдирд╛ рдкрдбрд╝рд╛ рдерд╛, рдЗрд╕рд▓рд┐рдП рд╕рдмрд╕реЗ рдкрд╣рд▓реЗ рдореИрдВрдиреЗ рдЗрд╕ рдореБрджреНрджреЗ рдкрд░ рдЬрд╛рдирдХрд╛рд░реА рдХреА рддрд▓рд╛рд╢ рд╢реБрд░реВ рдХреАред
рдЬреИрд╕рд╛ рдХрд┐ рдпрд╣ рдирд┐рдХрд▓рд╛, рдПрдХ рд╕рд╛рдлред рдиреЗрдЯ рдореЗрдВ рд╡реЗрдм рдХреИрдорд░реЛрдВ рдХреЗ рд╕рд╛рде рдХрд╛рдо рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдХреЛрдИ рд╕рдорд░реНрдерди рдирд╣реАрдВ рд╣реИред рдХрдИ рдЕрд▓рдЧ-рдЕрд▓рдЧ рдкреБрд╕реНрддрдХрд╛рд▓рдпреЛрдВ рд╕реЗ рдЧреБрдЬрд░рдиреЗ рдХреЗ рдмрд╛рдж, рдореИрдВрдиреЗ Aforge.net рдХреЛ рдЪреБрдирд╛ред

Aforge.net рдХрдИ рд╕рдорд╕реНрдпрд╛рдУрдВ рдХреЛ рд╣рд▓ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдПрдХ рд░реВрдкрд░реЗрдЦрд╛ рд╣реИ, рдЬрд┐рд╕рдореЗрдВ рд╕реЗ рд╣рдореЗрдВ AForge.Video рд▓рд╛рдЗрдмреНрд░реЗрд░реА рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реЛрдЧреАред

рдЫрд╡рд┐ рдкрд░ рдХрдмреНрдЬрд╛


рд╡реАрдбрд┐рдпреЛ рдЗрдирдкреБрдЯ рдбрд┐рд╡рд╛рдЗрд╕ рд╕реЗ рд╡реАрдбрд┐рдпреЛ рдХреИрдкреНрдЪрд░ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, AForge.Video.DirectShow.VideoCaptureDevice рдХреНрд▓рд╛рд╕ рд╣реИред рдЙрд╕реЗ рдЙрд╕ рдбрд┐рд╡рд╛рдЗрд╕ рдХреЗ рдореЙрдиреАрдХрд░ рдХреЛ рд╕реЗрдЯ рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ рдЬрд┐рд╕рдореЗрдВ рд╕реЗ рдХреИрдкреНрдЪрд░ рд╣реЛрдЧрд╛ред NewFrame рдЗрд╡реЗрдВрдЯ NewFrame рдХреЛ рд╕реЗрдЯ рдХрд░рдирд╛ рднреА рдЖрд╡рд╢реНрдпрдХ рд╣реИред рдпрд╣ рдШрдЯрдирд╛ рд╣рд░ рдмрд╛рд░ рдбрд┐рд╡рд╛рдЗрд╕ рд╕реЗ рдПрдХ рдирдпрд╛ рдлреНрд░реЗрдо рдкреНрд░рд╛рдкреНрдд рд╣реЛрдиреЗ рдкрд░ рд╣реЛрддреА рд╣реИ, рдЬрд┐рд╕реЗ Bitmap рдСрдмреНрдЬреЗрдХреНрдЯ рдХреЗ рд░реВрдк рдореЗрдВ рд╣реИрдВрдбрд▓рд░ рдХреЛ рдкреНрд░реЗрд╖рд┐рдд рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ, рдЬрд╣рд╛рдВ рдЗрд╕реЗ рдкрд╣рд▓реЗ рд╕реЗ рд╣реА рд╕рдВрд╕рд╛рдзрд┐рдд рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ:
 private void VideoSourceNewFrame(object sender, AForge.Video.NewFrameEventArgs eventArgs) { var img = (Image) eventArgs.Frame; using (var ms=new MemoryStream()) { img.Save(ms,ImageFormat.Jpeg); //    ,    mjpeg _bufImage = ms.ToArray(); } } 


Start() рд╡рд┐рдзрд┐ рдХреЛ рдХреЙрд▓ рдХрд░рдХреЗ рд╡реАрдбрд┐рдпреЛ рдХреИрдкреНрдЪрд░ рд▓реЙрдиреНрдЪ рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИред

рд╕рд┐рд╕реНрдЯрдо рдореЗрдВ рд╕реНрдерд╛рдкрд┐рдд рдЙрдкрд▓рдмреНрдз рдХреИрдорд░реЛрдВ рдХреА рд╕реВрдЪреА FilterInfoCollection рд╡рд░реНрдЧ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдкреНрд░рд╛рдкреНрдд рдХреА рдЬрд╛ рд╕рдХрддреА рд╣реИ, рдЗрд╕реЗ рдПрдХ рдкреИрд░рд╛рдореАрдЯрд░ рдХреЗ рд░реВрдк рдореЗрдВ рдкрд╛рд░рд┐рдд рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ, рдЖрд╡рд╢реНрдпрдХ рдбрд┐рд╡рд╛рдЗрд╕ рд╢реНрд░реЗрдгреА:
 var videoDevices = new FilterInfoCollection(FilterCategory.VideoInputDevice); 

рдпрд╣ рд╡рд░реНрдЧ FilterInfo рддрддреНрд╡реЛрдВ рдХрд╛ рдПрдХ рд╕рдВрдЧреНрд░рд╣ рд╣реИ рдЬрд┐рд╕рдореЗрдВ рджреЛ рдлрд╝реАрд▓реНрдб рд╢рд╛рдорд┐рд▓ рд╣реИрдВ:

рдЗрд╕ рдкреНрд░рдХрд╛рд░, рдбрд┐рд╡рд╛рдЗрд╕ рдореЙрдиреАрдХрд░ рдкреНрд░рд╛рдкреНрдд рдХрд░рдиреЗ рдХреЗ рдмрд╛рдж, рд╣рдо рдЗрд╕реЗ VideoCaptureDevice рдХреНрд▓рд╛рд╕ рдореЗрдВ рдкрд╛рд╕ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред

MJPEG рд╡реАрдбрд┐рдпреЛ рд╕реНрдЯреНрд░реАрдо рдкреАрдврд╝реА


MJPEG (рдореЛрд╢рди рдЬреЗрдкреАрдИрдЬреА) рд╕рдмрд╕реЗ рд╕рд░рд▓ рд╡реАрдбрд┐рдпреЛ рд╕рдВрдкреАрдбрд╝рди рдПрд▓реНрдЧреЛрд░рд┐рдереНрдо рд╣реИ, рдЗрд╕рд▓рд┐рдП рдореИрдВрдиреЗ рдЗрд╕ рдкрд░ рдирд┐рд░реНрдгрдп рд▓рд┐рдпрд╛ред
MJPEG рд╡реАрдбрд┐рдпреЛ рд╕реНрдЯреНрд░реАрдо рдореЗрдВ JPEG рдкреНрд░рд╛рд░реВрдк рдореЗрдВ рдЕрдиреБрдХреНрд░рдорд┐рдХ рдлрд╝реНрд░реЗрдо рд╣реЛрддреЗ рд╣реИрдВ рдЬреЛ http рд╣реЗрдбрд░ рджреНрд╡рд╛рд░рд╛ рдкреВрд░рдХ рд╣реЛрддреЗ рд╣реИрдВ:
 HTTP/1.1 200 OK Cache-Control: no-cache Pragma: no-cache Transfer-Encoding: chunked Content-Type: multipart/x-mixed-replace; boundary=--myboundary Expires: -1 --myboundary Content-Type: image/jpeg Content-Length:96719 .....image....... --myboundary Content-Type: image/jpeg Content-Length:96720 .....next image....... 

рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рдЙрджрд╛рд╣рд░рдг:
 public ActionResult Video() { Response.Clear(); //       Response.ContentType = "multipart/x-mixed-replace; boundary=--myboundary"; //  Response.Expires = 0; Response.Cache.SetCacheability(HttpCacheability.NoCache); var ae = new ASCIIEncoding(); //      while (Response.IsClientConnected) { try { //_bufImage - ,        jpeg var buf = _bufImage; //   var boundary = ae.GetBytes("\r\n--myboundary\r\nContent-Type: image/jpeg\r\nContent-Length:" + buf.Length + "\r\n\r\n"); Response.OutputStream.Write(boundary, 0, boundary.Length); Response.OutputStream.Write(buf, 0, buf.Length); Response.Flush(); // ,     20 / Thread.Sleep(50); } catch (Exception) { } } Response.End(); return null; } 

Aforge.net
MJPEG
Google рдбреЙрдХреНрд╕ рдореЗрдВ рд╕реНрд░реЛрдд рд╕реЗ рд▓рд┐рдВрдХ рдХрд░реЗрдВ

Source: https://habr.com/ru/post/In177793/


All Articles