DIY kamera streaming tutorial för den påsklov: hur stream bilden av din övervakningskamera till avlägsna platser (C#-källkod) (2 / 5 steg)
Steg 2: Genomförandet av Fjärrkamera streaming i C# - MainWindow.xaml.cs (1)
Att ha gjort de GUI element, låt oss gå vidare till filen MainWindow.xaml.cs. Efter att infoga den nödvändiga med linjer, finns det ett behov av vissa variabler för att kunna hantera ansökan. I konstruktören måste du initiera MediaConnector och BitmapSourceProvider. Därefter måste du skapa och ange kamera viewer-kontrollen och lägga till det till rutnätet kallas Camerabox. Du måste också ange den BitmapSourceProvider instansen till den video viewer-kontrollen.
Efter detta kommer två regioner i koden: innehållet i den första som används för att ansluta och koppla från en USB-kamera, och den andra en används för att implementera IP-kamera- och urkoppling.
Alla nödvändiga metoder och de motsvarande händelsehanterare kan ses nedan i kodsträngen. Resten av koden beckasin (efter anslutning/frånkoppling metoder) kommer att demonstreras i steg 4. (Bifogade exempelprojektet innehåller full källkod inklusive GUI element också. Känn dig fri att använda och modifiera det bifogade prov programmet.)
< p > med hjälp av System; < br > med System.Collections.Generic;
använder System.Linq;
användande System.Runtime.InteropServices;
använder System.Text;
använder System.Threading.Tasks;
använder System.Windows;
använder System.Windows.Controls;
använder System.Windows.Data;
använder System.Windows.Documents;
använder System.Windows.Input;
använder System.Windows.Media;
använder System.Windows.Media.Imaging;
använder System.Windows.Navigation;
använder System.Windows.Shapes;
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; < /p >< p > namnområdet Basic_CameraViewer
{
///
< /p >
Interaktion logik för MainWindow.xaml
< p > offentliga partiell klass MainWindow: fönster
{
privat VideoViewerWPF _videoViewerWpf; < /p >< p > privat BitmapSourceProvider _provider < /p >< p > privat IIPCamera _ipCamera; < /p >< p > privat webbkamera _webCamera; < /p >< p > privat MediaConnector _connector; < /p >< p > privat minserver _server; < /p >< p > privat IVideoSender _videoSender; < /p >< p > offentliga MainWindow()
{
InitializeComponent(); < /p >< p > _connector = ny MediaConnector(); < /p >< p > _provider = ny BitmapSourceProvider(); < /p >< p > _server = nya MyServer(); < /p >< p > SetVideoViewer();
} < /p >< p > private void SetVideoViewer()
{
_videoViewerWpf = ny VideoViewerWPF
{
HorizontalAlignment = HorizontalAlignment.Stretch,
VerticalAlignment = VerticalAlignment.Stretch,
Bakgrund = Brushes.Black
};
CameraBox.Children.Add(_videoViewerWpf); < /p >< p > _videoViewerWpf.SetImageProvider(_provider);
} < /p >< p > #region USB kamera Anslut/koppla från < /p >< p > privata void ConnectUSBCamera_Click (objekt avsändare, RoutedEventArgs e)
{
_webCamera = WebCamera.GetDefaultDevice();
om (_webCamera == null) återvända;
_connector. Anslut (_webCamera, _provider);
_videoSender = _webCamera; < /p >< p > _webCamera.Start();
_videoViewerWpf.start();
} < /p >< p > privata void DisconnectUSBCamera_Click (objekt avsändare, RoutedEventArgs e)
{
om (_webCamera == null) återvända;
_videoViewerWpf.stop(); < /p >< p > _webCamera.Stop();
_webCamera.Dispose(); < /p >< p > _connector. Koppla bort (_webCamera, _provider);
}
#endregion < /p >< p > #region IP kamera Anslut/koppla från < /p >< p > privata void ConnectIPCamera_Click (objekt avsändare, RoutedEventArgs e)
{
var värd = HostTextBox.Text;
var användaren = UserTextBox.Text;
var pass = Password.Password; < /p >< p > _ipCamera = IPCameraFactory.GetCamera (host, user, pass);
om (_ipCamera == null) återvända;
_connector. Anslut (_ipCamera.VideoChannel, _provider);
_videoSender = _ipCamera.VideoChannel; < /p >< p > _ipCamera.Start();
_videoViewerWpf.start();
} < /p >< p > privata void DisconnectIPCamera_Click (objekt avsändare, RoutedEventArgs e)
{
om (_ipCamera == null) återvända;
_videoViewerWpf.stop(); < /p >< p > _ipCamera.Disconnect();
_ipCamera.Dispose(); < /p >< p > _connector. Koppla bort (_ipCamera.VideoChannel, _provider);
} < /p >< p > #endregion < /p >< p > privata void GuiThread (Action action)
{
Dispatcher.BeginInvoke(action);
} < /p >< p > privata void StartServer_Click (objekt avsändare, RoutedEventArgs e)
{
var ipadress = IpAddressText.Text;
var port = int. Parse(PortText.text);
_SERVER. VideoSender = _videoSender; < /p >< p > _server. OnClientCountChanged += server_OnClientCountChanged; < /p >< p > _server. Start();
_SERVER. SetListenAddress (ipadress, port);
} < /p >< p > void server_OnClientCountChanged (objekt avsändare, EventArgs e)
{
GuiThread(() = >
{
ConnectedClientList.Items.Clear(); < /p >< p > foreach (var klient i _server. ConnectedClients)
ConnectedClientList.Items.Add ("slutpunkt:" +
klienten. TransportInfo.RemoteEndPoint);
});
} < /p >< p > privata void StopServer_Click (objekt avsändare, RoutedEventArgs e)
{
_SERVER. OnClientCountChanged-= server_OnClientCountChanged;
_SERVER. Stop();
}
}
} < /p >