IP Cam live feed from C#

c#, ip-camera

Solution

For now I did it this way:

string sourceURL = "http://ipaddress/jpg/image.jpg";
            byte[] buffer = new byte[100000];
            int read, total = 0;
            // create HTTP request
            HttpWebRequest req = (HttpWebRequest)WebRequest.Create(sourceURL);
            req.Credentials = new NetworkCredential("username", "pass");
            // get response
            WebResponse resp = req.GetResponse();
            // get response stream
            Stream stream = resp.GetResponseStream();
            // read data from stream
            while ((read = stream.Read(buffer, total, 1000)) != 0)
            {
                total += read;
            }
            // get bitmap
            Bitmap bmp = (Bitmap)Bitmap.FromStream(
                          new MemoryStream(buffer, 0, total));

            pictureBox1.Image = bmp;

Of course I've put this code in a thread and I call it every 500 ms.

Problem

I'm trying to get live feed from TPLink TL-SC3171G IP cam in C# app. I've tried using AForge.NET library but no luck. The sample code from AForge.NET doesn't work for me. I'm getting "The remote server returned an error: (401) unauthorized access." I can access the cam via browser with basic ip adress: `"http://192.168.168.20"`. In app I've tried with: ``` "http://username:password@192.168.168.20" "http://username:password@192.168.168.20:port" ``` Can you please help me with some direction. It really doesn't have to be AForge.NET library. This is the code: ``` using AForge.Video; using AForge.Video.DirectShow; namespace Player { public partial class MainForm : Form { private Stopwatch stopWatch = null; // Class constructor public MainForm( ) { InitializeComponent( ); } private void MainForm_FormClosing( object sender, FormClosingEventArgs e ) { CloseCurrentVideoSource( ); } // "Exit" menu item clicked private void exitToolStripMenuItem_Click( object sender, EventArgs e ) { this.Close( ); } // Open local video capture device private void localVideoCaptureDeviceToolStripMenuItem_Click( object sender, EventArgs e ) { VideoCaptureDeviceForm form = new VideoCaptureDeviceForm( ); if ( form.ShowDialog( this ) == DialogResult.OK ) { // create video source VideoCaptureDevice videoSource = form.VideoDevice; // open it OpenVideoSource( videoSource ); } } // Open video file using DirectShow private void openVideofileusingDirectShowToolStripMenuItem_Click( object sender, EventArgs e ) { if ( openFileDialog.ShowDialog( ) == DialogResult.OK ) { // create video source FileVideoSource fileSource = new FileVideoSource( openFileDialog.FileName ); // open it OpenVideoSource( fileSource ); } } // Open JPEG URL private void openJPEGURLToolStripMenuItem_Click( object sender, EventArgs e ) { URLForm form = new URLForm( ); form.Description = "Enter URL of an updating JPEG from a web camera:"; form.URLs = new string[] { "http://195.243.185.195/axis-cgi/jpg/image.cgi?camera=1", }; if ( form.ShowDialog( this ) == DialogResult.OK ) { // create video source JPEGStream jpegSource = new JPEGStream( form.URL ); // open it OpenVideoSource( jpegSource ); } } // Open MJPEG URL private void openMJPEGURLToolStripMenuItem_Click( object sender, EventArgs e ) { URLForm form = new URLForm(); form.Description = "Enter URL of an MJPEG video stream:"; form.URLs = new string[] { "http://195.243.185.195/axis-cgi/mjpg/video.cgi?camera=4", "http://195.243.185.195/axis-cgi/mjpg/video.cgi?camera=3", "http://192.168.168.20:80", }; if ( form.ShowDialog( this ) == DialogResult.OK ) { // create video source MJPEGStream mjpegSource = new MJPEGStream( form.URL ); // open it OpenVideoSource( mjpegSource ); } } // Open video source private void OpenVideoSource( IVideoSource source ) { // set busy cursor this.Cursor = Cursors.WaitCursor; // stop current video source CloseCurrentVideoSource( ); // start new video source videoSourcePlayer.VideoSource = source; videoSourcePlayer.Start( ); // reset stop watch stopWatch = null; // start timer timer.Start( ); this.Cursor = Cursors.Default; } // Close video source if it is running private void CloseCurrentVideoSource( ) { if ( videoSourcePlayer.VideoSource != null ) { videoSourcePlayer.SignalToStop( ); // wait ~ 3 seconds for ( int i = 0; i < 30; i++ ) { if ( !videoSourcePlayer.IsRunning ) break; System.Threading.Thread.Sleep( 100 ); } if ( videoSourcePlayer.IsRunning ) { videoSourcePlayer.Stop( ); } videoSourcePlayer.VideoSource = null; } } // New frame received by the player private void videoSourcePlayer_NewFrame( object sender, ref Bitmap image ) { DateTime now = DateTime.Now; Graphics g = Graphics.FromImage( image ); // paint current time SolidBrush brush = new SolidBrush( Color.Red ); g.DrawString( now.ToString( ), this.Font, brush, new PointF( 5, 5 ) ); brush.Dispose( ); g.Dispose( ); } // On timer event - gather statistics private void timer_Tick( object sender, EventArgs e ) { IVideoSource videoSource = videoSourcePlayer.VideoSource; if ( videoSource != null ) { // get number of frames since the last timer tick int framesReceived = videoSource.FramesReceived; if ( stopWatch == null ) { stopWatch = new Stopwatch( ); stopWatch.Start( ); } else { stopWatch.Stop( ); float fps = 1000.0f * framesReceived / stopWatch.ElapsedMilliseconds; fpsLabel.Text = fps.ToString( "F2" ) + " fps"; stopWatch.Reset( ); stopWatch.Start( ); } } } } } ```

Original source