====== Virtual Camera ======
===== Tips =====
* 为何云桌面需要虚拟摄像头?为何不用USB重定向摄像头?在远程桌面控制中,甚至是在云桌面应用中。
因为大部分都是USB的摄像头,似乎可以直接使用USB远程访问的方式,把USB摄像头的图像数据直接重定向到服务端。
然而,USB重定向传输的是USB通讯协议数据,摄像头的图像数据包含在USB通讯协议中,
这个USB通讯协议是不能做有损压缩的,图像数据本身就非常庞大,这种方式浪费的网络带宽非常高。
曾经做过实验,传输640X480大小的YUY2格式的摄像头图像数据,大致30FPS,没对USB通讯协议做压缩,
传输大约是 5Mbytes 每秒,基本上占了百兆网卡一半的带宽,而且还只是传输 640X480这种小分辨率的图像,
如果是1920P这种图像,那更加恐怖,即使做无损压缩,使用LZMA这种高强度压缩,对图像数据来说,基本上也压缩不到多少。
===== 调研 =====
* DirectShow 实现虚拟摄像头方式:https://github.com/roman380/tmhare.mvps.org-vcam
* DirectShow Baseclasses[[https://github.com/Microsoft/Windows-classic-samples/tree/master/Samples/Win7Samples/multimedia/directshow/baseclasses| example code]]
* AVStream 驱动方式:https://www.pianshen.com/article/44661054887/, https://www.daimajiaoliu.com/daima/4edb067b8100407
* [[https://docs.microsoft.com/en-us/windows-hardware/drivers/samples/avstream-driver-samples|avstream-driver-samples]]
* [[https://github.com/robot9706/VirtualCameraDriver|github 上的一个实现参考]]
* 相关文章
* http://alax.info/blog/1722
* https://blog.csdn.net/fanxiushu/article/details/79830750
* 调研总结:
{{ :public:it:windows:windows_virtual_camera.png |}}
{{ :public:it:windows:windows虚拟摄像头调研v1.0.2.png |}}