Как получить видео поток видео с веб-камеры в C ++ - PullRequest
2 голосов
/ 10 июня 2010

Я нацеливаюсь на машины Windows. Мне нужно получить доступ к указателю на байтовый массив, описывающий отдельные потоковые кадры с подключенной веб-камеры USB. Я видел образец playcap DirectShow из Windows SDK, но я не понимаю, как получить необработанные данные, честно говоря, я не понимаю, как видео на самом деле попадает в окно. Поскольку мне не нужно ничего, кроме захвата видео, я бы предпочел не использовать opencv.

Visual Studio 2008 c ++

1 Ответ

1 голос
/ 10 июня 2010

Вставьте фильтр захвата образца. Подключите источник камеры к устройству захвата образца, а затем к нулевому средству визуализации. Пример граббера - это преобразование, поэтому вам нужно куда-то подать выходные данные, но если вам не нужно их визуализировать, хорошим выбором будет нулевой рендер.

Вы можете настроить сэмплер, используя ISampleGrabber. Вы можете организовать обратный вызов вашего приложения для каждого кадра, давая вам либо указатель на сами биты, либо указатель на объект IMediaSample, который также даст вам метаданные.

Вам нужно реализовать ISampleGrabberCB на вашем объекте, а затем вам нужно что-то вроде этого (псевдокод)

IFilterInfoPtr      m_pFilterInfo;
ISampleGrabberPtr   m_pGrabber;

m_pGrabber = pFilter;

m_pGrabber->SetBufferSamples(false);
m_pGrabber->SetOneShot(false);

// force to 24-bit mode
AM_MEDIA_TYPE mt;
ZeroMemory(&mt, sizeof(mt));
mt.majortype = MEDIATYPE_Video;
mt.subtype = MEDIASUBTYPE_RGB24;
m_pGrabber->SetMediaType(&mt);

m_pGrabber->SetCallback(this, 0);
// SetCallback increments a refcount on ourselves,
// but we own the grabber so this is recursive
/// -- must addref before SetCallback(NULL)
Release();
...