Hur till stream den solar förmörkelsen till en hemsida med en USB-webbkamera (C#-källkod) - 20 mars, 2015 (1 / 3 steg)
Steg 1: Hur man kan utveckla USB kamera streamer i C#
MainWindow.xaml.cs
När du har installerat MS Visual Studio, MS .NET Framework och C# Onvif biblioteket, låt oss skapa ett nytt WPF-projekt i Visual Studio. Följande kodutdrag visar den MainWindow.xaml.cs fil, som innehåller alla nödvändiga metoder som behövs för att kunna ansluta till och koppla från USB-kameran (och även för din IP-kamera). Därefter behöver du implementera MJPEG streaming. Först måste du få att din ansökan kommer att kunna starta och stoppa webb-sändningar. Det krävs också att låta programvaran öppna kamera strömmen i en webbläsare.
(Alla nödvändiga metoder och de motsvarande händelsehanterare kan ses nedan i kodsträngen, men observera att GUI element inte beskrivs här. Bifogade exempelprojektet innehåller full källkod inklusive GUI element också. Känn dig fri att använda och modifiera det bifogade prov programmet.)
använder System.IO;
använder System.Net;
använder System.Net.Sockets;
använder System.Text;
använder System.Windows;
använder System.Windows.Media;
använder Ozeki.Media.IPCamera;
använder Ozeki.Media.MediaHandlers;
använder Ozeki.Media.MediaHandlers.Video;
använder Ozeki.Media.MJPEGStreaming;
använder Ozeki.Media.Video.Controls;
//
Du måste lägga till Ozeki kamera SDK referens.
Du kan hämta här: http://www.camera-sdk.com/p_13-download-onvif-standard-ozeki-camera-sdk-for-webcam-and-ip-camera-developments-onvif.html
//
namnområdet Basic_CameraViewer
{
///
Interaktion logik för MainWindow.xaml
///
offentliga partiell klass MainWindow: fönster
{
privat VideoViewerWPF _videoViewerWpf;
privat BitmapSourceProvider _provider;
privat IIPCamera _ipCamera;
privata webbkamera _webCamera;
privat MediaConnector _connector;
privat MJPEGStreamer _streamer;
privat IVideoSender _videoSender;
offentliga MainWindow()
{
InitializeComponent();
_connector = ny MediaConnector();
_provider = ny BitmapSourceProvider();
SetVideoViewer();
ipAddressText.Text = LocalIpAddress();
}
privata statisk sträng LocalIpAddress()
{
var localIp = sträng. Tom;
var värd = Dns.GetHostEntry(Dns.GetHostName());
foreach (var ip i mottagande. Adresslista)
{
om (ip. AddressFamily! = AddressFamily.InterNetwork) fortsätta;
localIp = ip. ToString();
bryta;
}
återvända localIp;
}
privata void SetVideoViewer()
{
_videoViewerWpf = ny VideoViewerWPF
{
HorizontalAlignment = HorizontalAlignment.Stretch,
VerticalAlignment = VerticalAlignment.Stretch,
Bakgrund = Brushes.Black
};
CameraBox.Children.Add(_videoViewerWpf);
_videoViewerWpf.SetImageProvider(_provider);
}
privata void OnConnectEnabled()
{
DisconnectUsbButton.IsEnabled = sant;
DisconnectIpCamButton.IsEnabled = sant;
StartServerButton.IsEnabled = sant;
ConnectUsbButton.IsEnabled = false;
ConnectIpCamButton.IsEnabled = false;
}
privata void OnDisconnectEnabled()
{
DisconnectUsbButton.IsEnabled = false;
DisconnectIpCamButton.IsEnabled = false;
StartServerButton.IsEnabled = false;
ConnectUsbButton.IsEnabled = sant;
ConnectIpCamButton.IsEnabled = sant;
}
#region USB-kamera ansluta/koppla bort
privata void ConnectUSBCamera_Click (objekt avsändare, RoutedEventArgs e)
{
_webCamera = WebCamera.GetDefaultDevice();
om (_webCamera == null) återvända;
_connector. Anslut (_webCamera, _provider);
_videoSender = _webCamera;
_webCamera.start();
_videoViewerWpf.start();
OnConnectEnabled();
}
privata void DisconnectUSBCamera_Click (objekt avsändare, RoutedEventArgs e)
{
_videoViewerWpf.stop();
_webCamera.stop();
_webCamera.Dispose();
_connector. Koppla bort (_webCamera, _provider);
OnDisconnectEnabled();
}
#endregion
#region IP-kamera ansluta/koppla bort
privata void ConnectIPCamera_Click (objekt avsändare, RoutedEventArgs e)
{
var värd = HostTextBox.Text;
var användaren = UserTextBox.Text;
var pass = Password.Password;
_ipCamera = IPCameraFactory.GetCamera (host, user, pass);
om (_ipCamera == null) återvända;
_connector. Anslut (_ipCamera.VideoChannel, _provider);
_videoSender = _ipCamera.VideoChannel;
_ipCamera.start();
_videoViewerWpf.start();
OnConnectEnabled();
}
privata void DisconnectIPCamera_Click (objekt avsändare, RoutedEventArgs e)
{
_videoViewerWpf.stop();
_ipCamera.Disconnect();
_ipCamera.Dispose();
_connector. Koppla bort (_ipCamera.VideoChannel, _provider);
OnDisconnectEnabled();
}
#endregion
privata void Start_Streaming_Click (objekt avsändare, RoutedEventArgs e)
{
var ip = ipAddressText.Text;
var port = PortText.Text;
_streamer = ny MJPEGStreamer (ip, int. Parse(port));
_connector. Anslut (_videoSender, _streamer. VideoChannel);
_streamer. ClientConnected += streamer_ClientConnected;
_streamer. ClientDisconnected += streamer_ClientDisconnected;
_streamer. Start();
OpenInBrowserButton.IsEnabled = sant;
StartServerButton.IsEnabled = false;
StopServerButton.IsEnabled = sant;
}
void streamer_ClientConnected (objekt avsändare, Ozeki.VoIP.VoIPEventArgs e)
{
e.Item.StartStreaming();
}
void streamer_ClientDisconnected (objekt avsändare, Ozeki.VoIP.VoIPEventArgs e)
{
e.Item.StopStreaming();
}
privata void Stop_Streaming_Click (objekt avsändare, RoutedEventArgs e)
{
_streamer. Stop();
_connector. Koppla bort (_videoSender, _streamer. VideoChannel);
OpenInBrowserButton.IsEnabled = false;
StopServerButton.IsEnabled = false;
StartServerButton.IsEnabled = sant;
}
privata void OpenInBrowserClick (objekt avsändare, RoutedEventArgs e)
{
var ip = ipAddressText.Text;
var port = PortText.Text;
CreateHTMLPage (ip, port);
System.Diagnostics.Process.Start("test.html");
}
privata void CreateHTMLPage (string ipadress, sträng port)
{
med hjälp av (var fs = nya FileStream ("test.html", FileMode.Create))
{
med hjälp av (var w = nya StreamWriter (fs, Encoding.UTF8))
{
w.WriteLine("");
}
}
}
}
}