2011-06-05 22 views
14

Necesito crear una cámara web virtual que se asemeje a una cámara web, pero toma como entrada un conjunto de imágenes que reproduce. He visto soluciones como ManyCam y Fake Webcam, pero todas parecen tener una limitación u otra (resolución, tamaño máximo de archivo, fps, etc.). Estoy trabajando en Windows XP SP3.¿Escribir una cámara web virtual?

Entiendo que tengo que escribir una interfaz WIA para esta tarea, pero al ser un programador de Python, nunca he escrito controladores o interfaces para dispositivos. ¿Cuáles son las principales tareas al escribir esta interfaz? ¿Cómo se vería el flujo?

+4

consejo no relacionado: "no diga que usted es un programador de Python", usted es un programador que prefiere (o solo conoce) Python ... todavía. – Javier

+1

Puede ser el desarrollador principal de cpython ... :-) – 6502

+0

@Javier great advice! aunque puede ser más una cosa cultural. @ 6502 solo pensar en eso me hizo volverme loco. si fuera un desarrollador de cpython, ¿no sería un programador de C? o podría ser un programador de Python porque programo Python – aloogobi

Respuesta

18

Necesita escribir el filtro DirectShow, que es un servidor COM que implementa las interfaces IPin, IAMStreamConfig y IKsPropertySet. Para la parte IPin es mejor comenzar heredando la clase CSourceStream, para eso necesita obtener el SDK de Windows, con el SDK instalado habrá fuentes DirectShow Base Classes en la carpeta samples\multimedia\directshow, allí encontrará el CSourceStream (Entre muchos otros). DllRegisterServer la función del servidor COM debe registrar su filtro dentro de la categoría CLSID_VideoInputDeviceCategory usando el mapeador de filtros.

Después de construir el servidor COM, lo registra con la herramienta regsvr32, y su cámara web virtual debería aparecer en las listas de cámaras web.

También verifique la muestra samples\multimedia\directshow\filters\ball que se puede mejorar y utilizar como punto de partida para su tarea.

+0

Muchas gracias por detallar el flujo . Veré las muestras y aprenderé. Gracias de nuevo :) – aloogobi

Cuestiones relacionadas