Created
October 9, 2015 12:44
-
-
Save SajjadArifGul/2f4f22dba5d8462a8c80 to your computer and use it in GitHub Desktop.
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
using System; | |
using System.Collections.Generic; | |
using System.ComponentModel; | |
using System.Data; | |
using System.Drawing; | |
using System.Text; | |
using System.Windows.Forms; | |
using System.Diagnostics; | |
using AForge.Video.FFMPEG; | |
using AForge.Video; | |
using AForge.Video.DirectShow; | |
// AForge.NET framework | |
// http://www.aforgenet.com/framework/ | |
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", | |
}; | |
if ( form.ShowDialog( this ) == DialogResult.OK ) | |
{ | |
// create video source | |
MJPEGStream mjpegSource = new MJPEGStream( form.URL ); | |
// open it | |
OpenVideoSource( mjpegSource ); | |
} | |
} | |
// Capture 1st display in the system | |
private void capture1stDisplayToolStripMenuItem_Click( object sender, EventArgs e ) | |
{ | |
OpenVideoSource( new ScreenCaptureStream( Screen.AllScreens[0].Bounds, 100 ) ); | |
} | |
// 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( ); | |
} | |
} | |
} | |
} | |
} |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment