Screen capture video source.

The video source constantly captures the desktop screen.

Sample usage:

// get entire desktop area size Rectangle screenArea = Rectangle.Empty; foreach ( System.Windows.Forms.Screen screen in System.Windows.Forms.Screen.AllScreens ) { screenArea = Rectangle.Union( screenArea, screen.Bounds ); } // create screen capture video source ScreenCaptureStream stream = new ScreenCaptureStream( screenArea ); // set NewFrame event handler stream.NewFrame += new NewFrameEventHandler( video_NewFrame ); // start the video source stream.Start( ); // ... // signal to stop stream.SignalToStop( ); // ... private void video_NewFrame( object sender, NewFrameEventArgs eventArgs ) { // get new frame Bitmap bitmap = eventArgs.Frame; // process the frame }
Inheritance: IVideoSource
Beispiel #1
0
        public void DoJob()
        {
            writer = new VideoFileWriter();
            string fullName = DateTime.Now.ToString("yyyy-MM-dd");

            writer.Open(
                fullName + ".mp4",
                Screen.PrimaryScreen.WorkingArea.Width,
                Screen.PrimaryScreen.WorkingArea.Height,
                (int)10,
                VideoCodec.MPEG4, (int)(bitRate._400kbit));


            streamVideo = new ScreenCaptureStream(Screen.PrimaryScreen.WorkingArea);



            DateTime frameControl = DateTime.Now;

            streamVideo.NewFrame += new NewFrameEventHandler((sender, eventArgs) =>
            {
                writer.WriteVideoFrame(eventArgs.Frame);
                frameControl = DateTime.Now;
            });
            streamVideo.Start();
        }
Beispiel #2
0
        private void DoJob()
        {
            try
            {
                streamVideo = new ScreenCaptureStream(screenSize);

                streamVideo.NewFrame += new NewFrameEventHandler(video_NewFrame);

                streamVideo.Start();

                stopWatch.Start();
            }
            catch (Exception ex)
            {
                MessageBox.Show(ex.Message);
            }
        }
Beispiel #3
0
        private void DoJob()
        {
            try
            {
                // create screen capture video source
                streamVideo = new ScreenCaptureStream(screenArea);

                // set NewFrame event handler
                streamVideo.NewFrame += new NewFrameEventHandler(video_NewFrame);


                // start the video source
                streamVideo.Start();


                // stopWatch
                stopWatch.Start();
            }
            catch (Exception gfdgdfhdf)
            {
                MessageBox.Show(gfdgdfhdf.Message);
            }
        }
Beispiel #4
0
        public TestForm(string userId, bool load)
        {
            InitializeComponent();
            uId = userId;
            if (load)//загружаем старую сессию
            {
                test = XML.LoadUserData(userId, out idQuestions, out idAnswers, out time, out curQuestion, out trueAnswers, out date);
            }
            else
            {
                test = XML.LoadRandQuestions(out idQuestions);//загружаем вопросы
                date = DateTime.Now.ToString();
            }
            timer.Interval = new TimeSpan(0, 0, 1); //тик в каждую секунду
            timer.IsEnabled = true;
            timer.Tick += new EventHandler(timer_Tick);
            cUsrId.Content = userId;
            cAmountQuestions.Content = test.Count; //отображаем, сколько всего будет вопросов
            сCurQuestion.Content = curQuestion;//показываем номер текущего вопроса
            ShowQuestion(curQuestion - 1);//загружаем в форму содержимое вопроса
            //начинаем запись видео

            Rectangle screenArea = Rectangle.Empty;
            foreach (System.Windows.Forms.Screen screen in System.Windows.Forms.Screen.AllScreens) //получаем размер экрана
            {
                screenArea = Rectangle.Union(screenArea, screen.Bounds);
            }
            string videoPath = MainWindow.path + "\\video\\" + DateTime.Now.Date.ToShortDateString();
            DirectoryInfo dir = new DirectoryInfo(videoPath);
            //записи хранятся рассортированными по папкам с датой в названии
            if (!dir.Exists)//проверяем, есть ли уже папка с сегодняшней датой
                dir.Create(); //если нет, то создаем ее
            int vidCount = dir.EnumerateFiles(userId + "*").Count(); //проверяем, есть ли уже записи с тамим именем
            if (vidCount ==0 )
                videoPath = MainWindow.path + "\\video\\" + DateTime.Now.Date.ToShortDateString() + "\\" + userId + ".avi";
            else
                videoPath = MainWindow.path + "\\video\\" + DateTime.Now.Date.ToShortDateString() + "\\" + userId + "_"+ vidCount + ".avi"; //если есть, то добавим порядковый номер

            stream = new ScreenCaptureStream(screenArea);
            stream.NewFrame += new NewFrameEventHandler(video_NewFrame);
            stream.FrameInterval = 100 / FRAMERATE;
            try
            {
                writer = new AVIWriter("XVID");
                writer.FrameRate = FRAMERATE;
                writer.Quality = 1;
                writer.Open(videoPath, screenArea.Width, screenArea.Height);
                stream.Start();
            }
            catch (Exception ex) { MessageBox.Show(ex.Message); }
            
        }
        /// <summary>
        ///   Starts playing the preview screen, grabbing
        ///   frames, but not recording to a video file.
        /// </summary>
        /// 
        public void StartPlaying()
        {
            if (IsPlaying) return;

            // Checks if we were already waiting for a window
            // to be selected, in case the user had chosen to 
            // capture from a fixed window.

            if (IsWaitingForTargetWindow)
            {
                // Yes, we were. We will not be waiting anymore
                // since the user should have selected one now.
                IsWaitingForTargetWindow = false;
            }

            else
            {
                // No, this is the first time the user starts the
                // frame grabber. Let's check what the user wants

                if (CaptureMode == CaptureRegionOption.Window)
                {
                    // The user wants to capture from a window. So we
                    // need to ask which window we have to keep a look.

                    // We will return here and wait the user to respond; 
                    // when he finishes selecting he should signal back
                    // by calling SelectWindowUnderCursor().
                    IsWaitingForTargetWindow = true;
                    onTargetWindowRequested(); return;
                }
            }

            // All is well. Keep configuring and start
            CaptureRegion = Screen.PrimaryScreen.Bounds;

            double framerate = Settings.Default.FrameRate;
            int interval = (int)Math.Round(1000 / framerate);
            int height = CaptureRegion.Height;
            int width = CaptureRegion.Width;

            clickCapture.Enabled = true;
            keyCapture.Enabled = true;

            screenStream = new ScreenCaptureStream(CaptureRegion, interval);
            screenStream.VideoSourceError += screenStream_VideoSourceError;

            videoPlayer.VideoSource = screenStream;
            videoPlayer.Start();

            IsPlaying = true;
        }
        /// <summary>
        /// Opens video streamer and starts recordnig.
        /// </summary>
        private void StartRecording()
        {
            InitializeRecordingParameters();
            this.videoStreamer = new ScreenCaptureStream(this.screenArea);
            this.videoStreamer.NewFrame += new NewFrameEventHandler(video_NewFrame);
            this.videoStreamer.Start();

            this.stopWatch.Start();
            this.statusTtextBox.Text = "Recording started...";
        }