8
votes

I want to write a new virtual webcam driver, which for example will take an AVI or live stream for example for screen and stream it as webcam source.

I'll not have webcam really, I want to add a virtual webcam which streams desktop screen.

I should write a webcam in kernel mode to do so ? If so, could you guide me to a sample webcam driver?

If I should do it in DirectShow, how can I add a webcam device to list in webcams list in Control panel, so for example in Yahoo messenger, I can choose that device as webcam and stream my desktop as webcam images.

How can I get started?

3
Admit it: you just want to do the old 'Hall of Mirrors' effect... - Shog9
DirectShow's Push Source Filters Sample will help given at docs.microsoft.com/en-us/windows/win32/directshow/… - user16516930

3 Answers

7
votes

You need to write a DirectShow source filter. The Windows SDK contains a library called baseclasses which helps you developing such a filter. See CSourceStream for a good starting point.

To get the device to show up under the other Video Streaming Devices, you have to register your filter with the DirectShow API under the CLSID_VideoInputCategory. You don't need to/shouldn't write a kernel driver.

2
votes

You can get start with the sample "amcap" under DirectShow package, it is a excellent sample for beginner. If you want to list webcam devices, go to ChooseDevices() method.

1
votes

You would need to develop DirectShow Source Filter for creating Virtual camera, Read this first
https://docs.microsoft.com/en-us/windows/win32/directshow/writing-source-filters

Then you can adopt
https://github.com/roman380/tmhare.mvps.org-vcam

You can work on top of this sample virtual camera.

This implements IAMStreamConfig and IKsPropertySet interfaces
This is built using CSourceStream and CSource class which implements IPin and IBaseFilter