C # FFmpeg растровые кадры в картинках - PullRequest
0 голосов
/ 08 января 2019

У меня есть приложение C # winforms с живыми видеопотоками с 4 ip-камер через VLC.net (rtsp), и каждые 100 мс мы делаем снимок для анализа. Это работает нормально. Теперь нам нравится делать это вместо VLC.net с FFmpeg, чтобы иметь больше возможностей с (более быстрым) захваченным кадром. У меня уже есть рабочая оболочка ffmpeg, отправляющая каждый кадр как растровое изображение через событие. Тогда у меня есть класс «FmpegVideoWindow», наследующий от PictureBox, здесь мы слушаем входящие кадры и рисуем их на картинке. Таким образом, вместо использования vlc-control в форме, мы используем теперь Picturebox:

 private void ffMpegWrapper_NewFrame1(object sender, NewFrameEventArgs e)
    {

        if (e != null)
        {                

            try
            {                   

                using (Bitmap bm = new Bitmap(e.Frame))
                {
                    frame = (Bitmap)bm.Clone();                                              

                }
            }
            catch
            {
            }               

        }

        Invalidate();
    }

    protected override void OnPaint(PaintEventArgs pe)
    {
        base.OnPaint(pe);
        if (frame != null)
        {
            pe.Graphics.DrawImage(frame, 0, 0, this.Width, this.Height);
           //todo : disposing frame
        }

    }

Это нормально работает, чтобы видеть камеры вживую, они имеют @ 25fps и разрешение D1 704 * 576. Проблема в том, что каждый раз, когда мы выполняем другую обработку, например, открываем форму (настройки) или анализируем снимок, изображение в окне картинки замораживается на короткое время. Та же программа с VLC.net никогда не была проблемой.

Процесс Ffmpeg выполняется в другом потоке. Почему управление VLC.net работает гладко в потоке GUI, а этот новый подход - нет? И что мы можем сделать, чтобы это исправить? Анализ также выполняется в другом потоке, запись результатов из анализатора в базу данных выполняется в потоке GUI. И я не люблю это менять, потому что с VLC.net этого также не нужно было делать. Заранее спасибо.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...