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( ); } } } }}