Torna al Thread
// Simple Player sample application
// AForge.NET framework
// http://www.aforgenet.com/framework/
//
// Copyright © AForge.NET, 2006-2011
// contacts@aforgenet.com
//
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;
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",
};
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();
}
}
}
private void writetext(object sender, PaintEventArgs e)
{
// Create string to draw.
String drawString = "nessuna connesione";
// Create font and brush.
Font drawFont = new Font("Arial", 16);
SolidBrush drawBrush = new SolidBrush(Color.Yellow);
// Create point for upper-left corner of drawing.
PointF drawPoint = new PointF(150.0F, 150.0F);
// Draw string to screen.
e.Graphics.DrawString(drawString, drawFont, drawBrush, drawPoint);
}
}