Emgu Capture воспроизводит видео очень быстро - PullRequest
6 голосов
/ 06 октября 2011

Когда я воспроизводю видео с помощью Emgu, оно воспроизводится намного быстрее, чем должно.Вот соответствующий код.

public Form1()
{
    InitializeComponent();

    _capture = new Capture("test.avi");
    Application.Idle += RefreshFrames;
}

protected void RefreshFrames(object sender, EventArgs e)
{
    imageBox.Image = _capture.QueryFrame();
}

Я попытался установить FPS с помощью метода SetCaptureProperty для объекта Capture, но он все еще воспроизводится в супер быстром движении.

Ответы [ 2 ]

11 голосов
/ 06 октября 2011

Дескриптор Application.Idle вызывается, когда никакая другая функция не вызывается вашей программой, и у вашего компьютера есть свободные ресурсы.Он не предназначен для вызова в установленные периоды.Вместо этого установите таймер и используйте его функцию для установки скорости воспроизведения.

Timer My_Time = new Timer();
int FPS = 30;

public Form1()
{
    InitializeComponent();

    //Frame Rate
    My_Timer.Interval = 1000 / FPS;
    My_Timer.Tick += new EventHandler(My_Timer_Tick);
    My_Timer.Start();
    _capture = new Capture("test.avi");   
}

private void My_Timer_Tick(object sender, EventArgs e)
{
    imageBox.Image = _capture.QueryFrame();
}

Приведенный выше код должен делать то, что вы хотите, отрегулируйте FPS для получения желаемой скорости воспроизведения.Если вам нужно что-то еще, дайте мне знать,

Приветствия

Крис

0 голосов
/ 01 августа 2014
public Form1()
{
    InitializeComponent();

    _capture = new Capture("test.avi");
    Application.Idle += RefreshFrames;
}

protected void RefreshFrames(object sender, EventArgs e)
{
    imageBox.Image = _capture.QueryFrame();

    Thread.sleep(1000/FrameRate);
}

Используйте thread.sleep, чтобы установить скорость воспроизведения в реальном времени.Вы можете легко добиться этого, используя это :)

...