예제 #1
0
        /// <summary>
        /// Configure the VLC Control(s) and overlay(s) that handle mouse events
        /// </summary>
        private void SetupVlc()
        {
            NumberOfViews = GetNumberOfViews();
            myVlcControl  = new VlcControl[NumberOfViews];
            vlcOverlay    = new VlcOverlay[NumberOfViews];
            string[] vlcMediaOptions = Regex.Split(getIniValue("VlcOptions"), "\\s*,\\s*"); // Split by comma and trim whitespace

            BgPtzWorker = new BackgroundWorker[NumberOfViews];

            for (int i = 0; i < NumberOfViews; i++)
            {
                BgPtzWorker[i] = new BackgroundWorker();
                BgPtzWorker[i].WorkerReportsProgress      = true;
                BgPtzWorker[i].WorkerSupportsCancellation = true;
                BgPtzWorker[i].DoWork += BgPtzWorker_DoWork;

                myVlcControl[i] = new VlcControl();
                vlcOverlay[i]   = new VlcOverlay()
                {
                    Name = "VLC Overlay " + i, BackColor = Color.Transparent, TabIndex = i
                };                                                                                                           //, Parent = myVlcControl[i], Dock = DockStyle.Fill, TabIndex = i };
                vlcOverlay[i].GotoPtzPreset += Viewer_GotoPtzPreset;
                vlcOverlay[i].ToggleMute    += Viewer_ToggleMute;

                // Add panel to VlcControl container to capture mouse events
                Panel MouseEventPanel = new Panel()
                {
                    Parent = myVlcControl[i], BackColor = Color.Transparent, Dock = DockStyle.Fill, TabIndex = i,
                };
                MouseEventPanel.MouseEnter       += VlcOverlay_MouseEnter;
                MouseEventPanel.MouseLeave       += VlcOverlay_MouseLeave;
                MouseEventPanel.MouseDoubleClick += VlcOverlay_MouseDoubleClick;
                MouseEventPanel.MouseMove        += VlcOverlay_MouseMove;
                MouseEventPanel.MouseDown        += VlcOverlay_MouseDown;
                MouseEventPanel.MouseUp          += VlcOverlay_MouseUp;
                MouseEventPanel.MouseWheel       += VlcOverlay_MouseWheel;

                ((System.ComponentModel.ISupportInitialize)(myVlcControl[i])).BeginInit();

                myVlcControl[i].VlcLibDirectory       = VlcViewer.GetVlcLibLocation(); // Tried to call once outside loop, but it causes in exception on program close
                myVlcControl[i].VlcMediaplayerOptions = vlcMediaOptions;               // new string[] { "--network-caching=150", "--video-filter=deinterlace" };
                myVlcControl[i].Location  = new Point(0, 0);
                myVlcControl[i].Name      = string.Format("VLC Viewer {0}", i);
                myVlcControl[i].Rate      = (float)0.0;
                myVlcControl[i].BackColor = Color.Gray;
                myVlcControl[i].TabIndex  = i;
                //myVlcControl[i].MouseDoubleClick += VlcOverlay_MouseDoubleClick;

                // Events
                myVlcControl[i].Playing          += OnVlcPlaying;
                myVlcControl[i].EncounteredError += MyVlcControl_EncounteredError;
                myVlcControl[i].Buffering        += Form1_Buffering;

                //myVlcControl[i].Controls.Add(vlcOverlay[i]);
                // Had to add this line to make work
                ((System.ComponentModel.ISupportInitialize)(myVlcControl[i])).EndInit();
            }

            setSizes();
        }
예제 #2
0
        private void Form1_KeyDown(object sender, KeyEventArgs e)
        {
            switch (e.KeyData)
            {
            case Keys.F5:
                Cursor.Current = Cursors.WaitCursor;
                VlcViewer.DisconnectAll(myVlcControl);
                InitializeForm();
                Cursor.Current = Cursors.Default;
                break;

            case Keys.F11:
                if (WindowState != FormWindowState.Maximized)
                {
                    // Change border style first or else the ClientSize will be larger than the screen dimensions
                    FormBorderStyle = FormBorderStyle.None;
                    WindowState     = FormWindowState.Maximized;
                }
                else
                {
                    WindowState     = FormWindowState.Normal;
                    FormBorderStyle = FormBorderStyle.Sizable;
                }
                break;

            case Keys.Control | Keys.D:
                foreach (Control c in this.Controls)
                {
                    if (c.Tag?.ToString() == "Debug")
                    {
                        c.Visible = !c.Visible;
                        c.BringToFront();
                    }
                }
                break;
            }

            // Call preset if number key pressed
            if (char.IsDigit((char)e.KeyCode) && vlcOverlay[ActiveViewer].PtzController != null)
            {
                int preset = (int)e.KeyValue - (int)Keys.D0;
                if (preset > 0)
                {
                    vlcOverlay[ActiveViewer].ShowNotification(string.Format("Preset {0}", preset), 2000);
                    try
                    {
                        vlcOverlay[ActiveViewer].PtzController.ShowPreset(preset);
                    }
                    catch (IndexOutOfRangeException)
                    {
                        vlcOverlay[ActiveViewer].ShowNotification(string.Format("Preset #{0} undefined", preset), 3000);
                    }
                }
            }
        }
예제 #3
0
        private void Form1_FormClosing(object sender, FormClosingEventArgs e)
        {
            Cursor.Current = Cursors.WaitCursor;
            VlcViewer.DisconnectAll(myVlcControl);

            // Call disconnect (if tagClient is not null)
            //tagClient?.Disconnect();
            Cursor.Current = Cursors.Default;

            log.Info("Application Form closing");
        }
예제 #4
0
        private void VlcOverlay_MouseUp(object sender, MouseEventArgs e)
        {
            Panel      p       = (Panel)sender;
            VlcOverlay overlay = vlcOverlay[p.TabIndex]; // (VlcOverlay)sender;

            log.Debug(string.Format("Mouse up on view {0}", overlay.Name));

            // Set the viewer status
            cbxViewSelect.SelectedIndex = p.TabIndex;
            SetViewerStatus(p.TabIndex);
            txtUri.Text = MyIni.Read("lastURI", "Viewer_" + p.TabIndex);

            if (e.Button == MouseButtons.Right)
            {
                VlcViewer.TogglePause(myVlcControl[p.TabIndex]);
            }

            // Attempt to prevent unstopping PTZ (stop sent before PTZ?)
            BgPtzWorker[overlay.TabIndex].CancelAsync();
            PtzStop(overlay);
        }
예제 #5
0
        private void PauseBtn_Click(object sender, EventArgs e)
        {
            int viewerNum = cbxViewSelect.SelectedIndex;

            VlcViewer.TogglePause(myVlcControl[viewerNum]);
        }
예제 #6
0
 private void BtnLoadLast_Click(object sender, EventArgs e)
 {
     VlcViewer.loadLastStream(myVlcControl, MyIni);
 }