C ++ DirectShow Видео и аудио захват - начало - PullRequest
0 голосов
/ 08 августа 2011

Мне, наконец, удалось отказаться от работы с VFW после нескольких проблем, с которыми я столкнулся при разработке приложения.

Благодаря StackOverflow я теперь знаю, что VFW устарел, и хочу перейти на DShow, чтобы мое приложение работало с Vista / W7.

К сожалению, работа была выполнена, и приложение было отправлено клиенту, но как только мы поняли, что у нас проблемы с частотой кадров в Vista / W7 - мы решили переписать видео класс и использовать DirectShow, чтобы установить хороший механизм захвата аудио / видео для веб-камер.

Это будет сложно, так как мы никогда не кодировали с DShow, и сейчас мы ищем несколько конкретных примеров того, как:

  • Подключение к выбранной веб-камере

    аналогично: capDriverConnect

  • Установите разрешение камеры на 640x480 и формат RGB24 (нам нужно сделать RGB24 до YUV420 для каждого кадра)

    аналогично: capSetVideoFormat / capCaptureSetSetup

  • Установить захват звука для этой веб-камеры

    аналогично: capSetAudioFormat

  • Зарегистрировать два обратных вызова:

    • Один для видеокадра (мы передадим кадры в видеокодер)

    аналогично: capSetCallbackOnVideoStream

    • Один для волнового буфера (мы передадим волновой буфер в аудиокодер)

    аналогично: capSetCallbackOnWaveStream

  • Возможность показывать окно предварительного просмотра где-нибудь в родительском окне

    аналогично: capPreview

  • Выполнение операций Пуск / Стоп при необходимости

    • Start - означало бы, подключить и начать захват аудио / видео кадров
    • Disconnect - означало бы, прекратить захват аудио-видео кадров
  • Выполнить рисование для фактического кадра

    похож на:

    * * SetBitmapBits тысяча семьдесят шесть (CameraInput.GetFrameBitmap (), W * H * 3, vdhdr-> lpData); // нарисовать что-нибудь с помощью gdi + GetBitmapBits (CameraInput.GetFrameBitmap (), w * h * 3, vdhdr-> lpData); // установить обратно кадр с данными

Все вышеперечисленное уже было сделано с VFW, но, как я уже писал, нам, к сожалению, нужно переключиться на Direct Show.

Есть ли кто-нибудь, кто мог бы помочь нам достичь класса, который мог бы спасти нас от месяцев изучения Direct Show?

Ответы [ 2 ]

2 голосов
/ 08 августа 2011

Лучшая ставка для примеров будет от Microsoft .

Ваши вопросы все еще сформулированы с точки зрения VFW, поэтому трудно ответить на них в письменном виде.Например, в DirectShow вы не зарегистрировали бы обратный вызов для кодирования видеокадра.Вместо этого вы бы разработали фильтр кодировщика, который получал бы данные из источника захвата.

В качестве альтернативы, если вы ориентируетесь только на Vista и более поздние версии, существует Microsoft Media Foundation .У меня нет опыта в этом, поэтому я не знаю, как кривая обучения сравнивается с DirectShow.

0 голосов
/ 16 сентября 2011

Я бы посоветовал вам построить график на GraphEdit с использованием фильтров FFDshow .

EditGraph проводит демонстрацию построения графика в DirectShow

Не думаю, что вам нужно создавать класс фильтра самостоятельно. После того, как вы построите график, вы сможете смотреть видео с помощью GraphEdit. Реализация графика - очень простая задача .

...