示例#1
0
        protected override void StartVideoInternal()
        {
            if (stream != null)
            {
                stream.StopStream();
            }
            stream = new MjpegProcessor.MjpegDecoder();

            if (!Settings.Keys.Contains("User"))
            {
                var kv = OnCredentialsRequired(Environment.UserName);
                Settings["User"] = kv.Key;
                Settings["Pass"] = kv.Value;

                // sick of losing settings
                SaveSettings();
            }

            stream.OnError += err =>
            {
                ErrorArrived(err.Message);
                Trace.WriteLine("[KICK] Restarting video...");
                //StopVideoInternal();
                // StartVideoInternal();
            };

            stream.ParseStream(new Uri(string.Format(
                                           "http://{0}/videostream.cgi?user={1}&pwd={2}", UID, Settings["User"], Settings["Pass"])));
            stream.FrameReady += (_, e) =>
            {
                using (var ptr = new GDIPtr(e.Bitmap.GetHbitmap()))
                {
                    FrameArrived(System.Windows.Interop.Imaging.CreateBitmapSourceFromHBitmap(
                                     ptr.Ptr, IntPtr.Zero, Int32Rect.Empty, BitmapSizeOptions.FromEmptyOptions()));
                }
            };

            try
            {
                currentController = new Controller("http://" + UID + "/", Settings["User"], Settings["Pass"]);

                UpdateValuesFromController();
            }
            catch (WebException ex)
            {
                Trace.WriteLine("Error: " + ex.Message);

                if ((ex.Response as HttpWebResponse).StatusCode == HttpStatusCode.Unauthorized)
                {
                    var kv = OnCredentialsRequired(Settings["User"]);
                    Settings["User"] = kv.Key;
                    Settings["Pass"] = kv.Value;
                    StartVideoInternal();
                }
                else
                {
                    ErrorArrived(ex.Message);
                }
            }
        }
        protected override void StartVideoInternal()
        {
            if (stream != null)
            {
                stream.StopStream();
            }
            stream = new MjpegProcessor.MjpegDecoder();

            stream.OnError += err =>
            {
                ErrorArrived(err.Message);
                Trace.WriteLine("[KICK] Restarting video...");
                StopVideoInternal();
                StartVideoInternal();
            };

            stream.ParseStream(new Uri(Url));
            stream.FrameReady += (_, e) =>
            {
                using (var ptr = new GDIPtr(e.Bitmap.GetHbitmap()))
                {
                    FrameArrived(System.Windows.Interop.Imaging.CreateBitmapSourceFromHBitmap(
                                     ptr.Ptr, IntPtr.Zero, Int32Rect.Empty, BitmapSizeOptions.FromEmptyOptions()));
                }
            };
        }
示例#3
0
        private void InitVideoDevice()
        {
            if (dev == null)
            {
                dev = new VideoCaptureDevice(UID); // moniker
                if (dev.VideoCapabilities != null && dev.VideoCapabilities.Length > 0)
                {
                    foreach (VideoCapabilities c in dev.VideoCapabilities)
                    {
                        Modes.Add(new Mode(c), false);
                    }

                    Mode SelectedMode = null;

                    if (Settings.Keys.Contains("SelectedMode"))
                    {
                        SelectedMode = (Mode)Modes.Keys.First(m => m.Text == Settings["SelectedMode"]);
                    }

                    if (SelectedMode == null)
                    {
                        Trace.WriteLine("Setting Default Mode: " + (Mode)Modes.ElementAt(Modes.Count - 1).Key);
                        SelectedMode = (Mode)Modes.ElementAt(Modes.Count - 1).Key;
                    }

                    new Thread(() =>
                    {
                        Thread.Sleep(200);
                        ModeStateChanged(SelectedMode, true);
                    }).Start();

                    dev.DesiredFrameRate = SelectedMode.Capabilities.MaxFrameRate;
                    dev.DesiredFrameSize = SelectedMode.Capabilities.FrameSize;
                }
                else
                {
                    Trace.WriteLine("Setting fallback mode");
                    dev.DesiredFrameRate = 30;
                    dev.DesiredFrameSize = new System.Drawing.Size(800, 600);
                }

                dev.NewFrame += (_, eventArgs) =>
                {
                    using (var ptr = new GDIPtr(eventArgs.Frame.GetHbitmap()))
                    {
                        BitmapSource source = System.Windows.Interop.Imaging.CreateBitmapSourceFromHBitmap(
                            ptr.Ptr, IntPtr.Zero, Int32Rect.Empty, BitmapSizeOptions.FromEmptyOptions());

                        FrameArrived(source);
                    }
                };
                dev.PlayingFinished  += (_, __) => { };
                dev.VideoSourceError += (_, ex) => { ErrorArrived(ex.Description); };
            }
        }