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())); } }; }
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); }; } }