Невозможно записать полный экран с помощью FFMEG Video File Writer - C # - PullRequest
0 голосов
/ 02 апреля 2019

Мое приложение должно записывать весь экран как видео.Для этого я установил

AForge.Video.FFMPEG

и сделал, как показано ниже.Теперь я могу записать экран.Но некоторая нижняя область и правая конечная область экрана отсутствуют.Кто-нибудь может подсказать, что вызывает проблему?Я хочу записать весь экран.

SystemInformation.VirtualScreen

используется для расчета размера экрана.это становится как 1536 * 864.Кажется, проблема в функции SetScreenArea ().Screen that I'm trying to record Screen what I'm getting after recording.

  private ScreenCaptureStream _streamVideo;
  private VideoFileWriter _Screenwriter;
  private Rectangle _screenArea;
  private bool _isScreenRecording;
  private int _Screenwidth;
  private int _Screenheight;
  public RecordVideo()
    {
        InitializeComponent(); 
        this._Screenwriter = new VideoFileWriter();
        this._Screenwidth = SystemInformation.VirtualScreen.Width;
        this._Screenheight = SystemInformation.VirtualScreen.Height;
        this._isScreenRecording = false;
        this._screenArea = Rectangle.Empty;
      }
 private void btn_startRecord_Click(object sender, EventArgs e)
    {
        try
        {        
        if (btn_screenRecord.Text == "Record")
        {
            FolderBrowserDialog fbd = new FolderBrowserDialog();
            if (fbd.ShowDialog() == DialogResult.OK)
            {
                _isScreenRecording = true;
                this.StartRecScreen(fbd.SelectedPath);
            }
        }
        else
        {
            _isScreenRecording = false;
            btn_screenRecord.Text = "Record";
            MessageBox.Show(@"Recorded !");
        }
        }
        catch (Exception EX)
        { MessageBox.Show(EX.Message); }
    }

private void StartRecScreen(string path)
    {
       btn_screenRecord.Text = "Stop";
       this.SetScreenArea();
      _isRecording = true;
       string fullName = string.Format(@"{0}\{1}_{2}.mp4", path, "Record_", DateTime.Now.ToString("d_MMM_yyyy_HH_mm_ssff"));

            // Save File option
            _Screenwriter.Open(
                fullName,
                this._Screenwidth,
                this._Screenheight,
                10, VideoCodec.MPEG4, 1000000);
            // create screen capture video source
            this._streamVideo = new ScreenCaptureStream(this._screenArea);

            // set NewFrame event handler
            this._streamVideo.NewFrame += new NewFrameEventHandler(this.video_NewScreenFrame);

            // start the video source
            this._streamVideo.Start();

    }
    private void video_NewScreenFrame(object sender, NewFrameEventArgs eventArgs)
    {
        if (this._isScreenRecording)
        {              
            this._Screenwriter.WriteVideoFrame(eventArgs.Frame);             
        }
        else
        {             
            _streamVideo.SignalToStop();             
            _Screenwriter.Close();
        }
    }

    private void SetScreenArea()
    {
        // get entire desktop area size
        foreach (Screen screen in Screen.AllScreens)
        {
            this._screenArea = Rectangle.Union(_screenArea, screen.Bounds);
        }
    }
...