Stap 2: Uitvoering van externe camera streaming in C# - MainWindow.xaml.cs (1)
Hebben gedaand de GUI elementen, laten we overgaan tot het MainWindow.xaml.cs-bestand. Na invoegen de nodige via lijnen, is er behoefte aan een aantal variabelen te kunnen omgaan met de toepassing. In de constructor die u wilt initialiseren van de MediaConnector en de BitmapSourceProvider. Daarna moet u maken en instellen van de camera viewer-besturingselement toevoegen aan het raster genaamd Camerabox. Ook moet u het exemplaar van de BitmapSourceProvider ingesteld op de controle van de video-viewer.
Na deze twee regio's komen in de code: de inhoud van de eerste aansluiten en loskoppelen van een USB-camera wordt gebruikt, en de andere een wordt gebruikt om de IP-cameraverbinding en de verbinding wordt verbroken.
Alle nodige methoden en de corresponderende gebeurtenis-handlers is beneden te zien in het codefragment. De rest van het codefragment (na de methoden verbinding/afsluiting) zullen worden gedemonstreerd in stap 4. (Het bijgevoegde voorbeeld-project bevat de volledige broncode met inbegrip van de GUI elementen. Voel je vrij om te gebruiken en wijzigen van het bijgevoegde steekproefprogramma.)
<p>using System;<br>using System.Collections.Generic; using System.Linq; using System.Runtime.InteropServices; using System.Text; using System.Threading.Tasks; using System.Windows; using System.Windows.Controls; using System.Windows.Data; using System.Windows.Documents; using System.Windows.Input; using System.Windows.Media; using System.Windows.Media.Imaging; using System.Windows.Navigation; using System.Windows.Shapes; using Ozeki.Media.IPCamera; using Ozeki.Media.MediaHandlers; using Ozeki.Media.MediaHandlers.Video; using Ozeki.Media.MJPEGStreaming; using Ozeki.Media.Video.Controls;</p><p>namespace Basic_CameraViewer { /// </p> /// Interaction logic for MainWindow.xaml /// <p> public partial class MainWindow : Window { private VideoViewerWPF _videoViewerWpf;</p><p> private BitmapSourceProvider _provider;</p><p> private IIPCamera _ipCamera;</p><p> private WebCamera _webCamera;</p><p> private MediaConnector _connector;</p><p> private MyServer _server;</p><p> private IVideoSender _videoSender;</p><p> public MainWindow() { InitializeComponent();</p><p> _connector = new MediaConnector();</p><p> _provider = new BitmapSourceProvider();</p><p> _server = new MyServer();</p><p> SetVideoViewer(); }</p><p> private void SetVideoViewer() { _videoViewerWpf = new VideoViewerWPF { HorizontalAlignment = HorizontalAlignment.Stretch, VerticalAlignment = VerticalAlignment.Stretch, Background = Brushes.Black }; CameraBox.Children.Add(_videoViewerWpf);</p><p> _videoViewerWpf.SetImageProvider(_provider); }</p><p> #region USB Camera Connect/Disconnect</p><p> private void ConnectUSBCamera_Click(object sender, RoutedEventArgs e) { _webCamera = WebCamera.GetDefaultDevice(); if (_webCamera == null) return; _connector.Connect(_webCamera, _provider); _videoSender = _webCamera;</p><p> _webCamera.Start(); _videoViewerWpf.Start(); }</p><p> private void DisconnectUSBCamera_Click(object sender, RoutedEventArgs e) { if (_webCamera == null) return; _videoViewerWpf.Stop();</p><p> _webCamera.Stop(); _webCamera.Dispose();</p><p> _connector.Disconnect(_webCamera, _provider); } #endregion</p><p> #region IP Camera Connect/Disconnect</p><p> private void ConnectIPCamera_Click(object sender, RoutedEventArgs e) { var host = HostTextBox.Text; var user = UserTextBox.Text; var pass = Password.Password;</p><p> _ipCamera = IPCameraFactory.GetCamera(host, user, pass); if (_ipCamera == null) return; _connector.Connect(_ipCamera.VideoChannel, _provider); _videoSender = _ipCamera.VideoChannel;</p><p> _ipCamera.Start(); _videoViewerWpf.Start(); }</p><p> private void DisconnectIPCamera_Click(object sender, RoutedEventArgs e) { if (_ipCamera == null) return; _videoViewerWpf.Stop();</p><p> _ipCamera.Disconnect(); _ipCamera.Dispose();</p><p> _connector.Disconnect(_ipCamera.VideoChannel, _provider); }</p><p> #endregion</p><p> private void GuiThread(Action action) { Dispatcher.BeginInvoke(action); }</p><p> private void StartServer_Click(object sender, 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(object sender, EventArgs e) { GuiThread(() => { ConnectedClientList.Items.Clear();</p><p> foreach (var client in _server.ConnectedClients) ConnectedClientList.Items.Add("End point: " + client.TransportInfo.RemoteEndPoint); }); }</p><p> private void StopServer_Click(object sender, RoutedEventArgs e) { _server.OnClientCountChanged -= server_OnClientCountChanged; _server.Stop(); } } }</p>