public static void StartScreenCapturer() { ScreenCapturer.OnScreenUpdated += ScreenCapturer_OnScreenUpdated; ScreenCapturer.OnCaptureStop += ScreenCapturer_OnCaptureStop; ScreenCapturer.StartCapture(); ScreenCapturer.SkipFirstFrame = true; System.Threading.Thread.Sleep(500); }
public async static Task MainAsync(int role, string addr, int port) { encoderParameters = new EncoderParameters(1); encoderParameters.Param[0] = new EncoderParameter(Encoder.Quality, encodeQuality); imageCodecInfo = GetEncoder(ImageFormat.Jpeg); VideoStreamer.role = role; udpSock = new Socket(AddressFamily.InterNetwork, SocketType.Dgram, ProtocolType.Udp); divideRects = new Rectangle[divideWidth * divideHeight]; int blockWidth = width / divideWidth; int blockHeight = height / divideHeight; for (int x = 0; x < divideWidth; x++) { for (int y = 0; y < divideHeight; y++) { int pos = y * divideWidth + x; divideRects[pos] = new Rectangle(x * blockWidth, y * blockHeight, blockWidth, blockHeight); } } currImage = new Bitmap(width, height, System.Drawing.Imaging.PixelFormat.Format32bppRgb); currImageDraw = Graphics.FromImage(currImage); MainWindow.current.Dispatcher.Invoke(() => { writeableBitmap = new WriteableBitmap(width, height, 96, 96, PixelFormats.Bgra32, null); MainWindow.current.VideoObject.Source = writeableBitmap; }); if (role == 0) { udpSock.Bind(new IPEndPoint(IPAddress.Any, port)); Thread rcv = new Thread(new ThreadStart(receiverThreadProcessor)); rcv.IsBackground = false; rcv.Priority = ThreadPriority.Highest; rcv.Start(); } else { udpSock.Bind(new IPEndPoint(IPAddress.Any, 0)); remote = new IPEndPoint(IPAddress.Parse(addr), port); ScreenCapturer.OnScreenUpdated += CapturedEvent; ScreenCapturer.StartCapture(); } await Task.Delay(-1); }
private static void ScreenCapturer_OnCaptureStop(object sender, OnCaptureStopEventArgs e) { ScreenCapturer.StartCapture(); }