смешайте 2 настоящие веб-камеры в поддельные веб-камеры - PullRequest
0 голосов
/ 25 сентября 2011

Мне нужно получить потоковую передачу с 2 веб-камер на одном компьютере и смешать ее как поддельную веб-камеру (чтобы я мог использовать поддельную веб-камеру в любом программном обеспечении).Я видел, что camcamx для Mac, webcamstudio для Linux, но мне нужно решение для Windows, и я не могу найти его, поэтому я подумал написать свое небольшое приложение.Я могу программировать на C #, Java и Lazarus, но примеры или библиотека или что-то еще на любом языке помогут в любом случае.

мне нужно будет создать поддельную веб-камеру, которая может использоваться в качестве веб-камеры (определяется на моем компьютере каквеб-камера USB) и некоторый код для захвата потока с двух реальных веб-камер и микширования всего вместе (в углу большого изображения будет как основная веб-камера большего размера, так и дополнительная веб-камера меньшего размера)

Кто-нибудь может мне в этом помочь?

Ответы [ 3 ]

2 голосов
/ 27 сентября 2011

Это не тривиальное упражнение, но оно может быть выполнено.Я знаю, потому что я сделал это раньше.:)

Я реализовал это в C ++.

Что вам нужно сделать, это создать так называемый сервер с общей памятью.Сервер общей памяти - это область оперативной памяти, к которой могут обращаться несколько процессов.Вот как создать ее, используя именованную общую память под Windows:

http://msdn.microsoft.com/en-us/library/windows/desktop/aa366551(v=vs.85).aspx

В вашем приложении, которое смешивает видео с двух камер, необходимо создать фильтр рендеринга DirectShow (CBaseRenderer)который записывает смешанный видеокадр в эту общую память.

С другой стороны, вам нужно создать отдельный проект DLL Visual Studio, который будет реализовывать фильтр захвата DirectShow (CSource и CSourceStream), который будет читать растровые изображения видео.Ваше основное приложение записывает в этот буфер.Этот проект VS должен быть регистрируемой библиотекой DLL, которую можно вызвать для регистрации в качестве устройства захвата DirectShow для Windows.

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

Совет № 1: Посколькуэто многопоточная операция, вам понадобится дескриптор события, чтобы сообщить фильтру захвата о готовности кадра.Вам также понадобится мьютекс для управления доступом к буферу с помощью потока «рендеринга» в вашем приложении и потока «захвата» в устройстве захвата.

Совет № 2: вам не нужно будет вызывать UnmapViewOfFileили CloseHandle для указателей памяти до тех пор, пока не будут удалены фильтры рендеринга или захвата.

Существует много кода, который вам нужно будет отшлифовать, поэтому любые полезные примеры будут выходить за рамки этого обсуждения.Это должно привести вас в правильном направлении.Удачи!

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

Захват видео с реальной веб-камеры: Захват видео на MSDN

Поддельная веб-камера: хорошо известная отправная точка - пример / проект Вивека, доступный по адресу http://tmhare.mvps.org/downloads.htm,, см. Также этот пост "Поддельное" устройство захвата видео DirectShow

Собрать все вместе можно, но не тривиально.

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

Я думаю, что ваш вопрос слишком далеко выходит за рамки того, для чего предназначен этот сайт. Вы говорите о тысячах и тысячах строк кода и глубоких знаниях драйверов, декодирования видео, микширования и т. Д. И т. Д., Если вы собираетесь писать это программное обеспечение самостоятельно.

С учетом сказанного, вероятно, - это программное обеспечение для Windows. Я бы начал здесь:

...