Я хочу использовать PJSIP с поддержкой видео для программы Windows (Win32 / MFC / C ++). Посмотрев на сайт проекта PJSIP (http://trac.pjsip.org/repos/wiki/Getting-Started/Windows) Вижу среди прочего (дополнительные требования):
В этом случае мне нужна следующая конфигурация в моем config_site.h:
#define PJMEDIA_HAS_VIDEO 1
#define PJMEDIA_HAS_FFMPEG 1
#define PJMEDIA_VIDEO_DEV_HAS_SDL 1
#define PJMEDIA_VIDEO_DEV_HAS_DSHOW 1
Если я добавлю эти два компонента в свой проект PJSIP, все будет работать нормально, я получу уведомление о входящем звонке и смогу показать / снять видео с камеры на двери.
Мой вопрос:
Действительно ли мне нужны оба этих компонента (SDL и DirectX / DirectShow) для программы Windows? Это означает, что мне обязательно нужен SDL (я полагаю, нет), и если да, мне также нужен DirectX? Почему я не могу использовать OpenGL для Windows? Может быть, у кого-то есть опыт с этой темой — я был бы признателен за вашу помощь!
Вам определенно нужен DirectShow. Не уверен в необходимости SDL …
DirectShow предоставляет потоковый интерфейс для источников видеозахвата в Windows. Хотя DirectShow в первую очередь представляет собой набор компонентов пользовательского режима, поставляемый фильтр захвата видео (обычно KsProxy.ax) связывается через определенный набор интерфейсов и свойств с драйверами захвата на уровне ядра. Некоторые производители камер предпочитают использовать свой собственный фильтр захвата DirectShow в режиме пользователя с частными (обычно ядром) интерфейсами к своему оборудованию, что делает DirectShow общей точкой доступа для всех устройств захвата видео Windows.
SDL предоставляет кроссплатформенную библиотеку, которая обеспечивает быстрый доступ к дисплею. Это используется кодеками в PJSIP для вывода декодированного видео на дисплей.
Похоже, PJSIP возможно поддерживает использование DirectShow в качестве фильтра рендеринга. Увидеть:
http://svn.pjsip.org/repos/pjproject/trunk/pjmedia/src/pjmedia-videodev/dshow_dev.c
Из источника неясно, будет ли работать код для включения средства визуализации DirectShow в строке 52, если он включен:
/* Temporarily disable DirectShow renderer (VMR) */
#define HAS_VMR 0
Поскольку это закомментировано, я бы предположил, что код не был полностью завершен, поэтому все примеры также требуют SDL.
Других решений пока нет …